井字游戏的极小极大

2024-04-25

我正在尝试用简单的极小极大算法来解决井字游戏。简单,但应该涵盖很多语言。到目前为止我所拥有的:

该板表示为 9 个(未绑定)变量的数组,这些变量可以设置为x or o.

获胜条件基本上是:win(Player, [X1,X2,X3|_]) :- X1==Player,X2==Player,X3==Player.等等所有八个变体。 draw 只是一个简单的检查是否所有变量都已绑定。

移动条款也很简单:move(Player, [X|_], 0, 0) :- var(X), X=Player.,再次针对所有可能的位置(我将为以后的程序保留代码重用:))。

现在我可以通过简单的回溯生成所有可能的移动:move(Player, Board, X, Y).这基本上应该是我对 minimax 所需要的全部内容(显然是一个简单的实用函数,如果计算机获胜则返回 1,如果平局则返回 0,如果人类获胜则返回 -1,这很容易)。我只是不知道如何实现它,而且我在网上找到的所有示例都相当复杂并且没有得到很好的解释。

请注意,我可以接受 n^2 或更糟糕的运行时行为 - 这实际上与效率无关。是的,我确实知道如何用 lisp、python、java 编写极小极大 - 只是不知道如何将该代码“移植”到序言中。


好吧,由于您已经有了 move/4 谓词,我将从收集所有可能的移动开始:

findall(X-Y, move(Player, Board, X, Y), Moves)

然后就是评估每一步的问题,不是吗?为此我会写一个谓词board_player_move_value/4给定一个棋盘和给定玩家的一步棋,决定该棋手的棋步有多好。正是这个谓词可能取决于此阶段(对于其他玩家)可能的进一步移动,这就是极小极大发生的地方。例如,如果这一步棋赢得了比赛,那么这一步棋就是好棋。如果其他玩家可以在下一步中获胜,那么这是一个糟糕的举动等。我将使用此谓词来构建 Value-Move 形式的术语集合,使用 keysort/2 对它们进行排序,然后选择其中一个动作具有最佳价值,其中“最佳”取决于我是否试图为最小化或最大化玩家找到一个动作。

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

井字游戏的极小极大 的相关文章

  • 定点数学比浮点运算快吗?

    多年前 即 20 世纪 90 年代初期 我构建了图形软件包 该软件包基于定点算术和预先计算的 cos sin 表格以及使用牛顿近似方法进行 sqrt 和对数近似的缩放方程来优化计算 这些先进技术似乎已经成为图形和内置数学处理器的一部分 大约
  • 如何在 C# 中以编程方式创建柔和的颜色?

    根据所需的颜色数量均匀分布地生成它们 如果指定的计数为 8 则看起来像这样 List
  • Prolog 谓词参数中实例化模式指示符的含义

    查看Prolog文档 谓词签名有时会写成如下 foo Bar Baz Qux Mop 什么是 and 我该如何解释它们 另外 这些是唯一存在的还是还有更多 在这种情况下 这些前缀运算符代表实例化模式 即它们告诉您哪些参数应该是变量或在调用谓
  • 简单的布尔表达式测试

    user compiling user for byte code formula 0 P Q P Q P user compiled 2 lines read 768 bytes written 37208 ms yes formula
  • 当给定块大小时反转单链表

    有一个单连接链表 并给出了块大小 例如 如果我的链表是1 gt 2 gt 3 gt 4 gt 5 gt 6 gt 7 gt 8 NULL我的块大小是4然后反转第一个4元素 然后是第二个 4 个元素 问题的输出应该是4 gt 3 gt 2 g
  • Python 旅行商贪婪算法 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 因此 我为旅行推销员问题创建了一种排序 并按 x 坐标和 y 坐标进行排序 我正在尝试实施贪婪搜索 但无法做到 此外 每
  • 如何在C中实现带连分数的自然对数?

    这里我有一个小问题 根据这个公式创建一些东西 这就是我所拥有的 但它不起作用 弗兰基 我真的不明白它应该如何工作 我尝试用一 些错误的指令对其进行编码 N 是迭代次数和分数部分 我认为它会以某种方式导致递归 但不知道如何 谢谢你的帮助 do
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • 颜色逻辑算法

    我们正在构建一个体育应用程序 并希望将团队颜色融入到应用程序的各个部分 现在 每个团队都可以使用几种不同的颜色来表示 我想做的是执行检查以验证两个团队颜色是否在彼此一定的范围内 这样我就不会显示两个相似的颜色 因此 如果团队 1 的主要团队
  • 在一个区域中拟合二维多边形的算法?

    这有标准吗 算法名称 说 我有 10 个不同大小的多边形 我有一个特定大小的区域 我想知道如何填充该区域中的最多多边形 以及它们是如何拟合的 笔记 多边形可以根据限制集进行旋转 一个可能的名称是包装问题 http en wikipedia
  • 当满足动态条件时退出递归函数

    使用来自的函数生成汉明距离 t 内的所有比特序列 https stackoverflow com questions 40813022 generate all sequences of bits within hamming distan
  • String.contains() 的时间复杂度

    String contains 的时间复杂度是多少 假设 n 是与另一个长度为 k 的字符串进行比较的字符串的长度 如果不知道您感兴趣的 String contains 的实际实现 就没有答案 或者你打算使用什么算法 一个完全幼稚的实现可能
  • 查找字符串中最常见的子字符串的算法

    是否有任何算法可用于查找字符串中最常见的短语 或子字符串 例如 以下字符串将 hello world 作为其最常见的两个单词短语 hello world this is hello world hello world repeats thr
  • 在 Python 中从 Excel 复制 YEARFRAC() 函数

    因此 我使用 python 来自动执行一些必须在 Excel 中执行的重复任务 我需要做的计算之一需要使用yearfrac 这在Python中被复制了吗 I found this https lists oasis open org arc
  • 从给定的项目列表创建子列表

    我首先要说的是以下问题不是为了家庭作业目的即使因为我几个月前就完成了软件工程师的工作 无论如何 今天我正在工作 一位朋友向我询问了这个奇怪的排序问题 我有一个包含 1000 行的列表 每行代表一个数字 我想创建 10 个子列表 每个子列表都
  • 寻找公共子集的算法

    I have N number of sets Si of Numbers each of a different size Let m1 m2 mn be the sizes of respective sets mi Si and M
  • 如何以最低的价格优化购物车?

    我有一个我想买的物品清单 这些商品由不同的商店提供 价格也不同 商店有单独的送货费用 我正在寻找一种最佳的购物策略 以及支持它的java库 以最低的总价购买所有商品 Example 商品 1 在 Shop1 的售价为 100 美元 在 Sh
  • 有向未加权图中的最长非循环路径

    什么算法可用于找到未加权有向无环图中的最长路径 动态规划 http en wikipedia org wiki Dynamic programming 它也被引用于最长路径问题 http en wikipedia org wiki Long
  • 如何实现n个元素的查找和插入操作的动态二分查找

    这个想法是使用多个数组 每个长度为 2 k 根据 n 的二进制表示来存储 n 个元素 每个数组都是排序的 不同的数组没有以任何方式排序 在上述数据结构中 SEARCH是通过对每个数组进行一系列二分查找来进行的 INSERT 是通过一系列相同
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该

随机推荐

  • 我如何告诉 matplotlib 我已经完成了绘图?

    下面的代码绘制了两个后记 http en wikipedia org wiki PostScript ps 文件 但第二个文件包含这两行 import matplotlib import matplotlib pyplot as plt i
  • Android:更新后重新启动应用程序 - ACTION_PACKAGE_REPLACED

    我的应用程序不在 Play 商店中 请在网络上验证是否有新版本并下载并启动它 安装后我想重新启动应用程序并使用BroadcastRecevier with ACTION PACKAGE REPLACED 这是代码 播送 public voi
  • 分支输出 Keras

    我的模型分为 2 个输出层 如下所示 输入 gt L1 gt L2 gt L3 gt 输出1 输入 gt L1 gt L2 gt L3 gt 输出2 我这样使用它是因为我想要out1 and out2有2个不同的激活函数 因此 我创建了一个
  • D 中的特征可以用于类型类吗?

    我是 D 新手 我正在寻找一种使用类似 Haskell 的类型类进行编程的好方法 例如D 中的函子 幺半群等 Tango 或 Phobos 中是否实现了类似的功能 我听说过可以对某些属性进行编译时类型检查的特征 它们可以用于类型类吗 我尝试
  • 如何使用 git format-patch 将提交压缩到一个补丁中?

    我在一个分支上有 8 个提交 我想通过电子邮件发送给一些尚未了解 git 的人 到目前为止 我所做的一切要么给我 8 个补丁文件 要么开始为分支历史记录中的每个提交提供补丁文件 从一开始 我使用 git rebase interactive
  • 浏览器选项卡存储?

    是否有一个浏览器存储只能由创建它的页面使用 我正在制作一个 TamperMonkey 脚本来自动化我的工作 当打开来自特定域的页面时会触发它 然后 它会在所述页面中找到特定链接 同一域 并在同一选项卡中将其打开 如果新打开的页面符合条件 则
  • 在 numpy 中快速找到对称对

    from itertools import product import pandas as pd df pd DataFrame from records product range 10 range 10 df df sample 90
  • PaintComponent() 正在其他组件上绘图

    我正在使用基于中的代码的自定义类这个答案 https stackoverflow com a 16909994 5686799 绘制一个形状像讲话泡泡的背景 每当我将应用程序的窗口大小调整到足以使组件在顶部或底部突出时 该组件的轮廓就会绘制
  • 有没有办法通过 PowerShell 检测声音?

    我想检测电脑是否正在播放任何类型的声音 如果它没有播放任何类型的声音 我可以在 Powershell 中使用其他条件并执行下一步需要执行的操作 那么有没有办法通过 PowerShell 来检测声音呢 Thanks 方法一 Import Mo
  • 如何声明二维数组?

    创建二维数组的最简单方法是什么 我希望能够做类似的事情 declare int d 0 m 0 n 您还可以通过指定数组的索引来创建关联数组或类似 哈希表 的数组 array array 0 gt array name gt John Do
  • Git:切换分支时保留忽略的文件

    我知道这看起来像是重复的GIT 切换分支时如何保留被忽略的文件 https stackoverflow com questions 15552959 git how to keep ignored files when switching
  • Tomcat 组件是什么?什么是卡塔利娜和郊狼? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 谁能描述一下 Tomcat 中的组件是什么 它在 Tomcat 服务器中的作用是什么 什么是郊狼 卡塔琳娜是什么 Catalina是T
  • 奇数运算符优先级/关联性行为[重复]

    这个问题在这里已经有答案了 在 Python 2 7 中 下面的内容是怎么回事 True w in what 两者的行为都不同 True w in what and True w in what gt gt gt True w in wha
  • 当你用 mlockall 设置的内存用完时会发生什么?

    我正在开发一个需要大量内存才能批量运行的 C 应用程序 gt 20GB 我的一些客户遇到了内存限制 有时操作系统开始交换 总运行时间加倍或更糟 我读到可以使用 mlockall 来防止进程被换出 当进程内存需求以这种方式接近或超过可用物理内
  • 如何在JPA中反映“嵌套集”模型

    很好用嵌套集 http www evanpetersen com item nested sets html对于分层数据 但在这个设计中 如果删除或插入一些数据 您应该始终计算右侧和左侧节点 此外 您没有任何外键 我如何用 JPA 反映这个
  • python模拟下面的return_value是什么

    我对 python 模拟很陌生 所以只是想理解它 在下面的代码中 下面指出的 1 和 2 语句之间有什么区别 因为最后我可以设置mock response status code与任一陈述 import requests def get d
  • Safari - 视频加载速度太慢

    我在将视频添加到我的网站时遇到了一些麻烦 我使用这段代码
  • 使用自己的路径在不同的 python 可执行文件下生成 multiprocessing.Process

    我有两个版本的Python 实际上是两个conda环境 path to bin 1 python path to bin 2 python 我想从一个版本的 python 启动一个在另一个版本中运行的函数 使用类似multiprocessi
  • 敲除验证

    我有一个 asp net mvc3 项目 我在其中使用淘汰赛绑定对表进行批量编辑 我想在保存数据时进行必需验证和数字验证等验证 有没有更简单的方法来进行淘汰验证 PS 我没有使用表格 看一下敲除验证 https github com eri
  • 井字游戏的极小极大

    我正在尝试用简单的极小极大算法来解决井字游戏 简单 但应该涵盖很多语言 到目前为止我所拥有的 该板表示为 9 个 未绑定 变量的数组 这些变量可以设置为x or o 获胜条件基本上是 win Player X1 X2 X3 X1 Playe