哪个游戏盒子里有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的第一个位置,并指出错误的位置),但从长远来看,如果没有这些更改,您的代码将难以调试和改进.

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • bitcomet官方_Bitcomet

    bitcomet官方_Bitcometudp://mgtracker.org:2710/announcehttp://share.camoe.cn:8080/announceudp://11.rarbg.me:80/announcehttp://tracker.tfile.me/announcehttp://open.acgtracker.com:1096/announcehttp…

  • 一个非常好而且免费的CSS开发库Pure

    一个非常好而且免费的CSS开发库Pure

  • 调用第三方接口获取数据写入数据库

    调用第三方接口获取数据写入数据库系统框架:springboot(和框架没有什么太大关系,仅记录一下)调用路径:controller→service第三方接口:http://xx.xxx.com:9905/api/list?transtime=20181017105600&token=abcdefghijklmn请求参数:{“data”:”{\”xxx\”:\”\”,\”xx\”:\”\”,\”xxxx\”:\…

  • 递归迭代动态规划「建议收藏」

    递归迭代动态规划「建议收藏」一、定义递归:程序调用自身,从顶部将问题分解,其问题与其子问题是同一概念。通过解决掉所有分解出来的小问题,来解决整个问题。迭代:利用变量的原值推算出变量的下一个值。递归中一定有迭代,但是迭代中不一定有递归。动态规划:通常与递归相反,其从底部开始解决问题。将所有小问题解决掉,进而解决的整个问题。为了节约重复求相同子问题的时间,引入一个数组,把所有子问题的解存于该数组中,动态规划算法是空间换时间的算法。动态规划可以递归地实现,也可以非递归(循环的方法)地实现。运行速度:动态规划>迭代&gt

    2022年10月29日
  • dede中弹出框函数function ShowMsg

    dede中弹出框函数function ShowMsg

  • 激光测距芯片VL53L0X的使用与代码

    激光测距芯片VL53L0X的使用与代码一、介绍1、原理采用940nm垂直腔面发射激光器(Vertical-CavitySurface-EmittingLaser,简称VCSEL)发射出激光,激光碰到障碍物后反射回来被VL53L0X接收到,测量激光在空气中的传播时间,进而得到距离。VCSEL相关知识2、参数超小体积:4.4×2.4×1.0mm最大测距:2m发射的激光对眼镜安全,且完全不可见。工作电压:2.6to3.5V通信方式:IIC,400KHz,设备地址0x52,最低位是读…

发表回复

您的电子邮箱地址不会被公开。

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