0
我的問題是當我的代理獲得0,0,0,9等我試圖阻止它去9,0或9,9等 這樣在這個例子中停止代理離開電網(RL的網格世界示例)
(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> = cr.NUM_ROWS'或'x> cr.NUM_ROWS - 1' –
另外,它看起來像你正在檢查_current_ x/y位置是否有效('x'和'y'),而不是代理要去的位置('xpos','ypos')。另外,通過設置'x = cr.START_ROW',你不是正在做你不想做的事嗎,即當它進入'10'時將代理設置爲'0'?但是,所有這些僅僅是一個猜測而沒有看到更多的代碼。 –
嗨@tobias_k感謝您指出我傳遞了錯誤的變量,您說得對,我正在做與我想做的事情相反的事情。我沒有注意到它。它現在按預期工作。謝謝, – DugD