首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AI:如何在这个游戏中找到一个评估函数(极小值)?

AI:如何在这个游戏中找到一个评估函数(极小值)?
EN

Stack Overflow用户
提问于 2018-07-05 19:47:19
回答 1查看 856关注 0票数 1

我正在考虑一个AI的游戏,我可以实现。我的问题是为这个游戏寻找一个评估函数,以便应用带有alpha/beta削减的极小极大算法。https://en.wikipedia.org/wiki/Minimax pruning让我先描述一下这个游戏,解释一下我计划用人工智能实现什么,然后讨论这个问题。

游戏:

代码语言:javascript
复制
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的期望是:能够说出一个完美的球员是否应该在给定的位置上获胜。这意味着,对于一个可获胜的位置,AI应该告诉我们有一条通往胜利的道路,并给出步骤(见下面的例子)。对于一个可以被对手赢的位置,我还没有决定,对于那些在所有情况下都不会导致相同胜利者的位置(它们是存在的;D的)。

**一个例子:**

代码语言:javascript
复制
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步,这样就能得到更好的位置?因为我们评估这个职位。显然,如果你有更多的棋子,或者如果你控制中心等等,那么这个位置会更好。

那么,我的问题是:

如何在我展示的游戏中评估一个位置?

我的意思是,第一轮,如果我能在下一轮中计算出可能的移动,我就能在第3轮或第4轮找到所有可能的位置,但在我看来,这似乎没有帮助。你可以拥有更好的生命点,更好的卡片,更多的左乘数,这都取决于接下来会到达什么。我看不出在一般情况下符合的优点。那你呢?

注1我希望这是明确的,我简化了游戏规则,当然我们可以添加规则(如果连续两轮获胜,则组合,适用于伤害能力的乘数.)

注:我想到了一个神经网络,但这个问题对我来说还是很有趣的。而且神经网络似乎很难解决,因为多轮(我的知识远比知道在神经网络中有追溯作用的任何模型更受限制)。

注:我认为,如果我仍然进行完整的计算分析,极小值和alpha/beta值的削减会有所帮助,但我害怕的是计算时间,这就是我在这里问这个问题的原因。我也许可以先计算最后2轮的位置,是的。

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

EN

回答 1

Stack Overflow用户

发布于 2018-07-12 23:20:40

评估在任何游戏中的位置的一种方法是尝试理解那些被认为是游戏专家的玩家的思维过程。所以你可以在这个游戏中找到专家,并询问他们在游戏中决定他们决定的因素。或者,你也可以通过学习和经常玩来成为一名专家。只要看一看游戏规则,就很难得到一个很好的评价功能。

我还没有玩过这个游戏,但从一些简单的启发式开始也许是有意义的,它是决定游戏状态的变量的线性组合(你的主要角色的生命点、你拥有的乘数、所有怪物的总战斗/伤害能力、任何怪物的最大战斗/伤害能力、左转数等等)。考虑到对手的对应值,你会得到这样的a1*(my_hp - opp_hp) + a2*(my_monsters_total_fight - opp_monsters_total_fight) + a3*(my_monsters_total_damage - opp_monsters_total_damage) + a4*(my_number_of_multipliers - opp_number_of_multipliers) + ...函数,其中系数a1,a2,..可以是正的,也可以是负的,这取决于相应变量的效果(例如,hp变量的系数a1是正的,等等)。

现在,这个函数可能起作用,也可能不起作用,但至少它会给你一个起点,从这里你可以尝试改进它,或者如果它不幸地失败了,就完全抛弃它。您可以尝试通过调整系数来改进这个评估函数,添加一些非线性项来在变量(乘法、幂、日志等)之间产生更复杂的关系。看看它是如何影响性能的。您还可以尝试使用优化技术(如遗传算法和差分进化)来自动化调优过程。一般来说,提出一个好的启发式更多的是一门艺术,而不是一门科学(毕竟,它被称为启发式是有原因的)。从尝试和错误开始,看看它是如何进行的。

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

https://stackoverflow.com/questions/51198854

复制
相关文章

相似问题

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