Artificial intelligence NetLogo:2048机器人优化

Artificial intelligence NetLogo:2048机器人优化,artificial-intelligence,netlogo,2048,Artificial Intelligence,Netlogo,2048,我正在尝试制作一个模拟2048游戏的Netlogo。我已经实现了三个由权重参数确定的启发式函数,并希望使用行为空间来运行模拟,并检查赢得这场游戏的最佳策略 过程搜索使用导出/导入世界原语搜索可能的移动,并选择启发式函数具有最高值的移动 问题是这个过程非常慢(因为导入世界函数每转调用四次)。你们有什么想法如何在不经常进出口世界的情况下实现这一点 这是我介绍人工智能课程的一个项目。几天后就要交了,我似乎找不到任何解决办法 代码的相关部分如下所示。程序移动-(方向)所有工作正常且变量可移动?如果正方形

我正在尝试制作一个模拟2048游戏的Netlogo。我已经实现了三个由权重参数确定的启发式函数,并希望使用行为空间来运行模拟,并检查赢得这场游戏的最佳策略

过程搜索使用导出/导入世界原语搜索可能的移动,并选择启发式函数具有最高值的移动

问题是这个过程非常慢(因为导入世界函数每转调用四次)。你们有什么想法如何在不经常进出口世界的情况下实现这一点

这是我介绍人工智能课程的一个项目。几天后就要交了,我似乎找不到任何解决办法

代码的相关部分如下所示。程序移动-(方向)所有工作正常且变量可移动?如果正方形可以沿所述方向移动,则为真,否则为假。它在由move-(方向)调用的过程moveable check中进行检查

我将非常感谢你的帮助


您需要能够保存和恢复的最重要、也是最困难的信息是方块。这在没有
导入世界
导出世界
的情况下非常容易做到(请注意,下面使用的是NetLogo 6语法;如果您仍然使用NetLogo 5,则需要在
foreach
中使用旧的任务语法):

上面的
value
只显示了如何存储正方形的任意变量。我不确定您与它们关联了哪些数据或需要恢复哪些数据。这段代码背后的思想是,您将有关正方形的信息存储在列表中,其中每个内部列表包含一个正方形的数据。因此,您使用此功能的方式是:

let state serialize-state
;; make changes to state that you want to investigate
restore-state state
您可能还需要存储一些全局变量等。这些可以存储在局部变量或
状态
列表中(更一般,但更难实现)

其他一些想法:

  • 现在看起来你只是在看前方的一个状态,并且只在一个可能的位置上放置新的方块(确保你没有因为知道新方块的确切位置而作弊)。最终,您可能希望使用一种树搜索进行任意的前瞻。这棵树长得很快。如果这样做,您将需要使用修剪策略,例如:。此外,这使得国家恢复工作更加困难,但仍然可行。您将存储一组状态,而不是单个状态
  • 您只需执行
    right 90
    rt 90
    即可,而不是
    set heading+90
to-report serialize-state
  report [(list xcor ycor value)] of squares
end

to restore-state [ state ]
  clear-squares
  foreach state [ [sq] ->
    create-squares 1 [
      setxy (item 0 sq) (item 1 sq)
      set heading 0 ;; or whatever
      set value item 2 sq
    ]
  ]
end
let state serialize-state
;; make changes to state that you want to investigate
restore-state state