问题标签 [fitness]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 遗传算法适应度在某个时候停止增加
我正在尝试实现一种遗传算法,它将通过定位、调整大小和着色 1000 个圆圈来重新创建给定的图像。但是,我发现当适应度达到某个值(在我的情况下约为 0.37)时,它会停止增加。换句话说,它只是收敛于值。
我想不出改善这个的方法
一些细节
人口规模:50
突变率:0.025
每个孩子的基因是一个 1000 元素的数组,元素类型为CircleData
,其中包含圆的大小、颜色和位置
健身功能
我遍历目标图像上的每个像素和算法绘制的画布。对于每个像素,我将 RGB 值映射到 3D 空间中的一个点并计算两点之间的距离。然后将对每个像素的距离求和并归一化以获得 [0, 1] 中的适应度值,其中 1 表示每个像素都是相同的。最后我取值pow(fitness, 2)
作为最终的适应度值。
选择
我根据孩子们的健康状况对他们进行分类,并把最差的 2/3 降下来。对于剩下的孩子,我使用Fitness Proportionate Selection选择两个父母
分频器
我使用一个点交叉点和随机交叉点
更新
我怀疑问题是由于local maximum,仍在尝试解决该问题...
关于GA中局部最大值的一些SO问题:
java - 不打印相同的输出
根本没有打印与上面的行相同的输出,我不知道为什么会这样,我注意到它正在从末尾向后打印最后 N 个数字,无论我输入到参数中的任何内容,它都会在一秒钟内打印该数量时间。
这是主要的
这是 ScalesSolution 类
这是 randomOther 类
这是输出的问题:
我相信两个输出应该是相同的,我看到这里有问题,不知道为什么他们不是
fixture - 我们在使用 FitNesse 时是否真的测试过“夹具”?
我想这更像是一个讨论,我想听听其他使用 FitNesse 的人的意见。
我对 FitNesse 很陌生,最近几天一直在阅读。我了解“测试维基”和“夹具”的概念,并且测试针对夹具运行。但是,我对夹具和 SUT 之间的联系不是很清楚。当我们运行测试时,我们真的测试了夹具吗?测试结果是不是和使用的夹具一样好?我们如何将夹具与 SUT 链接起来。
如果这些是基本问题,我很抱歉,但到目前为止我找不到令人满意的答案。感谢您对此的意见/反馈。
谢谢,
genetic-algorithm - 遗传算法没有产生更好的结果
我正在运行一种遗传算法来训练一组猎人来学习捕捉尽可能多的大象。基本上,大约有 20 名猎人在 2D 网格环境中四处走动,并且必须有 4 名猎人围绕大象才能捕捉它(世界上有大约 20 只大象)。每次运行此模拟时,所有猎人和大象都会被放置在随机的起始位置。猎人的运动受其染色体控制,大象的运动是随机的。
所有的 Hunters 都有相同的染色体(同质),所以我每次在为染色体分配适应度时都运行这个模拟。我的适应度函数只是根据模拟中捕获的大象总数奖励染色体:
世代适应度的结果基本是随机的。每一代中最适合的个体不会随着代的发展而变得更适合,并且每一代的总适应度不会增加。我觉得我的适应度函数太原始了,但我不知道如何改变它以产生更好的结果。猎人似乎没有学到任何东西。
关于我的 GA 的详细信息(范围内的数字,因为我尝试了各种值):
人口规模:64 或 128。
世代上限:500 - 1000。
精英主义:5% - 10% 的人口
突变:1% - 4%
染色体大小:180
选择:轮盘赌。
交叉:染色体中间的简单交叉。
染色体是根据传感器数据设计成运动规则的“块”:
每个块都有一个传感器标准(例如“如果最近的大象距离 X 距离”)和一个移动规则(例如“向最近的大象移动 Y 时间”)。猎人可以移动到最近的大象或最近的队友猎人。
有没有人有什么建议可以让猎人的适应度随着世代的增加而逐渐增加?
java - Java 模拟退火接受概率
我有一个实现模拟退火的程序。我对接受概率有疑问,可能是因为我不明白为什么将欧拉数提高到(能量 - 能量)的幂是有用的。
即使温度非常低,概率也始终超过 1.0 (100%),这使得这有效地成为随机搜索。如何将我的接受概率固定为 sA 的正常率(开始时接受较差解决方案的可能性很高,接近尾声的可能性很低)?
下面是方法代码:
这是几次输出:
python - 进化算法没有改进
周末我尝试构建一个神经网络,它使用进化算法进行了改进。我在 openai( https://www.openai.com/ )的 Cartpole 环境中运行了 5000 代,但它并没有得到很好的改进。神经网络有 4 个输入,1 个带有 3 个单元的隐藏层,1 个输出,网络使用 tanH 作为激活函数。每一代有100个个体,其中5个被选为下一代,有20%的变异几率。这是更好理解的代码:
如果有人想知道,几代人的平均适应度图(这次我只运行了 100 代)
如果还有任何问题,请问。
python - 从元启发式算法转换适应度函数 [LOA]
Lion 优化算法 (LOA)是 Maziar Yazdani 和 Fariborz Jolai 新提出的元启发式算法。
我在翻译 python3 中的适应度函数时遇到问题,因为我不知道我是否需要导入 numpy 或 scipy 库或在没有此类导入的情况下手动对其进行编码。
这是我无法理解的功能:
狮子的适应度值 = f(Lion) = f( x 1 ,x 2 ,x 3 ,...,x N Var )
我想知道是否需要将其视为一个函数或一行代码。任何能引导我产生想法的帮助都将不胜感激!谢谢你。
swift - 对于零和游戏的 AI,什么是好的适应度函数?
我正在为零和 4 人棋盘游戏制作 AI。这其实不是零和游戏(4个玩家失去所有生命都会“死”,所以会有一个玩家先死,第二个,第三个玩家活下来。但是,我告诉AI只有活下来算赢,其他都是输)经过一些研究,我想我会结合使用一个极小极大算法和一个启发式函数。我遇到了这个问题,并决定和那个问题的 OP 一样——写一个进化算法,给我最好的权重。
但是,我的启发式函数与该问题的 OP 所具有的不同。我的需要 9 个权重并且速度要慢很多,所以我不能让代理玩 1000 场比赛(花费太多时间)或用交叉方法繁殖它们(我如何用 9 个权重进行交叉?)。
所以我决定想出我自己的方法来确定健康和繁殖。而这个问题只是关于适应度函数。
这是我的尝试。
第一次尝试
对于A
随机生成的 50 个智能体群体中的每个智能体,从种群中再选择 3 个智能体(有替换但与其A
自身不同的智能体),让 4 个智能体玩A
第一个玩家的游戏。选择另一个 3 并玩A
第二个玩家的游戏,依此类推。对于这 4 场比赛中的每场比赛,如果A
先死,其适应度不会改变。如果A
第二次死亡,它的适应度增加 1。如果它第三次死亡,它的适应度增加 2。如果它幸存,它的适应度增加 3。因此,我得出结论,一个人可以获得的最高适应度是 12(幸存/赢得所有 4 场比赛 -> 3 + 3 + 3 + 3)。
我运行了 7 代,从第一代开始,最高适应度高达 10。我计算了前 10 名智能体的平均适应度,但在 7 代中平均值没有增加一点。它甚至减少了一点。
我认为这不起作用的原因是因为一定有一些经纪人很幸运,并且有一些表现不佳的经纪人作为它的对手。
第二次尝试
游戏设置与我的第一次尝试相同,但我没有测量每场游戏的结果,而是决定测量该代理在死亡前做了多少步。
在 7 代之后,前 10 名的平均适应度确实有所提高,但仍没有像我认为的那样增加。
我认为失败的原因是游戏是有限的,所以在你死之前你可以做的动作是有限的,而表现最好的特工几乎达到了这个极限。没有成长空间。另一个原因是,幸存的球员和第三名死去的球员的适应度差别不大。
我想要的是
根据我对 EA 的理解(如果我错了,请纠正我),平均适应度应该会增加,而表现最好的个人的适应度不应该随着时间的推移而下降。
我的两次尝试都失败了。由于对手是随机选择的,第一代中表现最好的智能体可能会在下一代中获得更强的对手,因此其适应度下降。
笔记
在我的尝试中,agent 每一代玩 200 场比赛,每一代最多需要 3 个小时,所以我不想让他们玩太多的比赛。
我怎样才能写出这样的适应度函数?
genetic-algorithm - 遗传算法:我的健身功能会不会太复杂?
在遗传算法上,将适应度函数设为数学计算以外的东西是否正确?它可以有一个递归函数和一个循环吗?
问题是我正在评估我是否可以为我的论文使用遗传算法,而我正在考虑的这个适应度函数可能有点复杂。但也许不是,我只需要确保程序可以处理这样的功能并且不会造成瓶颈,对吗?.
基本思路:
python - 在遗传算法中生成适合度比例选择(轮盘赌)的概率列表
首先,如果我的方法过于愚蠢或过于简单,我深表歉意,我是一名非常努力进入编程领域的经济学家,因此我缺乏一些特定的技能。无论如何,我有以下代码:
人口的逻辑是[[[individual1],[fitness][counter]],[individual3],[fitness][counter]], and so on...
计数器只是一个数字,所以我可以订购个人。
所以在这种情况下我需要的是根据总适应度创建一个选择概率列表。我还需要在基本适应度上加 1,因为将来该值可能为零,我不能使用确定性选择方法(也就是说,没有个人可以有 0 概率)
有人知道像这样处理它的正确方法吗?