您好 我很困惑如何使用minimax搜索确定实用程序功能 用任何可以使用minimax搜索的游戏来解释它 基本上我问你如何确定效用函数 干杯
答案 0 :(得分:2)
效用值只是玩家在到达游戏中的某个状态时所获得的任意值。例如,在Tic-tac-toe中,您的效用函数可能只是1表示获胜,0表示平局,或-1表示亏损。 在此上运行minmax最多可以找到一组导致1(胜利)的动作。
另一个例子是国际象棋(不是说你可以在国际象棋游戏中运行极小极大)。假设您的效用函数来自某个数字,该数字基于您捕获或丢失的部分的值
答案 1 :(得分:0)
确定某个状态下的举动的实用价值与程序员的经验以及他/她对游戏的了解有关。
终端状态下的效用值很容易确定。例如,在井字游戏中,玩家X的终端状态是X沿对角线,垂直或水平对齐时。创建这种状态的任何动作都是终端状态,您可以创建一个检查状态的函数。如果是终端状态,则该函数返回1或-1。
如果您的玩家代理是玩家X,并且在玩家X移动后确定玩家O将获胜,则该函数将返回-1。如果函数确定其是自己的获胜举动,则该函数返回1。
如果所有单元格都被最后一个可能的移动所占据,而没有人获胜,则该函数将返回零。
这仅在终端状态。评估中间状态至关重要,因为即使在3x3游戏中,也要考虑很多组合。如果包括对称移动,则有9个!井字游戏中的可能状态。对于那些中级情况,您需要提供一个评估函数,该函数返回每个州与其他州相关的得分。
假设我分配了810、0和-810的终端状态值。对于每一步,得分将是810 /(步数)。因此,如果我在6个动作中达到终点,则得分将为810/6 =135。在9个动作中,得分将为90。以这种方式设计的评估功能将有利于更快地达到终点状态的动作。但是,它仍然评估为叶节点。但是,我们需要在到达叶节点之前进行评估,但这也可能是评估功能的一部分。 假设在下面的游戏中,玩家1是X。因此X接下来移动。以下是X的合法移动(行,列): (1)0,0 (2)0,2 (3)2,0 (4)2,1 (5)2,2
| | O | | | O | X | X | | | | |
每一步的效用值应该偏向最佳步伐。
在这种情况下,最佳移动是(2)或(5)。因此,评估函数将为每个函数分配效用值81。移动(4)是X播放器可能发生的最坏的移动(并且还可以保证您会输给智能播放器,因此该函数将为该移动赋予-9值)。动作(1)和(3)虽然不理想,但不会让您输球,因此我们可以指定1。
因此,当minimax评估这5步动作时,由于您的玩家X为max,因此选择为(2)或(5)。
如果我们专注于选项(2)或(5),则游戏将处于终止状态,然后再移动两步。因此,实际上,评估函数应该比当前合法动作提前2个动作以返回效用值。 (此策略遵循深度限制搜索的原则,在这种情况下,您的函数将在一定深度处求值并产生效用值,而不会达到叶节点或终端状态)
现在,我将回到第一句话。实用价值将由根据程序员对游戏的了解编码的评估函数确定。
希望我不会让您感到困惑...