首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止代理离开网格(网格世界的RL示例)

停止代理离开网格(网格世界的RL示例)
EN

Stack Overflow用户
提问于 2014-12-19 14:25:55
回答 1查看 111关注 0票数 0

我的问题是,当我的代理达到0,0,0,9等时,我试图阻止它转到9,0,或9,9等等,如下例所示

代码语言:javascript
复制
   (0,0) N -1.0 (9,0)
   (9,0) N -1.0 (8,0)
   (8,0) W -1.0 (8,9)

我希望它能在网格之间移动,而不是通过绕着电网跑来跑去。从(0,0)到(9,0)改为(0,1) 0r (1 ,0)等。

我尝试了如下简单的代码,以检查x和y值是否大于行数和列数的x和y值,或者x和y值是否小于0。

代码语言:javascript
复制
  public boolean Notvalid(int x, int y) {

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

     }

并在设置x和y协调时调用此方法。

代码语言:javascript
复制
 public GridState(int xpos, int ypos) {

    if (!Notvalid(x, y)) {

        x = xpos;
        y = ypos;

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

有谁知道处理这种规则的更简单的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-22 14:21:59

您的代码似乎有三个问题:

  • 假设行索引是0 to 9,而cr.NUM_ROWS10,则应该使用x >= cr.NUM_ROWSx > cr.NUM_ROWS - 1而不是x > cr.NUM_ROWS。(各栏相同)
  • 您正在检查当前的x/y位置是否有效(xy),而不是代理将要去的位置(xposypos)。
  • 通过设置x = cr.START_ROW,您似乎完全是在做您不想做的事情,即当代理转到10时将其设置为0

试试这个:

代码语言:javascript
复制
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
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27568010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档