Java 停止代理离开网格(网格世界的RL示例)
我的问题是,当我的代理达到0,0,0,9等时,我试图阻止它达到9,0或9,9等 就像这个例子中的一样Java 停止代理离开网格(网格世界的RL示例),java,agent,gridworld,Java,Agent,Gridworld,我的问题是,当我的代理达到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) 我希望它在网格之间移动,而不是通过返回网格来缩短。例如,代替从(0,0)到(9,0)到(0,1)0r(1,0)等等 我尝试了一些简单的代码,检查x和y值是否大于行数和列数的x和y值,或者x和y是否小于0 public boolean Notvalid(int
(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
public boolean Notvalid(int x, int y) {
return (x > cr.NUM_ROWS || y > cr.NUM_COLUMNS || x < 0 || y < 0);
}
有人知道更简单的方法来处理这样的规则吗?您的代码似乎有三个问题:
- 假设行索引是
到0
和9
是cr.NUM\u行
,您应该使用10
或x>=cr.NUM\u行
而不是x>cr.NUM\u行-1
。(同列)x>cr.NUM\u行
- 您正在检查当前x/y位置是否有效(
和x
),而不是代理将要去的位置(y
,xpos
)YPO
- 通过设置
,您似乎正在做您不想做的事情,即当代理转到x=cr.START\u 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
}
}
公共布尔值无效(int x,int y){
返回x>=cr.NUM|u行| y>=cr.NUM|u列| x<0 | y<0;
}
公共网格状态(int XPO、int YPO){
如果(!无效(XPO、YPO)){
x=xpo;
y=YPO;
}否则{
//新职位无效->待在原地不动
}
}
是cr.NUM\u行
9行还是10行?列索引似乎是从0到9,因此cr.NUM_行
应该是10,但是您应该使用x>=cr.NUM_行
或x>cr.NUM_行-1
此外,您似乎在检查当前x/y位置是否有效(x
和y
),而不是代理要去的位置(xpos
,ypos
)。另外,通过设置x=cr.START_ROW
,您不正是在做您不想做的事情吗,即当代理转到10
时,将代理设置为0
?然而,所有这些都只是猜测,没有看到更多的代码。您好@tobias_k谢谢您指出我传递了错误的变量,您是对的,我是d与我想做的相反。我没有注意到。它现在按预期工作。谢谢,
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
}
}