m_carmunk.py 文件源码

python
阅读 25 收藏 0 点赞 0 评论 0

项目:Multi-Agent_SelfDriving 作者: MLJejuCamp2017 项目源码 文件源码
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
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号