q-learning计算中的大量状态

2023-12-20

我通过 q-learning 实现了一款 3x3 OX 游戏(它在 AI vs AI 和 AI vs Human 中完美运行),但我无法更进一步地进行 4x4 OX 游戏,因为它会耗尽我所有的 PC 内存并崩溃。

这是我当前的问题:大数组中的访问冲突? https://stackoverflow.com/questions/56231392/access-violation-in-huge-array

根据我的理解,3x3 OX 游戏总共有 3(空间、白色、黑色)^ 9 = 19683 种可能的状态。 (相同图案不同角度仍算)

对于 4x4 OX 游戏,总状态将为 3 ^ 16 = 43,046,721

对于常规围棋游戏,15x15 棋盘,总状态将为 3 ^ 225 ~ 2.5 x 10^107

Q1.我想知道我的计算是否正确。 (对于 4x4 OX 游戏,我需要 3^16 数组?)

Q2。由于我需要计算每个Q值(对于每个状态,每个动作),我需要这么大量的数组,这是预期的吗?有什么办法可以避免吗?


考虑对称性。实际可能的配置数量远小于 3x3 板上的 9^3。例如,基本上只有 3 种不同的配置,其中一个x在黑板上。

旋转次数

有许多板配置都应该导致您的 AI 做出相同的决策,因为它们具有相同的模对称性。例如:

x - -    - - x    - - -    - - -  
- - -    - - -    - - -    - - - 
- - -    - - -    - - x    x - - 

这些都是相同的配置。如果你单独对待他们,你就会浪费训练时间。

镜像

不仅有旋转对称,还可以在不改变实际情况的情况下镜像棋盘。以下内容基本都是一样的:

0 - x    x - 0    - - -    - - -  
- - -    - - -    - - -    - - - 
- - -    - - -    0 - x    x - 0

排除“不可能发生”的配置

接下来考虑当一名玩家获胜时游戏结束。例如,您有 3^3 个配置,全部如下所示

x 0 ?
x 0 ?    // cannot happen
x 0 ?

他们永远不可能出现在正常的比赛中。你不必为它们预留空间,因为它们根本不可能发生。

排除更多“不可能发生”

此外,您大大高估了配置空间的大小9^3因为玩家轮流轮流。例如,您无法达到如下配置:

x x -
x - -    // cannot happen
- - - 

如何获得所有需要的配置?

简而言之,这就是我解决问题的方法:

  • 定义一个operator<为您的董事会
  • 使用<您可以为每组“相似”配置选择一个代表(例如,<比集合中的所有其他人都要多)
  • 编写一个函数,对于给定的配置返回代表性配置
  • brute force iterate all possible moves (only possible moves!, ie by making alternating turns of the players only until the game is won). While doing that you
    • 计算您遇到的每个配置的代表
    • 记住所有代表性配置(请注意,由于对称性,它们出现了多次)

您现在拥有所有模对称配置的列表。在实际游戏中,您只需将棋盘变换为其代表,然后进行移动即可。如果您记得如何旋转/镜像回来,您可以稍后转换回实际配置。

这是相当蛮力的。我的数学有点生疏,否则我会尝试直接获取代表名单。然而,对于每种尺寸的电路板,您只需执行一次此操作。

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

q-learning计算中的大量状态 的相关文章

  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • PyTorch 中的后向函数

    我对 pytorch 的后向功能有一些疑问 我认为我没有得到正确的输出 import numpy as np import torch from torch autograd import Variable a Variable torch
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐