我现在正在寻找程序员如何根据最终幻想策略类游戏(策略游戏)的动作百分比来模拟AI决策。
例如,假设AI角色有以下行为:
攻击1:10%
攻击2:9%
魔术:4%
移动:1%
所有这一切远不等于100%
现在起初我虽然有一个包含100个空插槽的阵列,但攻击将有10个插槽,攻击阵列上的2 9个插槽。随机组合我可以采取行动。我的问题是它不是真的有效,或者似乎不是。同样重要的是,如果我上一个空位,我该怎么办。我是否必须根据100%计算每个角色的所有动作,或者为每个人定义可能的“默认”动作?
或许有更有效的方式来看到这一切?我认为百分比是实现AI的最简单方法。
答案 0 :(得分:4)
我能想出的最佳答案是列出你希望角色拥有的所有可能的动作,给每个动作一个相对值,然后将它们全部缩放到100%。
编辑:
例如,这里有三个动作。我希望攻击和魔法同样可能,并且逃跑的可能性是攻击或使用魔法的一半:
这加起来就是50,所以将每个除以这个总和得到一个小数值(百分比乘以100):
然后,我将从中得出一个累积值列表(即每个条目是该条目的总和以及它之前的所有条目):
现在,生成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之间的随机数来选择您的行动。