Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm AI:如何在这个游戏中找到一个求值函数(极小极大算法)?_Algorithm_Artificial Intelligence_Minimax - Fatal编程技术网

Algorithm AI:如何在这个游戏中找到一个求值函数(极小极大算法)?

Algorithm AI:如何在这个游戏中找到一个求值函数(极小极大算法)?,algorithm,artificial-intelligence,minimax,Algorithm,Artificial Intelligence,Minimax,我正在考虑一个我可以实现的游戏AI。我的问题是如何为这个游戏找到一个评估函数,以便应用带有alpha/beta切割的minimax算法。 让我先描述一下这个游戏,解释一下我计划用我的AI实现什么,然后解决这个问题 游戏: A 2-player turn-by-turn game. Goal is to kill opponent or have more life points at the end. In comparison with Magic: The Gathering, you bo

我正在考虑一个我可以实现的游戏AI。我的问题是如何为这个游戏找到一个评估函数,以便应用带有alpha/beta切割的minimax算法。 让我先描述一下这个游戏,解释一下我计划用我的AI实现什么,然后解决这个问题

游戏:

A 2-player turn-by-turn game.
Goal is to kill opponent or have more life points at the end.
In comparison with Magic: The Gathering, you both have monsters to attack the opponent. The number is fixed, let’s say 5 each.
A monster has a fight ability (let's say between 1 and 10), and a damage ability (let's say between 1 and 5).

Each turn:
- Active player declares to his opponent which monster (he owns) engages the current fight.
- He secretly sets multipliers face down (let’s see that in next paragraph).
- Opponent declares which monster (he owns) fights against the first one, while setting multipliers the same way.
- Fight: fight ability * multipliers = final attack. Biggest attack wins and inflicts damage ability to opponent.
- Next turn, active player switch

About multipliers: you have 4 cards in hand that can double your attack (and many empty cards, so that you put 4 cards each turn on the table, and the opponent does not know if you multiplied by 1, 2, 4, 8 or 16).
Just in case: let's say we have a rule for draws to be solved.
我对人工智能的期望是: 能够说出一个完美的球员是否应该在给定的位置上获胜。这意味着,对于一个可赢的位置,AI应该告诉你有一种通向胜利的方法,并给出步骤(见下面的示例)。对于一个对手可以赢的位置,我还没有决定,也没有决定在所有情况下不会导致同一个胜利者的位置(它们存在;D)

**例如:**

2 rounds left to go. I have
- Monster A: fight: 5, damage: 2
- Monster B: fight: 3, damage: 4
- life: 5, 1 multiplier left, my turn to begin
My opponent has
- Monster C: fight: 2, damage: 6
- Monster D: fight: 8, damage: 1
-life: 5, 1 multiplier left

In that case, if you think about it, you win if you play well.
Solution:
You can see that if monster C wins, he inflicts 6 and I lost.
But if he loses, one my monsters will inflict at least 2, and even if monster D wins (before or after),
I won't die and I will have more life that my opponent. Victory.
That's an example of what I want the AI to find.
当然,我简化了这个例子。也许会更棘手。这就是我的问题所在

我们可以在心理上看到,当我们还剩两轮时,计算所有可能的决斗是很简单的(最后一轮不需要计算:如果双方都使用最后一个乘数,这是确定的)。 正如我们所说,我们还有5轮。但我的观点是,我们可能有20个,计算每一个都变得非常漫长(就像在第一轮中试图找到最好的移动)。 事实上,我们不会试图去计算。例如,在国际象棋中,太多的位置导致不可能计算所有的可能性

但是,如果你听我说,国际象棋中有一个解决方案——我们可以实现一个评估函数。我们怎么知道,10步走在前面,这一步会导致一个更好的位置?因为我们评估这个职位。我们声称,如果将死,或者你有更多的棋子,或者如果你控制中心等等,位置会更好

那么,我的问题是:

如何评估我介绍的游戏中的位置?

我的意思是,第一轮,如果我能计算出接下来两轮中可能的移动,我会得到第三轮或第四轮中所有可能的位置。但在我看来,这似乎没有什么帮助。你可以有更好的生命点数,更好的牌,更多的左乘数,这一切都取决于下一步会发生什么。我看不到在一般情况下符合要求的优势。你呢

注意:1我希望这是清楚的,我简化了游戏规则,当然我们可以添加规则(如果连续赢了两轮,则连击,适用于伤害能力的乘数…)

N.B.2我想到了一个神经网络,但这个问题对我来说仍然很有趣。而且神经网络似乎很难解决,因为有多轮(我的知识比知道神经网络中任何具有追溯作用的模型都要有限)

N.B.3我认为如果我仍然进行完整的计算分析,minimax和alpha/beta切割将有所帮助,但我担心的是计算时间,这就是为什么我在这里问这个问题。我可以从最后两轮位置的完整计算开始,是的


谢谢你的阅读,我希望你能像我一样发现这个问题

在任何游戏中评估位置的一种方法是尝试了解被认为是游戏专家的玩家的思维过程。所以你可以在这个游戏中找到专家,询问他们在游戏中决定他们决定的因素。或者你也可以通过学习游戏并经常玩游戏,自己成为专家。仅仅通过观察游戏规则就很难得出一个好的评价函数

我还没有玩过这个游戏,但也许从一些简单的启发式开始是有意义的,它是决定游戏状态的变量的线性组合(你的主要角色的生命值、你拥有的倍增数、你所有怪物的总战斗/伤害能力、你所有怪物的最大战斗/伤害能力、左转次数等)。考虑到你对手的相应值,你将得到如下评估函数:
a1*(my_hp-opp_hp)+a2*(我的怪物总数战斗-我的怪物总数战斗)+a3*(我的怪物总数伤害-我的怪物总数伤害)+a4*(我的乘数的数目-乘数的数目)+……
,其中系数
a1、a2、…
可以是正的或负的,这取决于相应变量的影响(例如,
hp
变量
a1
的系数为正等)


现在,这个函数可能有效,也可能无效,但至少它会为您提供一个起点,您可以从中尝试改进它,或者在失败得很惨的情况下完全放弃它。您可以尝试通过调整系数、添加一些非线性项来改进此求值函数,从而在变量之间产生更复杂的关系(乘法、幂、日志等)并查看其对性能的影响。您还可以尝试使用优化技术(如遗传算法和差分进化)自动化调整过程。一般来说,提出一个好的启发式方法与其说是一门科学,不如说是一门艺术(毕竟,它被称为启发式是有原因的).从尝试和错误开始,看看它是如何进行的。

你的目标更多的是解决游戏,而不是令人信服地玩游戏?事实上是的,因为我以前玩过类似的游戏。假设没有负面的怪物值,你基本上只有4*4*yourhealth*对手10种可能的游戏状态。听起来这是一个非常适合你的问题r动态规划。对于给定的一轮,还包括剩余的乘数和额外的规则(如果我添加它们的话)。但谢谢,我会研究这是一个非常有趣的问题,但我担心对于这个特定的网站来说,它可能太宽或离题。是否可能有不同的SE,它可能吸引更多有知识的用户nswers?我在想datascience.SE或scicomp.SE或stats.SE…谢谢。所以我看到的是,你设置问题的方式可以将其放入神经网络中。很有趣。所以我需要