问题标签 [crossover]
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.
optimization - 当使用 GA 来获得一个变量函数的最小值时,交叉的正确方法是什么,比如 sin(x)^2
我将区间 [x:y] 编码为像10101111这样的二进制代码,所以对于人口来说,它就像[[1,0,1,1],[0,1,0,1]]
.
我直接使用函数 ( sin(x)^2
) 的值定义了适应度函数。
对于选择,我使用锦标赛选择和交叉,仅像这样简单交换染色体的一部分:1(10)0
and 0(01)1
-> 1(01)0
and 0(10)1
。
对于突变,使用位反转。
这种算法很有效,它有时可以生成全局最小值,有时也可以生成局部最小值。但我在这个问题中没有看到交叉的功能,因为'x'的特性每次都被破坏(我认为),我不知道为什么,如果它是编码交叉的正确方法或者可能是编码部分。
python-2.6 - 多父部分映射交叉(MPPMX) - 伪代码无限循环?
7:我们创建一个带有布尔值的数组(显然,这在论文中没有解释)。我们将当前值 (value = index) 赋值为“true”
18:此时,我们可以有一个数组,其中所有值都可以为“真”并达到 k = len(parents) 的条件 19-22:这将创建一个无限循环
我错过了什么吗?
论文:组合优化问题的部分映射交叉的多父扩展。Chuan-Kang Tinga, , , Chien-Hao Sub, , Chung-Nan Leeb,
http://www.sciencedirect.com/science/article/pii/S0957417409006800
//编辑:这是我的代码 Python-2.6
matrix - 置换矩阵的交叉算法
我正在开发一种遗传算法来找到点之间的最佳连接(最小化距离)。假设我们有两个点列表:
我决定将基因组表示为二维二进制数组,其中:
- 行代表源点
- 列代表目标点
- 1s代表源和目标之间的连接
这种表示意味着矩阵中的每一列和每一行最多可以有一个 1。
现在我正在努力寻找一个可以保持解决方案完整性的交叉运算符。
例子:
父母1:
父母2:
后代:???
有什么建议么?
algorithm - 遗传算法:如何对独特元素的有序集合进行交叉?
这个问题建立在另一个问题之上。
我们如何有效地对由唯一元素的有序集合形成的染色体进行交叉操作?
两个这样的亲本染色体将是{'a','b','c','d'}
和{'e','f','a','b'}
; 并且这些父母的两个可能的子染色体是{'e','f','c','d'}
和{'a','f','c','b'}
。
search - 使用遗传算法搜索 3D 位置
我有一个问题,我想根据一些适应度函数使用遗传算法搜索 3D 空间中的最佳位置。因为我正在寻找一个位置,所以我的染色体由 3 个浮点数表示。目前,交叉是通过从一个父级获取 1 或 2 个数字并从另一个父级获取剩余的数字来完成的。
当像这样交叉时,下一代将仅包含与起始种群中的染色体具有相似 X、Y 或 Z 坐标的位置。因此,不可能有太大的变化。我的问题是,是否最好通过对我的染色体使用另一种表示(例如位)来解决这个问题,以便可能有更多的交叉点(也在浮点数内),或者是将突变率设置得更高并让突变添加的更好解决方案下一代的变化更多?
c++ - 了解向量类和比赛选择
我希望能够将一个人的“整体”价值与另一个人进行比较。我不确定我是否正确存储它们,也不知道如何正确比较它们。我不知道如何访问任何一个人的“整体”价值观,这是我认为最困扰我的。
头文件
人口.cpp
主文件
我希望能够比较人,将“获胜者”存储到“幸存者”向量中,然后继续使用“幸存者”向量通过 X 代的交叉和变异来创建新种群。
encoding - 在遗传算法中使用值编码方法时如何交叉父母?
在遗传算法中有一个阶段,我们应该选择将染色体从父母传给后代。
通过二进制形式很容易做到。
但是,如果我们使用值编码对染色体进行编码,该怎么办?
假设我的染色体中的一位是 DOUBLE 类型的值,比如说 0.99,它的范围是(0-1),因为它代表一个概率。
如何交叉这个 DOUBLE 数字?
转换为二进制以交叉然后转换回......?
c++ - 遗传算法中的交叉
我得到错误的部分(更具体地说,我得到一个弹出窗口说 Debug error!Abort () 已被调用)是我尝试进行交叉的部分。
它足以显示“测试 0”或“测试 1”,但它实际上不会将来自父亲/母亲的基因分配给 new_individual。
我已经尝试改变将旧基因分配给新个体的线路,但无论我尝试什么,我都无法让它发挥作用。
如果有人能告诉我我在哪里(或如何)搞砸了,我会非常感激:)
编辑:通过调试器,我得到以下信息
http://prnt.sc/b0iprq 未处理的异常在 .... 在 LearnCPP.exe:Microsoft C++ 异常:std::out_of_range 在内存位置.....
另一个编辑:为了清楚起见,正是发生中止的这一行:
algorithm - 遗传算法中的交叉概率
遗传算法中的交叉概率有什么意义?
遗传算法的一般过程是:(来源)
首先生成一个初始种群。然后使用一种选择方法(在本例中为锦标赛选择)来选择一对将创建一对孩子的个体。
孩子们被添加到孩子们的人口中,直到其大小达到所需的值。
下一步是合并大小为 N 的父母群体和大小为 M 的子群体,或者通过一个替换另一个,保留两个群体中最好的 N 个个体。
当然,我们可能希望以给定的概率执行突变,例如每 100 个孩子中就有 1 个会发生突变。
但我没有看到交叉率的意义。当一对父母在锦标赛选择中被选中并且没有发生交叉时会发生什么?是否应该将父母添加到儿童群体中?在这种情况下,我们最终会在父母和子女人口中出现重复的成员。
这里的目标是在每一代中创造尽可能多的孩子,并且必须通过交叉来实现。如何更改此算法以使交叉率有意义?
如果交叉概率为 100%,则所有后代都是通过交叉产生的。如果为 0%,则整个新一代是由来自旧种群的染色体的精确副本制成的(但这并不意味着新一代是相同的!)。 资源
如果交叉概率为 0%,则整个世代都是由来自旧种群的染色体的精确副本组成的。那么新一代怎么不一样呢?
genetic - 遗传算法排序,交叉重复数据
我的问题是如何进行交叉并避免重复?
考虑一下p1 = {1, 2, 5, 6, 3, 4}
,p2 = {2, 6, 5, 4, 1, 3}
其中一个交叉是res = {1, 2, 5 , 6, 1 ,3}
如您所见,存在重复...
我们可以避免吗?
这是我的代码