【发布时间】:2012-03-27 04:51:09
【问题描述】:
我正在编写遗传算法来解决数独难题,并希望得到一些意见。该算法偶尔会解决谜题(大约 10 次中的 10 次在同一个谜题上,最多迭代 1,000,000 次),我试图获得一些关于突变率、重新填充和拼接的输入。非常感谢任何输入,因为这对我来说是全新的,我觉得我做的事情并不是 100% 正确的。
算法概览
健身功能
计算每个列、行和 3*3 子框中数字 1 到 9 的唯一值的数量。子集中的这些唯一值中的每一个都被求和并除以 9,从而产生介于 0 和 1 之间的浮点值。这些值的总和除以 27 提供介于 0 和 1 之间的总适应度值。1 表示已解决的难题。
人口规模: 100
选择:
轮盘赌法。每个节点都是随机选择的,其中包含较高适应度值的节点有更好的选择机会
复制: 两个随机选择的染色体/板交换随机选择的子集(行、列或 3*3 子集)子集(行、列或框)的选择是随机的。将生成的板引入人口中。
繁殖率:每个周期 12% 的种群 每次迭代有六次复制,导致每个算法循环有 12 条新染色体。
突变:在 10 次迭代后最高适应度没有改善,突变发生率为 2%。 下面列出了三种变异方法,它们具有不同的选择概率权重。
1:交换随机选择的数字。该方法选择两个随机数并在整个棋盘上交换它们。这种方法似乎对算法增长模式早期的增长影响最大。 25% 的机会被选中
2:引入随机变化:随机选择两个单元格并改变它们的值。这种方法似乎有助于防止算法收敛。 %65 的选择机会
3:统计棋盘中每个值的个数。一个已解决的棋盘包含 1 到 9 之间的每个数字的 9 个计数。此方法采用出现少于 9 次的任何数字,并随机将其与出现超过 9 次的数字交换。这似乎对算法有积极的影响,但只是很少使用。 %10 的选择机会
我的主要问题是我应该以什么速率应用突变方法。似乎随着我增加突变,我有更快的初始结果。然而,随着结果接近正确结果,我认为更高的变化率将太多的坏染色体和基因引入人群。然而,随着较低的变化率,算法似乎收敛得太早。
最后一个问题是是否有更好的变异方法。
【问题讨论】:
-
我假设某些值是固定的并且不受突变的影响?另一种提问方式:这个问题是为了生成数独谜题还是为了解决具有固定约束的特定谜题而设计的?
-
它旨在解决难题,是的,我保护了初始单元格。感谢您的输入
标签: artificial-intelligence genetic-algorithm