在我的游戏中,我想生成N个项目,不一定是在同一时间。其中一些项目取决于之前产生的东西(马尔可夫链式),因此连续产生两个火箭发射器的概率很低,但产生火箭发射器的可能性很大,其次是火箭。这样做最有效的方法是什么?该方法将经常调用,所以我试图将计算保持在最低限度。
我想出的一个想法可能是创建一个N x N数组,它充当概率的查找表(项目先前生成的VS项目产生)。但是,在这个过程中,我需要一些生成随机数的方法,其概率可以作为偏差。我不确定这样做的最佳方式是什么。当库存发挥作用时,事情也会略微变得棘手,因为如果Y量已经产生,则无法生成火箭。我可以创建一个3D数组并将库存号存储在那里,但我不确定根据库存不断更新数组查找表的效率。
这只是我提出的一个想法,但可能还有另一种更好的方法。是否存在比3D阵列更有效的数据结构,或者我应该阅读的算法?
答案 0 :(得分:4)
最有效的方法,如果你不需要存储很多状态,就是做你所暗示的:创建马尔可夫链。与每个州相关联的是一系列退出到下一个州的概率。这使您可以完全控制过程,并且非常紧凑。 (请注意,您可以通过生成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选择值)你会发现你得到多余的发射器,获得更多的可能性将下降。但是,与此同时,你将增加获得火箭的机会。基本上,如果你最近有一个加权因素,你会有一些指数衰减的加权因子会对发射器产生偏见。
答案 1 :(得分:3)
然而,在这个过程中,我需要 某种生成随机数的方法 概率充当偏见。 不知道最好的做法是什么 那是吗?
假设您有4个活动
相对概率之和为16,因此在[0,16]范围内生成随机数 X 。其中四个数字应映射到A,一个映射到B,等等。