rl:
2024/3/27
state的问题:
处理办法:
首先state是个元组
state 与next_state 的一些问题
Traceback (most recent call last):
File "C:\Users\xiaol.conda\envs\gym\Lib\site-packages\gym\envs\ShipEnv\DQN-on-ship.py", line 156, in
b_s, b_a, b_r, b_ns, b_d = replay_buffer.sample(batch_size)
File "C:\Users\xiaol.conda\envs\gym\Lib\site-packages\gym\envs\ShipEnv\DQN-on-ship.py", line 37, in sample return np.array(state), action, reward, np.array(next_state), done
ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (64,) + inhomogeneous part.
- 分析
神经网络的多输入和输出
-
假如输入都是一维的,那么坐标轴就只有一个。
3/28练结果:一共训练了500回合
训练的问题:
1,奖励设置:把碰撞的奖励设置为100。
2.每个回合usv的位置应该是随机重置,而不是在一个重复的点上。
3,状态空间太大,不容易收敛。
4.取消掉障碍物,把障碍物的位置,设定为岛的位置。
5,要增大探索值
## 奖励函数的设计逻辑为:
出发到回到目标点,没有遇到碰撞,加10分
碰撞到了,撞击敌方无人艇+100分
巡逻的过程中,不断的接近目标点+1分,远离-1分
TODO:
1.跟随敌方无人艇,直到驱逐出边界
2.多个usv形成围捕的局面。
强化学习绘图:
3/28号实验 1
此时实验显示usv并没有收敛,return发散震荡,训练的时间越来越长
这时候小船总是在原地旋转,守株待兔,在某个蓝色船只的必经之路上等待,要么原地旋转,要么pass而不采取动作。
- 解决方案,增加探索率。
- 实验结果:
长时间的在原地旋转,应该给一个时间上的惩罚机制,比如多少秒或者回合还在原地,就给予惩罚,或者,给一点好奇心的奖励。
小船容易转圈:
1.探索率不足,直接增大探索率的值。
2.
3/28号实验2
Iteration 4-7的收敛时间变长是因为小船一直在原地打转。
奖励函数的设置没有设置渐进奖励。比如说,小船离蓝色越远就增加或者说减少
3/28实验3
先将epsiode设置为1,然后随着回合数的变化来逐渐降低。
`eps = 0.5 * 1 / (1 + episode)`
一个程序设计上的问题,当发生碰撞后,船的位置不是随机生成在地图的任意点位。
3/29
- 训练时间太长
3/30
将状态空间改为512*512,奖赏函数为
self._handle_collisions()
if self.state == STATE_IN_DESTINATION:
reward = 0.
elif self.state == STATE_COLLISION:
reward = 100.
elif self.state == STATE_IN_SAILING:
self.dist = math.sqrt(((np.array(self.dest_center) - np.array(self.my_ship.rect.center)) ** 2).sum())
if self.old_dist > self.dist:
reward = 0.
else:
reward = 0.
self.old_dist = self.dist
# 再增加一种距离状态
elif self.state == STATE_IN_SAILING:
self.dist0 = math.sqrt(((np.array(self.other_ship.rect.center) - np.array(self.my_ship.rect.center)) ** 2).sum())
if self.old_dist0 > self.dist0:
reward = +5.
else:
reward = -10.
self.old_dist0 = self.dist0
敌方潜艇为一对多。
-
忘记更改地图512*512
4/1
- 结果,刚开始进行的很快,然后由于放进去经验回放池里面的数据的连续性被打乱了,所以就会进行的越来越慢
# 4/2
训练的有慢,基本上收敛了