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

c# – 项目偏差产生的算法,第1张

概述在我的游戏中,我想生成N个项目,不一定是在同一时间.其中一些项目取决于之前产生的东西(马尔可夫链式),因此连续产生两个火箭发射器的概率很低,但产生火箭发射器的可能性很大,其次是火箭.这样做最有效的方法是什么?该方法将经常调用,所以我试图将计算保持在最低限度. 我想出的一个想法可能是创建一个N×N数组,它充当概率的查找表(项目先前产生的VS项目产生).但是,在这个过程中,我需要一些生成随机数的方法, 在我的游戏中,我想生成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选择值),你会发现当你得到多余的发射器获得更多的可能性将下降.但是,与此同时,你将增加获得火箭的机会.基本上,你会有一些指数衰减的加权因子,如果你最近有一个加权因素会对发射器产生偏见.

总结

以上是内存溢出为你收集整理的c# – 项目偏差产生的算法全部内容,希望文章能够帮你解决c# – 项目偏差产生的算法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1216156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存