def get_reward(self, done):
base_reward = 200
my_color = self.color
my_angle = self.car_body.angle
my_x, my_y = self.car_body.position
goalx = self.redGoal[0][0]
ySep = int((self.redGoal[0][1]+self.greenGoal[0][1])/2.)
# ySep = int((self.redGoal[0][1]+self.greenGoal[0][1])/2.)
if done:
if my_color == 0:
if my_y > ySep:
reward = base_reward*6
else:
reward = base_reward*-6
else:
if my_y < ySep:
reward = base_reward*6
else:
reward = base_reward*-6
return reward
else:
if self.car_is_crashed():
reward = -3*base_reward
return reward
if my_x >= goalx-self.car_radius:
if my_color == 0:
angle1 = self._get_angle(self.eRedGoal[0])
angle2 = self._get_angle(self.eRedGoal[1])
reward = 2*base_reward*(self.direct/(self.vmax))*max(math.cos(my_angle-angle1), math.cos(my_angle-angle2))
else:
angle1 = self._get_angle(self.eGreenGoal[0])
angle2 = self._get_angle(self.eGreenGoal[1])
reward = 2*base_reward*(self.direct/(self.vmax))*max(math.cos(my_angle-angle1), math.cos(my_angle-angle2))
return reward
if my_color == 0:
angle1 = self._get_angle(self.redGoal[0])
angle2 = self._get_angle(self.redGoal[1])
reward = (1./2)*base_reward*(self.direct/(self.vmax))*max(math.cos(my_angle-angle1), math.cos(my_angle-angle2))
else:
angle1 = self._get_angle(self.greenGoal[0])
angle2 = self._get_angle(self.greenGoal[1])
reward = (1./2)*base_reward*(self.direct/(self.vmax))*max(math.cos(my_angle-angle1), math.cos(my_angle-angle2))
return reward
# def _euclidean_dist(self, target):
# x_ , y_ = self.car_body.position
# x = np.array([x_, y_])
# t = np.array(target)
# dist = np.sqrt(np.sum((t-x)**2))
# return dist
m_carmunk.py 文件源码
python
阅读 25
收藏 0
点赞 0
评论 0
评论列表
文章目录