微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 项目偏差产生的算法

在我的游戏中,我想生成N个项目,不一定是在同一时间.其中一些项目取决于之前产生的东西(马尔可夫链式),因此连续产生两个火箭发射器的概率很低,但产生火箭发射器的可能性很大,其次是火箭.这样做最有效的方法是什么?该方法将经常调用,所以我试图将计算保持在最低限度.

我想出的一个想法可能是创建一个N×N数组,它充当概率的查找表(项目先前产生的VS项目产生).但是,在这个过程中,我需要一些生成随机数的方法,其概率可以作为偏差.我不确定这样做的最佳方式是什么.当库存发挥作用时,事情也会略微变得棘手,因为如果Y量已经产生,则无法生成火箭.我可以创建一个3D数组并将库存号存储在那里,但我不确定根据库存继续更新数组查找表的效率如何.

这只是我提出的一个想法,但可能还有另一种更好的方法.是否存在比3D阵列更有效的数据结构,或者我应该阅读的算法?

解决方法

如果你不需要存储很多状态,最有效的方法就是做你所暗示的:创建马尔可夫链.与每个州相关联的是一系列退出到下一个州的概率.这使您可以完全控制过程,并且非常紧凑. (请注意,您可以通过生成0到1之间的随机数并对累积概率进行二进制搜索来使用它.)

另一种模糊的方法是保持一组概率和一组偏差.如果你有一个偏见词

launcher_bias = 0.8*launcher_bias + 0.2*(1.0 - (last_item == launcher))
rocket_bias = 0.8*rocket_bias + 0.2*(last_item == launcher)

然后用这些值对概率进行加权(然后将整个集合重新规范化为1,或等效地,如果所有项目的总概率最终为0.7或者某些,你从0到0.7选择值),你会发现当你得到多余的发射器获得更多的可能性将下降.但是,与此同时,你将增加获得火箭的机会.基本上,你会有一些指数衰减的加权因子,如果你最近有一个加权因素会对发射器产生偏见.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐