私は現在、強化学習から有名なマウンテンカーの問題に取り組んでいます。この問題は連続的な性質のものです。つまり、2 つの変数があります。1 つの位置 - -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;
}
しかし、このスキームでは、いくつかのセクターが同じインデックス番号を持つことになります。この2つの連続変数をどのように離散化できるか考えていますか?
Upd:申し訳ありませんが、位置または速度が最大値または最小値を超えた場合は、最大値または最小値に戻します。