我目前正在從強化學習着名Mountain Car problem。這個問題具有連續性,這意味着我有兩個變量:一個位置 - 從-1.2到0.5,速度 - 從-0.07到0.07。而且我有3種可能的行動 - 反向加速,前進加速和空擋,導致適當方向的位置變化。由於計算加速度的方式,我的位置變量是連續的,這意味着我不能使用查找表,所以我試圖在矩形扇區中分割位置 - 速度軸,將位置分爲寬度爲0.05和速度爲0.75的桶和速度爲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:對不起忘了提,當位置或速度超過最大值或最小值我將其設置回最大值或最小值
我想我做的時候聲稱,一些部門有相同的索引號,只需再次檢查函數的最後一行,它確實導致不同的索引號是錯誤的。對不起,打擾你們 –
無論如何,你認爲這是離散連續變量的好方法嗎? –