현재 강화 학습에서 유명한 Mountain Car problem을 연구 중입니다. 이 문제는 연속적인 성격을 띤다. 즉, -1.2에서 0.5 사이의 속도와 -0.07에서 0.07 사이의 두 가지 변수가 있음을 의미한다. 그리고 역방향 가속, 전진 가속 및 중립, 3 가지 동작이 가능하므로 적절한 방향으로 위치가 변경됩니다. 가속도 계산 방법에 따라 위치 변수가 연속적이어서 조회 테이블을 사용할 수 없다는 의미이므로 직사각형 섹터에서 위치 속도 축을 나눠서 위치를 폭 0.05의 버킷으로 나누고 속도를 0.005 길이의 버킷으로 나눕니다. 각 분야를 인덱스를 할당, 나는 다음과 같이했다 : 같은 색인 번호를 가진 일부 분야에서이산 딜레마
public int discretiseObservation(Observation observation) {
double position = observation.getDouble(0) ;
double velocity = observation.getDouble(1);
boolean positionNegativeFlag = position < 0;
boolean velocityNegativeFlag = velocity < 0;
double absolutePosition = Math.abs(position);
double absoluteVelocity = Math.abs(velocity);
double discretePosition = Math.floor(absolutePosition/0.05);
double discreteVelocity = Math.floor(absoluteVelocity/0.005);
if(velocityNegativeFlag) {
discreteVelocity += 14;
}
if(positionNegativeFlag) {
discretePosition += 10;
}
return (int)discretePosition * 28 + (int)discreteVelocity;
}
그러나이 계획의 결과. 이 두 변수를 어떻게 이산 적으로 이산시킬 수 있습니까?
UPD : 죄송합니다은 위치 나 속도가 최대 또는 최소 값을 초과 할 때 다시 최대 또는 최소 값
난 그냥 다시 그 함수의 마지막 줄을 확인, 일부 섹터가 동일한 인덱스 번호가 있다고 주장하고 실제로 다른 인덱스 번호가 발생할 때 실수를 생각한다. 너희들을 괴롭히는 것에 미안. –
어쨌든, 그것은 연속 변수를 이산화하는 좋은 방법이라고 생각합니까? –