井字游戏的遗传算法

2024-01-07

因此,我被分配的问题是使用遗传算法编写 5x5x5 井字棋玩家。我的方法是从 3x3 开始,让它发挥作用,然后扩展到 5x5,然后扩展到 5x5x5。

它的工作方式是这样的:

  • 模拟一大堆游戏,并在每个游戏的每个回合中,在相应的表(作为 C++ stdlib 映射实现的 X 表或 O 表)中查找响应。如果板不存在,请将板添加到表中。否则,做出随机响应。

  • 当我拥有完整的桌子后,我初始化了一群玩家(每个玩家都有一份棋盘表的副本,并使用随机响应进行初始化),并让他们互相对战。

  • 使用他们的胜利/失败来评估健康状况,我保留一定比例的最佳球员,然后他们继续前进。冲洗并重复 X 代,最佳玩家就会出现。

对于 3x3,扣除其他棋盘的反射/旋转的棋盘,以及移动为“取胜”或“阻止获胜”的棋盘,我将遇到的棋盘总数为 53 或 38,具体取决于是否你先走还是后走。极好的!不到一个小时就产生了一名最佳球员。很酷!

对 5x5 使用相同的策略,我知道桌子的大小会增加,但没有意识到它会增加如此之大。即使扣除旋转/反射和强制移动,我的表格也有大约 360 万个条目,而且看不到尽头。

好吧,这显然行不通,我需要一个新计划。如果我不枚举所有板,而只是枚举怎么办?some板。好吧,这似乎也行不通,因为如果每个玩家只有他们可能看到的一小部分可能的棋盘,那么他们将做出很多随机动作,显然会朝着最优的相反方向前进。

解决这个问题的现实方法是什么?我会被卡住使用董事会功能吗?目标是对尽可能少的游戏功能进行硬编码。

我一直在做研究,但我读到的所有内容都会导致最小/最大,而 A-B 剪枝是唯一可行的选择。我当然可以这样做,但是 GA 真的很酷,我目前的方法只是有点超出现实。

EDIT问题已经基本解决了:

使用结合了开放空间的汉明距离、可能的获胜条件和其他一些度量的相似性函数,使表格减少到非常易于管理的 2500 种可能性,这std::map处理时间不到一秒。


我对 GA 的了解非常有限,但是在建模板配置方面,您不是问错了问题吗?你的任务不是枚举所有可能的获胜配置——你要做的是找到导致获胜配置的一系列动作。也许您应该查看的群体不是一组棋盘,而是一组移动序列。

Edit:我并没有考虑从一块特定的板开始,而是从一块空板开始。很明显,在 3x3 棋盘上,从 (1,1) 开始的移动序列最适合 X。重要的不是最终棋盘中间有一个 X,而是 X 被放置在中间first。如果 X 有一个或多个最佳第一步,那么 X 是否也有一个最佳第二步、第三步或第四步?经过几轮适应度测试和重新组合后,我们会发现X的第二步动作通常是相同的,还是一小组值中的一个?那么第三个动作呢?

这不是极小极大,因为你不是根据棋盘的先前状态一次寻找最佳动作,而是同时寻找所有最佳动作,希望能够收敛到获胜策略。

我知道这并不能解决你的问题,但如果你的想法是制定一个获胜策略,那么你自然会想要查看移动顺序而不是棋盘状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

井字游戏的遗传算法 的相关文章

  • 如何用C#实现交互式决策树

    我需要允许用户通过在屏幕上显示的两个简单选项之间进行选择来选择自己的路径 以便进行下一组选择 直到他们到达其中一个结局 即应该实现这样的事情 我尝试过以下代码 但每次只评估左侧 我想知道如何才能达到如上图所示的结果 覆盖所有分支 例如 如果
  • 遗传算法/遗传编程解决方案有哪些好的例子? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 爬山算法简单例子

    我对爬山算法有点困惑 我想 运行 该算法 直到我找到该树中的第一个解决方案 a 是初始状态 h 和 k 是最终状态 并且它表示状态附近的数字是启发值 这是树 我的问题 我正在尝试在树上爬山 所以好吧 我们开始 a gt f gt g 然后完
  • Keras 代码有问题 Q-learning OpenAI 健身房 FrozenLake

    也许我的问题会显得很愚蠢 我正在研究 Q learning 算法 为了更好地理解它 我正在尝试重新制作 Tenzorflow 代码这个结冰的湖 https medium com emergent future simple reinforc
  • ReLU 没有学习处理负输入 Keras / Tensorflow

    我希望我的神经网络将负值转换为正值 理论上 这可以使用 ReLU 函数和 1 个节点来完成 该节点将输入权重学习为 1 因此负输入乘以 1 正输入 它只是继续输出 0 代码如下 我使用 1 作为输入值 看看它是否可以至少在单个输入上进行学习
  • 创建游戏插件时出现 SerpentAI 错误

    我最近安装了 SerpentAI 但在创建游戏插件时遇到了问题 运行命令时 serpent generate game 我提供以下答案 RaftWars 网页浏览器 What is the name of the game Titleize
  • ImportError:无法从“google.cloud”(未知位置)导入名称“aiplatform”

    我想知道这个错误是从哪里来的 必须另外安装该软件包google cloud 没那么简单 只需做pip install google cloud aiplatform
  • SOM(自组织映射)和 K 均值有什么区别?

    stackoverflow中只有一个与此相关的问题 更多的是关于哪个更好 我只是不太明白其中的区别 我的意思是它们都使用向量 这些向量被随机分配给集群 它们都使用不同集群的质心来确定获胜的输出节点 我的意思是 差异到底在哪里 在 K 均值中
  • 机器学习、人工智能和软计算

    这三个密切相关的领域有什么区别 是否存在一个特定的整体 它们都是其中的一部分 除了 CS 人工智能是试图在计算机中捕获人类智能的各个方面的智力项目 另一个项目也称为人工智能 旨在使用受人类启发的算法来解决传统上棘手的问题 人工智能可以说涵盖
  • 最相距的 k 个元素(聚类?)

    我有一个简单的机器学习问题 我有 n 110 个元素 以及所有成对距离的矩阵 我想选择相距最远的 10 个元素 也就是说 我想要 Maximize Choose 10 different elements Return min distan
  • matlab中的支持向量机

    您能否举一个在 matlab 中使用支持向量机 SVM 进行 4 类分类的示例 例如 atribute 1 atribute 2 atribute 3 atribute 4 class 1 2 3 4 0 1 2 3 5 0 0 2 6 4
  • 访问 ArrayList> 元素

    我有一个ArrayList of ArrayList我需要找到一种访问元素的简单方法 以便更容易理解 我已经制定了我想要实现的目标 如上图所示 主要ArrayList由组成m ArrayList 我希望通过使用 a 来获取元素get从 0
  • Apple Vision – 条形码检测不适用于不同颜色的条形码

    所以 我必须扫描不同颜色的不同条形码 例如 黑底黄色条形码或白底黄色条形码 我对传统线性和 CCD 条码扫描仪识别它们没有任何问题 我尝试过使用 Apple Vision 框架 但它对它们不起作用 它们在白色背景的黑色条形码上工作得非常好
  • 您能否提供一些与在项目中使用的人工智能相关的主题想法? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 检查一个名字是否看起来“人类”?

    我有一款在线角色扮演游戏 我正在认真对待 最近 我遇到了用户使用虚假名称 只是一堆不同字母 制作虚假字符的问题 就像 Ghytjrhfsdjfnsdms Yiiiedawdmnwe Hhhhhhhhhhejejekk 我强迫他们改名 但这已
  • GA 中的排名选择?

    我已经实施了Roulette wheel selection in GA TotalFitness sum Fitness ProbSelection zeros PopLength 1 CumProb zeros PopLength 1
  • 使用 MinMax 和 Alpha-Beta 剪枝找到最佳移动

    我正在为游戏开发 AI 我想使用MinMax算法与Alpha Beta 修剪 我对它的工作原理有一个粗略的了解 但我仍然无法从头开始编写代码 所以我花了两天的时间在网上寻找某种伪代码 我的问题是 我在网上找到的每个伪代码似乎都是基于寻找最佳
  • F# 是卡牌游戏 AI 的好语言吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 支持向量机或人工神经网络进行文本处理? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 对于某些文本处理项目 我们需要在支持向量机和快速人工神经网络之间做出选择 它包括上下文拼写纠正 然后将文本标记为某些短语及其同义词 哪种方
  • 用于神经网络模型预测的数据的缺失值

    我目前有大量数据将用于训练预测神经网络 美国主要机场的千兆字节天气数据 我几乎每天都有数据 但有些机场的数据中存在缺失值 例如 机场在 1995 年之前可能不存在 因此在此之前我没有该特定位置的数据 此外 有些还缺少整年 可能跨度为 199

随机推荐

  • 对字符串使用小于比较运算符

    我正在关注 C 教程 并查看字符串和运算符重载 例如 目前我有一个简单的 if 语句 if s1 lt s2 cout lt lt s2 lt
  • PHP - 按原样显示小浮点数

    我必须显示一个计算出的数字 有时它非常小 显示如下 1 0E 8 我怎样才能显示它 0 00000001 http php net manual en function number format php http php net manu
  • GraalVM - 在没有上下文的情况下使用多语言值

    我正在 Graal 之上编写一个应用程序 它将能够执行不同语言的小脚本 我正在尝试为一个类编写一些单元测试 我正在使用该类将 Context eval 调用 类型 Value 的结果转换 处理为 Java 对象 我从文档中知道 Value
  • 代码完成未给出建议

    假设我正在使用 requests Python 库 req requests get http google com Now after this if I type req I m supposed to get a list of al
  • 在 git 中,如何从一个分支中删除提交并将其应用到另一个分支?

    我有两个来自 master 的分支 每个分支都有不同的功能 然后我有一个将两者结合起来的综合分支 我向综合分支提交了一些内容 但现在我发现我宁愿将该更改应用到特定于该功能的分支之一 有没有办法用 git 在其他地方执行此取消应用 应用操作
  • SQL Server - 从经度和纬度到几何数据类型[重复]

    这个问题在这里已经有答案了 可能的重复 SQL Server 2008 Spatial 在多边形中找到一个点 https stackoverflow com questions 11054149 sql server 2008 spatia
  • 如何选择DDD聚合?

    In book 通过 C 示例应用领域驱动设计 in 第4章 第一个草图 在点上4 并发冲突检测很重要我不明白为什么作者选择这个聚合 客户有他自己的聚合 订单有他自己的聚合 我认为客户应该参考他的订单 订单仅与客户相关 我没有看到任何一种情
  • SQL代码:-420,SQLSTATE:22018,SQLERRMC:BIGINT

    运行 DB2 UDB 版本 9 为什么此 SQL 语句有效 SELECT CASE WHEN A DAILYDOWNLOADSIZE is null THEN 0 else bigint A DAILYDOWNLOADSIZE END DA
  • Boost 没有静态链接到 boost::python 共享对象

    我使用 boost python 为我的应用程序创建了一个包装器 到目前为止 这已经奏效了 静态库 源代码数量 gt python mapping so 通过这种方式 我的共享对象由许多静态库组成 包括 boost 本身 特别是 boost
  • java中的“表名模式不能为NULL或空”

    当我想从数据库元数据获取表时 出现此错误 Exception in thread main java sql SQLException Table name pattern can not be NULL or empty at com m
  • 我可以通过 add_action 将参数传递给我的函数吗?

    我可以做类似的事情吗 将参数传递给我的函数 我已经学过添加操作文档 http codex wordpress org Function Reference add action但不知道该怎么做 传递两个参数的确切语法是什么样的 特别是如何通
  • 一切都一样,在 C++ 中将数据输出到磁盘的最快方法是什么?

    我正在运行的模拟代码很大程度上受 CPU 速度的限制 我对将数据输入 输出到用户界面不感兴趣 只需在计算时将其保存到磁盘即可 减少开销的最快解决方案是什么 iostreams 打印 我之前读过 printf 更快 这取决于我的代码吗 如果不
  • Google App Engine Python Webapp2 301 从 www 重定向到非 www 域

    我有一个基于 gae 构建的应用程序 我使用 python 和 webapp2 框架 我需要进行 301 重定向www my crazy domain com to my crazy domain com这样可以消除搜索结果中的 www 和
  • 带通配符的 Logback 记录器名称

    是否可以对记录器名称使用通配符来匹配不同的包 这样我们就不必单独指定它们 所以而不是写
  • pyspark 根据 lat lng 获取到另一个车站的最小距离的车站

    我正在使用 1 个数据框 它包含车站名称及其坐标 现在我想找出距离每个车站最近的车站 并将其记录在单独的列中 例如 df Station name lat Lng mainstation 8 3838 6 9848 bus station
  • 关于条件的问题 (/;)

    Condition有属性HoldAll这会阻止在应用之前评估其第一个参数Condition 但由于某种原因Condition即使测试给出 也会评估其第一个参数False In 1 Condition Print x False During
  • 依靠 onStop() 而不是 onPause() 进行图像流 ionic-webview/cordova 应用程序

    我有一个特定的情况 即需要处理的特定应用程序 我的应用程序是一个离子视频监控应用程序 它使用 cordova 来实现各种插件 它显示流式 JPEG 图像作为其功能的一部分 我需要处理的场景 如果应用程序进入后台 它需要清除视频资源 这会导致
  • Azure 中的 C# DateTime.Now 不报告 GMT - 可以设置默认时区吗?

    在天蓝色网站中 DateTime Now 总是返回 UTC 时间 我需要能够将时区设置为 GMT 因此所有时间目前都是一小时后 I m not此时可以更改任何代码 因此问题是是否可以在配置中或以编程方式更改默认时区 可以在 Global a
  • 更改 QML 控件的文本颜色

    我正在使用一些QML 控制 https doc snapshots qt io qt5 dev qtquickcontrols index html like GroupBox and CheckBox其中有与之相关的文本 文本的默认颜色为
  • 井字游戏的遗传算法

    因此 我被分配的问题是使用遗传算法编写 5x5x5 井字棋玩家 我的方法是从 3x3 开始 让它发挥作用 然后扩展到 5x5 然后扩展到 5x5x5 它的工作方式是这样的 模拟一大堆游戏 并在每个游戏的每个回合中 在相应的表 作为 C st