Articles of ai

在封闭path上定位点,以最大化加权点样本的距离总和

我正在做一个简单的困惑游戏的人工智能,需要有效地解决以下问题(小于1秒的范围指定,因为我需要在游戏中做很多迭代)。 从左上角开始以1个单位间隔在正方形(0至200,000,000)的边上分布N(1至100,000)个强度为1至10,000的怪物的样本。 将英雄移动到正方形上的一个点X上,以最大化加到怪物上的距离的总和。 每个怪物的加权距离由MonsterStrength * ShortestDistanceToX(顺时针或逆时针)计算。 X也必须在1单位间隔标记上,怪物和英雄只在广场的两侧移动 我已经尝试了几种方法,但都不够快或不够准确。 这个问题的可能的补充(最小化到距离原始集合中每个对应怪物最远距离处的距离总和)似乎与寻找几何中值,设施位置问题,Weber问题等有关。 线性编程也是可能的,但可能太慢而且过度。 有没有人有一个好方法的想法? 这里是长度为3的两边正方形的插图: 1 ——- 2(M / 3)——- 3 —— 4(M / 1) | | 12(M / 2)5 | | 11(M / 1)6 | | 10 ——– ——— 9 8(X)——- 7 如果你把一个3的强度为2的怪物,一个在4的强度1,一个在12的强度2,一个在11的强度为1,英雄(X)在8,加权distne的总和是:3 * 6 + 1 * 4 + 1 * 3 + 2 * 4 […]

防止重叠游戏工作室的实例

我有一个游戏,其中一个敌人的多个实例在步骤过程中向玩家移动。 屏幕上最多可以显示50个实例。 问题在于,这些实例在跟随玩家的时候最终都在一个大团队中。 我想阻止他们获得超过2个像素的对方。 代码如下: if distance_to_object(player) < 160 { direction = ppoint_direction(x,y, player.x, player.x, player.y) p_potential_step(x,y, player.x, true); } 如果我在这个代码中进行了2px的距离检查,那么这个实例就开始做出生涩的旋转和旋转。 我希望实例继续跟随玩家,但不要让自己重叠。

用于航向修正的PID控制器误差值

我在我的AI中使用一个PID控制器来引导我的NPC到一个所需的方向(通过增加扭矩)。 我已经调整了这里的代码: http : //answers.unity3d.com/questions/199055/addtorque-to-rotate-rigidbody-to-look-at-a-point.html 上面的例子使用两个标题的叉积作为PID控制器的误差值。 如果希望的和当前的方向之间的角度小于90度,但是如果角度大于这个角度,则PID控制器纠正到与我想要的相反的方向(因为它试图纠正为零)。 两个vector之间的良好误差值传递到一个PID控制器中,无论希望的和当前的方向之间的角度如何,都能正常工作? 注意:因为PID控制器将校正作为vec3返回,所以错误值也必须是vec3

什么样的AI适用于这种复杂的棋盘游戏?

我正在考虑为卡/棋类游戏Summoner Wars(通过PlaidHat Games)创建一个AI。 对于两名球员来说,这是一个非常好的战术游戏,规则简单但相当深刻。 我已经考虑了最小最大树,蒙特卡洛树search(UCT),专家系统(即一组编码的规则/行为),但我不认为会有一个好的结果。 以下是造成人工智能困难的事实: 1.基本规则很简单,但每张牌都有自己的规则。 游戏是可扩展的纸牌游戏types。 这使得很难使用专家系统。 由于他们牌的特殊规则,一些派系的玩法也各不相同。 编制每个派别的策略并不是随着派系数量的增加而扩大,而是根本无法与定制的套牌一起工作。 因此,在不模拟对手能做什么的情况下评估董事会的位置也是非常困难的。 2.可能的行动数量太大。 这些牌是在8×6网格战场上玩的。 在你的回合中,你可以召唤新单位,玩事件(有时候可以select一个目标),最多移动3个单位,最多攻击3个单位并丢弃你的牌。 探索所有可能的方法,你可以做这个东西太昂贵了。 你必须修剪你的search树(对于最小最大AI)。 没有考虑未来就很难评估行动。 因为取决于你的牌(和你的对手),一些看起来愚蠢或无用的动作可能是胜利的关键。 例如,一些人类玩家杀死自己的单位(短期内是一个不好的举动)。 其他的例子:游戏的最后一个阶段可以让你放弃手中的一些牌来建造更多的魔法。 这是一个好球员的关键,但很难决定。 我需要更多的魔法? 多less? 丢弃更多的牌会使我的牌更快(这是不好的)。 如果是,哪些? (知道我不能玩)。当然,这也是因为一些派系喜欢因为某些特殊效果而丢弃更多的牌而扭曲的。 另外,因为规则实际上取决于正在玩的牌,所以在回合结束时,你不能轻易评估自己的位置。 你还需要模拟你的对手轮stream看看是否有一些特殊的能力可能会毁了你的位置。 在我看来,2.和3.使最小最大树search不适合。 4.这是一个隐藏状态的游戏。 有洗牌堆,你的对手……我不介意AI是否“欺骗”并看着他们,但是玩家一定不会明白! 举例来说,如果你的对手在战场上拥有较less的单位,你只能玩一些事件。 如果AI一直在积极地进行比赛,并且在我抽签一个这样的事件之前杀死自己的队伍以减less总人数,这将是非常烦人的! 5.这是一个随机的游戏。 当然,绘制卡片,但我不认为这是战略的关键因素。 尤其是因为大多数牌中的牌都是一样的。 另一方面,战斗是用骰子来完成的。 所以如果AI决定攻击一个单位,很难说结果会是什么(以什么概率出现)。 特别是因为许多牌正在改变关于这个的实际规则(比如:掷出的骰子的数量,改变某个骰子上的值,移除一个掷骰子,允许重掷,改变击中的阈值,等等…) MCTS是有希望的,但我有两个问题。 首先如何处理随机方面(骰子卷)。 其次,没有MCTS上的文章指出,但我认为这只适用于一举一动的游戏,让你更接近游戏的尽头。 随机召唤召唤者战争很容易导致无休止的游戏(在棋盘上移动单位)! 我知道这是一个很长的问题,但是有没有人知道如何为这样的游戏写AI? 我们的目标不是成为一名完美的球员,而是为了给人类提供挑战……而且这个游戏非常微妙,战术性和精确性(至less对于一名玩家来说)。

增加到达转向行为的重力

我试图为经典的月球着陆器或其克隆书写自动驾驶仪。 根据这篇文章 ,到达行为正是我所需要的软着陆。 在这个例子中,它在max_speed加速,直到它接近目标,并在目标附近减less到零。 加重力和引擎减速使得这个问题变得更为复杂,至less对我来说,因为在过去的几个小时里,我无法将自己的想法笼罩在这个概念之上。 目前,我的太空船朝着正确的方向前进,但是并不能抵抗重力,只能扼住引擎,撞向目标。 我知道我现在的位置,速度和重力是不变的。 我需要输出一个-90°到90°的推力水平(0-4)。 你能给我一些关于如何将重力融合到这个转向行为的指导吗?

我如何确保我的tic-tac-toe AI总是玩到平局?

我正在做一个小项目。 目标是针对人工智能玩井字游戏,但是我要求游戏始终会对AI对手进行抽签。 我如何执行AI来确保?

在基于单位的游戏中实现蒙特卡洛树search

我有这个简单的冒险游戏,我想开发一个AI。 Players在地图上移动他们的Units ,并完成一个简单的战斗决议。 每轮有100ms的时间限制,AI有完整的信息,对抗分辨率是确定性的,但是单位每轮同时移动。 就我所了解的蒙特卡洛方法而言,我需要复制当前一轮的状态,生成一个新的游戏状态树,随机播放或者进行评估。 目前我的zones保持每个unit的列表,他们通过存储orders四处移动。 他们被保存在每个回合的字典中,并在回合结束时被应用。 深度复制大约需要3ms,而且考虑到时间限制,我认为太慢而不能有效使用。 我想知道是否可以使用这个订单系统通过应用和撤消它们来更快地生成树,但是我还不能把自己的想法包括在内。 这是我目前的课程devise: 我怎样才能有效地为这种游戏添加MCTS?

AI通过建议升级来帮助玩家

假设我正在创建一个赛车游戏..我想要实现一个意识系统AI,这将建议玩家,他可以买这个助推器或其他一些升级..等等。我应该如何开始实施呢? FSM? 决策树? 假设我有variables,有多less崩溃,损害多less,我通过了多less个门,等等。我将如何使用这些variables,然后说例如你需要购买那些东西?

游戏背景氛围的algorithm建议 – 生活在森林里的动物

在游戏中,有一个森林和动物居住在其中。 动物的相互作用只是背景氛围。 当谷歌search时,我发现了面向目标的行动计划模式。 而这种模式似乎解决了这个问题。 如果我们在实现目标的同时给予动物目标,那么他们可以为环境做出真实的performance。 经过更多的研究,我find了一篇文章,建议将GOAP与智能氛围对象进行扩展,以使智能体具有情境感知能力。 “ 感受氛围:利用巧妙的氛围增加游戏代理商的情境意识 ” 例如,想一个冒险游戏,玩家正在森林中寻找线索/物品。 同时,一只鸟(非玩家角色)正在树上寻找一种水果来吃东西。 鸟在树上看到一个水果,但看到接近水果的蛇危险。 所以,小鸟害怕,不决定吃那个水果… 有没有其他的algorithm/模式可以提醒你解决这个需求?

可见性多边形为FPS AI战术移动

有谁知道如何在Unity的AI系统中实现可见性多边形? 我想写FPS AI来清除一个区域,方法是检查所有不可立即显示的地方,并在整个时间内切割这个饼图(角落时瞄准角的军事术语)。 我知道你可以通过使用NavMesh.CalculateTriangulation来获取NavMesh数据,我知道你可以使用它来访问navmesh顶点,从那里你可以通过所有顶点进行光线投射来获得可见性多边形。 这就是我所说的: https://en.wikipedia.org/wiki/Visibility_polygon 但是,我不知道如何编写AI来dynamic检查看不见的区域。 谁能帮忙? 我画了一个我想在这个figma中模拟的行为的一步一步的图! https://www.figma.com/file/ekWZTrsn5uhAqV3iL7Q9WalZ/FPS-AI 底部附近的框架代表了我必须解决这个问题的一些想法。