2009-12-01 56 views
1

我正在制作一个简单的AI,我对这个领域非常陌生。我需要的是一种基于某些参数做出某种决定的算法;但有一点随机性。到目前为止,我一直在做的是根据我得到的不同值生成一个随机数;采取不同的执行路径。我以某种方式认为有更好的方法来做这种事情。你能给我一些指点吗?随机决策算法

+1

你可以多说一下你想做什么样的决定?这是纯粹的选择之间的一些无关的决定,你正在使用一个体面的随机数字发生器,那么你在做什么听起来不是太糟糕。 – 2009-12-01 18:39:51

+0

这是一款运动模拟器;让我们说网球。根据球员的反手力量,球的入球方向等参数,我想模拟一个镜头;增加一些随机性;但仍然基于上述参数。 – Anoop 2009-12-02 05:03:50

回答

3

我不认为有比你所做的更好的方法,因为问题描述非常模糊,而且它实际上是人工智能问题还是模拟问题尚不清楚。

对于决策部分,通常可以使用简单的启发式系统(基于对被建模行为的直观理解),这是一系列条件语句,可能有一些随机因素会使其变化一点。你可以有一个加权平均系统,选择几个选项,根据感知质量进行排名,然后随机选择一个选项,同时偏向于更好的值。 (这被称为轮盘选择或遗传算法圆圈中的fitness proportionate selection,但在GA之外也非常有用。)

对于模拟零件,您通常需要对过程进行建模,然后引入随机性,以模拟更细微的部分该过程。这意味着要清楚地定义你的输入(反手力量,球的方向,......)和你的输出(球的行进向量?),并考虑它们如何相互关联。这意味着你得到了一些已知值的输出,然后你可以用你的随机数发生器修改它们。如果您试图模拟人类的选择而不仅仅是物理模拟,情况会变得更加复杂,因为这通常优先于所有其他输入。

我可以从一个简单的例子开始,就是玩家AI选择他们想要击球的地方。我将球的计划方向作为一个矢量来计算,该矢量可以将球准确地发送到计划的地方。然后系统根据球的方向,速度,球员的能力等计算0%到100%的难度分数。我生成一个'不准确'修饰符,它是0%和难度%之间的一个随机数,这意味着一个完美的镜头将是完全准确的,而半球镜头的准确度在0%和50%之间。然后,我计算一个随机归一化的单位长度三维矢量,通过这个不准确的值进行缩放,并将其添加到预期的方向。这意味着更难的镜头会倾向于进一步偏离目标。

+0

虽然你说问题描述是模糊的,这是很多有价值的信息。我想我正是想要的;非常感谢。 您是否知道任何处理这类事情的网站 - 特别是关于模拟? – Anoop 2009-12-03 06:08:33

+1

不幸的不是。我的专长领域是游戏和人工智能。大多数现代游戏基本上是低保真软实时模拟,所以原理虽然相似。在游戏中的决策已经被好几本书所覆盖(至少在没有明确解决方案的情况下可以涵盖),但是我喜欢AI游戏编程智慧系列,以展示各种各样的替代方法。 – Kylotan 2009-12-03 11:00:13

0

与大多数关于随机性的问题一样,值得一问的是你要找的是真正的随机性,即白噪声还是湍流(又名Perlin Noise)。一般来说,在大多数领域中,你更可能从湍流中获得看起来比白噪声更“自然”的行为。

0

根据结果与最佳“期望”状态或结果的接近程度给每个执行路径分数。使您的算法根据以前的决策的平均得分选择其未来的执行路径,从而以最高得分的决策给出更大的结果概率。这样,它看起来就好像你的算法不仅仅是学习,而且随机地探索其他可能性,但比做似乎最好的概率要低。当然,通过不仅考虑每个决策路径的分数,而且还考虑其增长率或收缩率,可以使其具有适应性。如果一个决定开始是好的,但是经过多次迭代后,得分越来越低,应该避免更频繁地支持另一个决定谁的得分有增长的趋势。