- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写解决数独谜题的遗传算法,希望得到一些帮助。该算法偶尔会解决难题(大约十分之一的 10 次是在最多 1,000,000 次迭代的同一个难题上),我正在尝试获得有关突变率、重新填充和剪接的一些信息。非常感谢任何意见,因为这对我来说是全新的,我觉得我做的事情不是 100% 正确。
算法的快速概述
健身功能
统计每列、每行和3*3的子框中数字1到9的唯一值的个数。子集中的每个唯一值相加并除以 9,得到一个介于 0 和 1 之间的 float 值。这些值的总和除以 27,提供介于 0 和 1 之间的总适应度值。1 表示已解决难题。
人口规模:100
选择:
轮盘赌法。每个节点都是随机选择的,其中包含更高适应度值的节点有更好的选择机会
复制:两个随机选择的染色体/板交换随机选择的子集(行、列或 3*3 子集)子集(行、列或框)的选择是随机的。将产生的板引入种群。
繁殖率:每个周期 12% 的人口每次迭代有 6 次复制,导致算法的每个循环产生 12 个新染色体。
突变:在最高适应度无改善的 10 次迭代后,突变发生率为 2%。下面列出了三种具有不同选择概率权重的变异方法。
1:交换随机选择的数字。该方法选择两个随机数并在整个棋盘上交换它们。这种方法似乎对算法增长模式早期的增长影响最大。 25% 的选择机会
2:引入随机变化:随机选择两个单元格并改变它们的值。这种方法似乎有助于防止算法收敛。 %65 的选择机会
3:统计棋盘上每个值的个数。已解决的棋盘包含 1 到 9 之间的每个数字 9 的计数。此方法采用出现次数少于 9 次的任何数字,并随机将其与出现次数多于 9 次的数字交换。这似乎对算法有积极影响,但只是很少使用。 %10 的选择机会
我的主要问题是我应该以什么速率应用变异方法。似乎随着我增加突变,我得到了更快的初始结果。然而,随着结果接近正确结果,我认为更高的变化率正在将太多坏染色体和基因引入种群。然而,由于变化率较低,算法似乎过早收敛。
最后一个问题是是否有更好的突变方法。
最佳答案
您可以随着时间的推移退火突变率以获得您所描述的那种收敛行为。但实际上我认为通过修改算法的其他部分可能会获得更大的 yield 。
轮盘选择通常会施加非常高的选择压力。在这个过程的早期,它往往会导致多样性的快速丧失。二元锦标赛选择通常是开始试验的更好地方。这是一种更渐进的压力形式,同样重要的是,它的控制要好得多。
使用不那么激进的选择机制,您可以负担得起产生更多的后代,因为您不必担心产生那么多最好的一两个个体的近乎复制品。而不是 12% 的人口产生后代(由于 parent 在交配池中重复,可能更少),我会选择 100%。您不一定需要从字面上确保每个 parent 都参与,但只需生成与 parent 数量相同的后代即可。
某种形式的温和精英主义可能会有所帮助,这样您就不会失去好 parent 。如果最好的 2-5 个个体比最差的 2-5 个后代更好,也许可以从父代种群中保留最好的 2-5 个个体。
有了精英主义,你可以使用更高一点的变异率。您的所有三个运算符(operator)似乎都很有用。 (请注意,#3 实际上是一种嵌入到遗传算法中的局部搜索形式。就性能而言,这通常是 巨大 的胜利。事实上,您可以将 #3 扩展为一种更复杂的方法,循环直到它想不出如何进行任何进一步的改进。)
对于您的三个变异运算符,我没有看到明显更好/更差的一组权重。我认为在这一点上,你已经坚定地处于实验参数调整的范围内。另一个想法是在这个过程中注入(inject)一些知识,例如,在这个过程的早期,你在它们之间随机选择。稍后,随着算法收敛,选择您认为更有可能帮助完成“几乎已解决”的棋盘的变异算子。
关于artificial-intelligence - 遗传算法数独——优化变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9639110/
我有一个包含配对数据的数据集(同一家庭的成员)。 身份证 是个人标识符和 户号是合作伙伴的标识符(反之亦然)。 我需要的是为每个 添加一个额外的列(职业)。 id 他\她的伴侣。 我的数据看起来像这样
mutate 能否根据跨变量应用的逻辑条件创建新变量? 更具体地说,请考虑以下数据。 set.seed(1234) val = 1) head(dat) a b c d anyABCD 1 0 0
我的 df 看起来像这样: df % mutate_at(vars(starts_with("paid")), list(prc = ~. / expenses)) # expenses mon
我的 df 看起来像这样: df % mutate_at(vars(starts_with("paid")), list(prc = ~. / expenses)) # expenses mon
我在这里为项目 Euler 问题 31 运行了这个简单的代码。 不需要 Euler Q;我只想知道,为什么我的列表值会发生变化,即这是打印 [2.0,2.0,2.0,2.0,2.0] 的许多列表的列表
我使用了排列和变异组合来根据分组进行添加。例如,我使用了以下内容: master_df % group_by(asof_dt) %>% mutate(tot_flag = sum(ls_fla
我在让 mutate、cross 和 case_when 正常运行时遇到了一些麻烦,我在这里重新创建了一个简单版本的问题: a 1 1 2 3 2 2
我有代表用户某种交易类型的不规则时间序列数据。每行数据都带有时间戳,表示当时的事务。由于数据的不规则性质,某些用户一天可能有100行,而其他用户一天可能有0或1个事务。 数据可能看起来像这样: dat
您如何恰本地解释为什么这两个示例不同? // Reassignment let a = 1; let b = a; a = 2; console.log(b); // → 1 // Mutation
基本上我想做的是发送一个字符串列表 ex: ["aa","bb","vv"] 到 graphql Mutation 字段中,目前这是我的 Mutation Schema "listTest": &gr
使用 dplyr 进行组均值居中的有效/首选方法是什么,即获取组中的每个元素(mutate)并对其执行操作和汇总统计信息(该组的总结)。以下是使用基本 R 以 mtcars 为中心的组均值: do.c
pcd % arrange(tripNo, procDate, delay) %>% group_by(tripNo) %>% mutate(delayErr = (row_number(
我想知道查询类型后面的字符串有什么意义,在这种情况下是“ProvisionQueues”,似乎从字符串中删除它不会影响任何东西——它只是用于日志记录还是什么。元数据? mutation Provisi
所以,我正在尝试设计我的 Apollo 服务器。我想用一个对象作为参数来创建一个突变。 这是我的架构的一个片段,它以某种方式导致了问题: 我认为它在语法上是正确的,但我遇到了这个错误: {"error
CREATE OR REPLACE TRIGGER UPDATE_TEST_280510 AFTER insert on TEST_TRNCOMPVISIT declare V_TRNCOMPNO N
我有以下带有查询和突变的组件,但我的组件没有收到数据和突变 prop。 我的代码是不是做错了什么或遗漏了什么?虽然查询确实得到执行,但它没有传递下去。 this.props.mutate 和 this
我用 Go 编写了一个客户端应用程序,它需要与服务器端的 C 程序进行交互。客户端执行 AES CFB 加密,服务器解密。不幸的是,服务器端存在重用初始化向量的错误。它尝试根据以下条件进行 3 次解密
我的前端是 localhost:3000 ,我的 GraphQL 服务器是 localhost:3333 . 我已经使用 react-apollo 在 JSX 领域中查询/变异,但还没有从 Expre
我试图改变通常情况下来自 kube-scheduler 的资源“绑定(bind)”。 以下是我的“ValidatingWebhookConfiguration”yaml: apiVersion: ad
如所述here , 这是一个 reference implementation用于 kubernetes e2e 测试的 webhook 服务器。在 main 函数中,定义了一些端点来处理不同的突变请
我是一名优秀的程序员,十分优秀!