需要帮助设计基于算法的神经网络的健身评估



我正在基于基于整洁的算法的神经网络,该算法学会在Python 2.7中播放Atari Breakout Clone,而我所有的作品都可以使用,但我认为进化可能可以使用通过更好地计算物种健身的算法,可以极大地改进。

神经网络的输入是:

  • x桨中心的坐标
  • x球中心的坐标
  • y球中心的坐标
  • Ball的DX(x中的速度)
  • 鲍尔的dy(y速度)

输出为:

  • 移动桨左
  • 向右移动桨
  • 请勿移动桨

我可用于物种适应性计算的参数是:

  • breakout_model.score -int:该物种玩游戏的最终成绩
  • breakout_model.num_times_hit_paddle -int:桨击球的次数
  • breakout_model.hits_per_life - int:以列表的形式,桨板击球的次数;例如第一个元素是第一人生的价值,第二个要素是第二终世的价值,最多可达4
  • breakout_model.avg_paddle_offset_from_ball - decimal:球和桨中心之间x方向的平均线性距离
  • breakout_model.avg_paddle_offset_from_center -decimal:X方向的平均线性距离在框架中心和桨中心之间的平均线性距离
  • breakout_model.time -int:以框架测量的游戏总持续时间
  • breakout_model.stale -boolean:是否由于稳定性而人为地终止游戏(例如,球被直接弹跳垂直弹跳,划桨不移动)

如果您认为我需要更多有关游戏最终状态的数据,而不仅仅是这些,我可能会实现一种方法来轻松获取它。

这是我目前的健身计算,我认为这不是很好:

def calculate_fitness(self):
    self.fitness = self.breakout_model.score
    if self.breakout_model.num_times_hit_paddle != 0:
        self.fitness += self.breakout_model.num_times_hit_paddle / 10
    else:
        self.fitness -= 0.5
    if self.breakout_model.avg_paddle_offset_from_ball != 0:
        self.fitness -= (1 / self.breakout_model.avg_paddle_offset_from_ball) * 100
    for hits in self.breakout_model.hits_per_life:
        if hits == 0:
            self.fitness -= 0.2
    if self.breakout_model.stale:
        self.fitness = 0 - self.fitness
    return self.fitness

这是我想的健身计算应该 在语义上:

  • 显然,得分应该对整体健身产生最大的影响。也许0得分为0应该对健身稍有负面影响?
  • 划桨击球的次数应具有效应,但对贡献/重量的影响不大。例如如果这个数字是0,那么它甚至没有真正试图在那一生中击中球,所以它应该具有负面效果
  • 桨式击球的次数也应产生一定的效果,其贡献应基于得分。例如如果它没有多次击球并且也没有得分很多,那应该会产生重大的负面影响。如果没有多次击球,但得分很高,那应该具有显着的积极作用。总体而言,(i think )接近该值的距离是游戏分数,该价值对健身的贡献/权重
  • 在框架中心和桨中心之间的X方向上的平均距离基本上应鼓励桨的中心"休息"位置
  • 如果游戏由于稳定性而人为地结束,则要么应该具有显着的负面影响,要么应该自动迫使健身为0.0;我不确定哪种情况会更好

我不确定如何在所有这些值上操作以使其适当地影响整体健身。

预先感谢您提供的任何帮助。

我将仅在要强制健身得分为0或重大罚款的情况下才能最大程度地减少健身功能中的条件逻辑。我只会确定分数的每个组件应具有多少重量并倍增。负分量只会增加理解健身功能的复杂性,而没有真正的好处;该模型从分数的相对差异中学习。因此,我的功能版本看起来像这样:

def fitness(...):
    if total_hits == 0:
        return 0
    return (game_score/max_score) * .7 
           + game_score/total_hits * .2 
           + game_score_per_life/hits_per_life * .1

(撇开:我没有包括"距离框架中心的距离",因为我认为这是作弊;如果呆在中心附近是一件好事以最大程度地提高游戏效率,那么代理人应该自行学习这一点。如果您将所有智能偷偷介绍到健身功能中,那么您的代理人根本就不聪明。)

最新更新