【问题标题】:Stop agent walking off the grid (grid world example of RL)阻止代理离开网格(RL 的网格世界示例)
【发布时间】:2014-12-19 14:25:55
【问题描述】:

我的问题是当我的代理到达 0,0、0,9 等时,我试图阻止它到达 9,0 或 9,9 等 在这个例子中是这样的

   (0,0) N -1.0 (9,0)
   (9,0) N -1.0 (8,0)
   (8,0) W -1.0 (8,9)

我希望它在网格之间移动,而不是绕着网格返回。例如,代替 goind 形式 (0,0) 到 (9,0) 转到 (0,1) 0r (1 ,0) 等。

我尝试了类似此代码的简单操作,以检查 x 和 y 值是否大于行数和列数的 x 和 y 值,或者 x 和 y 是否小于 0

  public boolean Notvalid(int x, int y) {

    return (x > cr.NUM_ROWS || y > cr.NUM_COLUMNS || x < 0 || y < 0);

     }

并在设置x和y坐标时调用该方法

 public GridState(int xpos, int ypos) {

    if (!Notvalid(x, y)) {

        x = xpos;
        y = ypos;

    } else {
        x = cr.START_ROW;
        y = cr.START_COL;
    }
}

有人知道处理此类规则的更简单方法吗?

【问题讨论】:

  • cr.NUM_ROWS 是 9 还是 10?似乎列索引是从 0 到 9,所以 cr.NUM_ROWS 应该是 10,但是你应该使用 x &gt;= cr.NUM_ROWSx &gt; cr.NUM_ROWS - 1
  • 另外,您似乎正在检查 current x/y 位置是否有效(xy),而不是代理所在的位置去(xposypos)。另外,通过设置x = cr.START_ROW,你是不是在做你不想做的事情,即当代理转到10时,设置为0?然而,这一切都只是猜测,没有看到更多你的代码。
  • 嗨@tobias_k 感谢您指出我传递了错误的变量,您是对的,我正在做与我想做的相反的事情。我没有注意到它。它现在按预期工作。谢谢,

标签: java agent gridworld


【解决方案1】:

您的代码似乎存在三个问题:

  • 假设行索引是09 并且cr.NUM_ROWS10,您应该使用x &gt;= cr.NUM_ROWSx &gt; cr.NUM_ROWS - 1 而不是x &gt; cr.NUM_ROWS。 (列相同)
  • 您正在检查当前 x/y 位置是否有效(xy),而不是代理即将去的位置(xpos,@987654331 @)。
  • 通过设置x = cr.START_ROW,您似乎正在做您不想做的事情,即当代理转到10 时,将其设置为0

试试这个:

public boolean notValid(int x, int y) {
    return x >= cr.NUM_ROWS || y >= cr.NUM_COLUMNS || x < 0 || y < 0;
}

public gridState(int xpos, int ypos) {
    if (! notvalid(xpos, ypos)) {
        x = xpos;
        y = ypos;
    } else {
        // new position not valid -> just stay where you are
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多