哪个游戏盒子里有JAVA_关于点和盒子游戏的Java minimax

哪个游戏盒子里有JAVA_关于点和盒子游戏的Java minimax我想建议您完全重新考虑代码.查看代码的问题(以及为什么这里没有很多响应)是很难遵循并且很难调试.例如,什么是gs.getRemainingLines,它究竟做了什么?(为什么剩下的线而不是所有合法的线?)但是,通过一些简化,可以更容易地弄清楚发生了什么并修复它.在抽象层面,minimax只是这个过程:floatminimax_max(GameStateg){if(gisterminal…

大家好,又见面了,我是你们的朋友全栈君。

我想建议您完全重新考虑代码.查看代码的问题(以及为什么这里没有很多响应)是很难遵循并且很难调试.例如,什么是gs.getRemainingLines,它究竟做了什么? (为什么剩下的线而不是所有合法的线?)

但是,通过一些简化,可以更容易地弄清楚发生了什么并修复它.

在抽象层面,minimax只是这个过程:

float minimax_max(GameState g)

{

if (g is terminal or max depth reached)

return eval(g);

float bestVal = -inf;

bestMove = null;

moves = g->getLegalMoves();

for (m : moves)

{

ApplyMove(m);

if (g->nextPlayer == maxPlayer)

nextVal = minimax_max(g);

else

nextVal = minimax_min(g);

if (nextVal > bestVal)

{

bestVal = nextVal;

bestMove = m;

}

UndoMove(m);

}

return bestVal;

}

我没有详细说明如何在最后获得/使用最后一步,但并不是那么难.您还需要minimax_min的另一个过程,或者您可以在代码中放入if语句.

如果你看一下你的代码,你已经把它写得很接近了,但你在代码中留下了很多游戏特定的细节.但是,您不必考虑那些让minimax正常工作的事情.

特别是,如果为GetMoves(),ApplyMove(),UndoMove()和eval()提供函数来评估状态,大多数游戏都可以抽象地进行推理. (进一步的搜索增强功能需要更多功能,但这会让你有很长的路要走.)

您可能希望以这种方式重新考虑因素的一些原因:

>您现在可以单独测试minimax和其他代码.

>您可以通过验证所有合法移动是否已生成来测试您的点和框代码,并且在应用移动后您将拥有合法状态,并且接下来会移动正确的玩家. (您可以播放和撤消长时间的随机移动序列,以帮助验证您之后总是回到开始状态.)

>您可以在各个州轻松测试评估功能,以确保其正常工作. (实际上,你通常不能搜索游戏结束来确定获胜者.)

>您可以使用简单的评估函数测试minimax并测试以查看是否进行了正确的移动. (例如,如果您喜欢在边缘上移动,则单层搜索应返回边缘上的移动)

>其他人可以更轻松地阅读您的代码.我们可以查看每段代码并查看它是否正确,而不必将特定于游戏的实现细节混合到minimax特定的细节中.

>如果您可以正确应用和撤消移动,则无需复制游戏状态.这将使代码更有效.

虽然您可以尝试修复代码而不进行重构(例如,只需找到它返回null的第一个位置,并指出错误的位置),但从长远来看,如果没有这些更改,您的代码将难以调试和改进.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156385.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Apache中 RewriteCond 规则参数介绍[通俗易懂]

    Apache中 RewriteCond 规则参数介绍[通俗易懂]Apache中RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结果,这次我终于算大概知道它的意思了。RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。RewriteEngineonRewriteCond%{HTTP_USER_AGENT}^Mozilla\/5\.0.*Rew…

    2022年6月10日
    27
  • ROS机器人里程计模型

    ROS机器人里程计模型3.5移动机器人系统模型相信大家的机器人平台STM32端底层控制和机器人urdf建模都已经顺利完成了,在正式开始ros端编写机器人启动功能包之前,我们还不得不学习一些必要的理论知识。别担心数学不好,这里基本都是高中数学。下面我们开始,Areyouready?没准备好也开始了。3.5.1常用坐标系系统模型在移动机器人技术研究中,最为常用的坐标系统是笛卡尔坐标系统。而在SLAM算法研究中,有如下几个比较常见的笛卡尔坐标系统,它们分别为机器人坐标系XRYROR、传感器坐标系XSYSOS

    2022年6月30日
    23
  • poj 1028 Web Navigation(模拟)「建议收藏」

    poj 1028 Web Navigation(模拟)

    2022年2月5日
    34
  • Error:Execution failed for task ‘:app:preDebugAndroidTestBuild’.

    Error:Execution failed for task ‘:app:preDebugAndroidTestBuild’.

    2021年3月12日
    165
  • 《数据库实验》实验一:建立数据库和基本表结构[通俗易懂]

    《数据库实验》实验一:建立数据库和基本表结构[通俗易懂]数据库实验1教程

    2022年9月24日
    0
  • wing是什么_可分开四叶草项链

    wing是什么_可分开四叶草项链在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链,在项链上有 N 颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是 Mars 人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为 m,尾标记为 r,后一颗能量珠的头标记为 r,尾标记为 n,则聚合后释放的能量为 m×r×n(Mars 单位),新产

    2022年8月9日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号