我目前正在从强化学习着名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:对不起忘了提,当位置或速度超过最大值或最小值我将其设置回最大值或最小值
我想我做的时候声称,一些部门有相同的索引号,只需再次检查函数的最后一行,它确实导致不同的索引号是错误的。对不起,打扰你们 –
无论如何,你认为这是离散连续变量的好方法吗? –