- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在研究基于 NEAT algorithm 的神经网络学习演奏 Atari Breakout在 Python 2.7 中进行克隆,我的所有部分都可以正常工作,但我认为可以通过更好的算法来计算物种适应度来大大改进进化。
神经网络的输入是:
输出是:
我可用于物种适应度计算的参数是:
breakout_model.score
- int
:物种所玩游戏的最终得分breakout_model.num_times_hit_paddle
- int
: Racket 击中球的次数breakout_model.hits_per_life
- int
: Racket 击中球的次数per life,以列表的形式;例如第一个元素是第一个生命的值(value),第二个元素是第二个生命的值(value),依此类推直到4breakout_model.avg_paddle_offset_from_ball
- decimal
: 球与 Racket 中心在 X 方向上的平均直线距离breakout_model.avg_paddle_offset_from_center
- decimal
:框架中心到桨中心的X方向平均直线距离breakout_model.time
- int
:游戏的总持续时间,以帧为单位breakout_model.stale
- boolean
:游戏是否因过时而被人为终止(例如,球被卡住直接垂直弹跳, Racket 不动)如果您认为我需要有关游戏最终状态的更多数据,而不仅仅是这些,我可能会实现一种非常容易获得它的方法。
这是我目前的适应度计算,我认为这不是很好:
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 或受到重大惩罚的情况下使用它。我只会决定分数的每个组成部分应该有多少权重并相乘。负成分只会增加理解适应度函数的复杂性,并没有真正的好处;该模型从分数的相对差异中学习。所以我的函数版本看起来像这样:
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
(旁白:我没有包括“距画面中心的距离”,因为我认为那是作弊;如果保持在中心附近是最大化游戏效率的好方法,那么智能体应该自己学习。如果您将所有智能都潜入健身功能,那么您的智能体根本就不是智能。)
关于python - 需要帮助设计基于 NEAT 算法的神经网络的适应度评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40875553/
我正致力于从头开始实现 NEAT,并且偶然发现了一个我找不到具体答案的问题。在所有其他网络都被指定之后,NEAT 算法如何响应其中只有一个成员的物种? 我已经想到了几个可能的答案,如果有任何额外的见解
似乎我的程序正在尝试学习直到某个点,然后它就感到满意并且根本停止改进和改变。通过我的测试,它通常最多达到 -5 的值,然后无论我让它运行多久,它都会保持在那里。结果集也不会改变。 只是为了跟踪它,我做
我通读了 NEAT paper我现在了解算法了。 但是有一件事我还不清楚。突变何时发生以及如何发生?是加节点还是加连接变异怎么选择呢?此外,如何选择网络中发生突变的位置(在哪些连接之间)? 最佳答案
我正在尝试实现简单的 NEAT。我从各种来源了解到有 4 种类型的“节点”:输入神经元、隐藏神经元、输出神经元和所谓的偏置神经元。我看不到哪个过程可能会产生偏差神经元,这在 this paper 中有
我正在阅读 Stanley 的论文,但我无法弄清楚 NEAT 中的 Disjoint 和 Excess 基因到底是什么。我知道它们似乎以某种特定方式与以下事实相关:它们都包含与 parent 双方无关
在 Java 版本的 Encog 中,如何保存 NEAT 网络及其训练?我希望能够关闭我的软件并在下次运行它时从中断处恢复训练。 我有一个 NEATPopplation、CalculateScore
我正在从以下论文中了解 NEAT:http://nn.cs.utexas.edu/downloads/papers/stanley.ec02.pdf 我无法理解调整后的适应度如何惩罚大型物种并防止它们
我一直在阅读 NEAT(增强拓扑的神经进化)的工作原理,并且已经了解了它的主要想法,但一直困扰我的一件事是如何将不同的网络划分为物种。我已经完成了该算法,但它对我来说没有多大意义,而且我读的论文也没有
据我所知,NEAT(NeuroEvolution of Augmenting Topologies)是一种利用进化概念来训练神经网络的算法。另一方面,强化学习是机器学习的一种,其概念是“奖励”更成功的
我第一次使用 bourbon neat,它的表现并不完全符合我的预期 - 这可能意味着我设置错误。 我正在开发移动设备优先,所以我希望我的布局在我的桌面断点和我的较大断点之间保持相同(以便样式级联到下
我的 CSS 中有以下内容: body { @include outer-container; color: $Dark-Blue; background-color: $Light
我正在尝试制作一个基于 Bourbon Neat 网格的响应式网站。当我将自己计算机上的浏览器大小调整为手机大小时,我的媒体查询工作正常,但是当我在手机上加载网站时,没有任何移动更改出现。 我现在有以
我刚开始使用 Bourbon Neat,对断点的工作原理有疑问。在我的 grid_seeings.scss 中,我设置了如下断点: $xsm: new-breakpoint(min-width 300
有没有人想出如何使用 Bourbon Neat 创建一个固定在页面底部的页脚,同时保持它的响应性? 所有著名的粘性页脚解决方案都与 Neat 不“兼容”。 最佳答案 我在几个使用 Bourbon Ne
我查看了 Bourbon Neat 的示例响应式网格。据我所知,我正在正确使用它。 问题 标签都占据了自己的一行,就好像我把它们都做了一样 span-columns(12) 我的猜测是我没有正确嵌套元
这是多年前在 Neat github 上提出的问题。那里的用户非常全面地描述了这个问题,并附有图片:https://github.com/thoughtbot/neat/issues/99 本质上,我
我是 Neat/Bourbon 的新手,正在尝试使用 Codekit 进行设置,以便我可以开始构建一些很棒的网格! 我通过将 @import "neat"; 插入到我的主 SCSS 文件中,使用内置的
在我看来,Neat 的默认行为应该是每个跨度列在相邻跨度列之间应该有一个边距(或间距)。我在网上找到的每个示例都只是简单地安装了 Neat,做了一个快速演示,结果在相邻元素之间出现了一个间距。没有更改
我正在研究基于 NEAT algorithm 的神经网络学习演奏 Atari Breakout在 Python 2.7 中进行克隆,我的所有部分都可以正常工作,但我认为可以通过更好的算法来计算物种适应
我已经升级到 Bourbon Neat v2其中包括在容器网格的左侧和右侧添加排水沟。 在 v1我可以用 block-collapse在 span-columns然而,在 v2 中,mixin 会吃掉
我是一名优秀的程序员,十分优秀!