2014-12-19 6 views
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 및 x 및 y 좌표를 설정 한 경우, 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; 
    } 
} 

누구나 이런 규칙을 처리하는 더 쉬운 방법을 알고 있습니까? 세 가지 코드에 문제가있는 것처럼

+1

는'cr.NUM_ROWS' 9 또는 10인가? 열 인덱스가 0에서 9까지이므로 'cr.NUM_ROWS'는 10이어야하지만'x> = cr.NUM_ROWS' 또는 'x> cr.NUM_ROWS - 1'을 사용해야합니다. –

+1

또한 에이전트가 갈 위치 ('xpos','ypos')가 아닌 _current_x/y 위치가 유효한지 ('x'와'y') 여부를 확인하고 있습니다. 또한'x = cr.START_ROW'을 설정함으로써, 당신이 원하지 않는 일, 즉 '10'으로 갈 때 에이전트를 '0'으로 설정하지 않습니까? 그러나이 모든 것은 코드를 더 이상 보지 않고 추측하는 것입니다. –

+0

안녕하세요 @ tobias_k 내가 잘못된 변수를 전달했다는 것을 지적 해 주셔서 감사합니다. 내가하고 싶은 것과 정반대로 행동했습니다. 나는 그것을 알아 채지 못했다. 이제 의도 한대로 작동합니다. 고맙습니다, – DugD

답변

0

것 같다 : 그 행의 인덱스가 09에와 cr.NUM_ROWS하는 10입니다입니다 가정

  • , 당신은 사용해야 x >= cr.NUM_ROWS 또는 x > cr.NUM_ROWS - 1 대신 x > cr.NUM_ROWS. 당신은 에이전트가 이동하는 것입니다 위치 (xpos, ypos을)를 현재 X/Y 위치 (xy) 유효한지 여부를 확인하고 있지 않습니다
  • (컬럼에 대해 동일).
  • 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 
    } 
}