首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何管理基于百分比的AI操作

如何管理基于百分比的AI操作
EN

Stack Overflow用户
提问于 2009-03-23 14:22:10
回答 3查看 302关注 0票数 4

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

例如,假设AI角色具有以下操作:

攻击1: 10%

攻击2: 9%

魔力: 4%

移动: 1%

所有这些都远远不等于100%。

一开始,我认为有一个有100个空插槽的阵列,攻击会有10个插槽,攻击阵列上有29个插槽。结合随机数,我就可以得到要做的动作。我这里的问题是它并不是真的有效,或者似乎不是。同样重要的是,如果我在一个空的插槽上,我该怎么办。我是不是必须为每个角色计算100%的所有动作,或者为每个人定义一个“默认”动作?

或者也许有一种更有效的方式来查看所有这些?我认为百分比是实现AI的最简单方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-23 14:24:26

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

编辑:

例如,以下是我的三个动作。我希望攻击和魔法的可能性相等,而逃离的可能性是攻击或使用魔法的一半:

  • attack = 20
  • magic = 20
  • flee = 10

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

  • 攻击= 0.4
  • magic = 0.4
  • flee = 0.2

然后,我将由此生成一个累积值列表(即每个条目都是该条目及其之前的所有条目的总和):

  • 攻击=0.4
  • 魔术= 0.8
  • flee = 1

现在,生成一个介于0和1之间的随机数,并查找列表中大于或等于该数字的第一个条目。这就是你要做的事情。

票数 4
EN

Stack Overflow用户

发布于 2009-03-23 14:31:06

不,您只需创建阈值。一种简单的方法是:

0-9 -> Attack1

10 - 18 ->攻击2

19 - 22 ->魔术

23 ->移动

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

现在创建一个随机数并将其修改为100 (因此num = randomNumber % 100)来定义您的操作。随机数越接近一个合适的分布,你就会得到越好的结果。所以你拿着结果,看看它属于哪一类。你可以让它变得更有效率,但这是一个很好的开始。

票数 2
EN

Stack Overflow用户

发布于 2009-03-23 14:32:04

如果它们加起来都不是100,那就不是百分比了。不过,这并不重要。您只需要计算出每个操作的相对概率。为此,请使用以下公式...

代码语言:javascript
运行
复制
prob = value_of_action / total_value_of_all_actions

这给了你一个介于0和1之间的数字。如果你真的想要百分比而不是分数,把它乘以100。

下面是一个示例:

代码语言:javascript
运行
复制
prob_attack = 10 / (10 + 9 + 4 + 1)
            = 10 / 24
            = 0.4167

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

然后,您可以生成其他答案中提到的阈值。并使用0到1之间的随机数来选择您的操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/673557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档