如何根据百分比管理AI操作

时间:2009-03-23 14:22:10

标签: c#

我现在正在寻找程序员如何根据最终幻想策略类游戏(策略游戏)的动作百分比来模拟AI决策。

例如,假设AI角色有以下行为:

攻击1:10%
攻击2:9%
魔术:4%
移动:1%

所有这一切远不等于100%

现在起初我虽然有一个包含100个空插槽的阵列,但攻击将有10个插槽,攻击阵列上的2 9个插槽。随机组合我可以采取行动。我的问题是它不是真的有效,或者似乎不是。同样重要的是,如果我上一个空位,我该怎么办。我是否必须根据100%计算每个角色的所有动作,或者为每个人定义可能的“默认”动作?

或许有更有效的方式来看到这一切?我认为百分比是实现AI的最简单方法。

3 个答案:

答案 0 :(得分:4)

我能想出的最佳答案是列出你希望角色拥有的所有可能的动作,给每个动作一个相对值,然后将它们全部缩放到100%。

编辑:

例如,这里有三个动作。我希望攻击和魔法同样可能,并且逃跑的可能性是攻击或使用魔法的一半:

  • attack = 20
  • magic = 20
  • 逃离= 10

这加起来就是50,所以将每个除以这个总和得到一个小数值(百分比乘以100):

  • attack = 0.4
  • magic = 0.4
  • 逃离= 0.2

然后,我将从中得出一个累积值列表(即每个条目是该条目的总和以及它之前的所有条目):

  • attack = 0.4
  • magic = 0.8
  • flee = 1

现在,生成0到1之间的随机数,并找到列表中第一个大于或等于该数字的条目。这就是你的举动。

答案 1 :(得分:2)

不,你只是创造了门槛。一个简单的方法是:

0 - 9 - > Attack1

10 - 18 - >攻击2

19 - 22 - >魔术

23 - >移动

其他 - > 24-99(你需要加起来100)

现在创建一个随机数并将其修改为100(所以num = randomNumber%100)以定义您的操作。随机数越接近你得到的正确分布。因此,您可以获取结果并查看它属于哪个类别。你实际上可以使这更有效,但这是一个良好的开端。

答案 2 :(得分:1)

如果它们并非全部加起来都不是100,那么它们并不是真正的百分比。这无关紧要。你只需要弄清楚每个动作的相对概率。为此,请使用以下公式...

prob = value_of_action / total_value_of_all_actions

这会给你一个0到1之间的数字。如果你真的想要一个百分比而不是一个分数,那就把它乘以100。

这是一个例子:

prob_attack = 10 / (10 + 9 + 4 + 1)
            = 10 / 24
            = 0.4167

这相当于41.67%的时间选择攻击。

然后您可以生成阈值,如其他答案中所述。并使用0到1之间的随机数来选择您的行动。