我正在做一个简单的 AI,并且是这个领域的新手。我需要一个算法,可以基于一些参数做出某种决策;但需要带有一点随机性。到目前为止,我一直在做的是生成一个随机数,并根据我得到的不同值,采取不同的执行路径。我总觉得有一种更好的方法来做这件事。你能给我一些提示吗?
回答:
我不认为存在比你正在做的“更好”的方法,因为问题描述相当模糊,并且不清楚这实际上是一个人工智能问题还是一个模拟问题。
对于决策部分,通常使用一个简单的启发式系统(基于你对被建模行为的直观理解)就足够了,该系统是一系列条件语句,可能带有一些随机因素来使其多样化。你可以使用加权平均系统,该系统选择几个选项,根据感知的质量对它们进行排序,然后随机选择一个选项,同时偏向于更好的值。(这被称为轮盘赌选择或适应度比例选择,在遗传算法领域很常见,但在遗传算法之外也非常有用。)
对于模拟部分,你通常希望对过程进行建模,然后引入随机性来模拟过程中更微妙的部分。这意味着清楚地定义你的输入(反手力量,球的方向,…)和你的输出(球的运动向量?),并考虑它们如何相互关联。这意味着你得到一些已知值的输出,然后你可以使用你的随机数生成器来修改它们。如果你试图模拟的是人类的选择,而不仅仅是物理模拟,事情会变得更加复杂,因为人类的选择通常优先于所有其他输入。
一个我可以开始的简化示例是,玩家 AI 选择他们想将球击打到哪里。我将球的预期方向计算为一个向量,该向量会将球精确地发送到计划的位置。然后,系统会根据球的方向,速度,玩家的能力等计算一个从 0%到 100%的难度分数。我生成一个“不准确性”修改器,该修改器是一个介于 0%和难度%之间的随机数,这意味着一个非常容易的击球将是完全准确的,而一个半难的击球将在 0%到 50%之间变化。然后,我计算一个随机的归一化单位长度3D向量,将其缩放为不准确性值,然后将其添加到预期方向。这意味着更困难的击球往往会偏离目标更远。