- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个 GA 来解决以下难题...
二进制编码(我认为)非常有效。每件作品可以是:
这意味着每 block 的方向和位置都可以用 9 位进行编码,使得整个拼图总共有 117 位。
通过将每个 block 放入框架中,忽略框架外的任何部分,然后将空方 block 的数量相加来计算适合度。当这个值为零时,我们就有了解决方案。
我有一些在其他代码中使用过的标准 GA 方法(我将在下面粘贴),但我似乎无法让它收敛。适应度下降到大约 11(给予或接受),但似乎从未降低过。我尝试过修改参数,但无法得到更好的结果。
冒着发布太多代码的风险,我将展示我所拥有的内容(在看起来相关的地方)。如果有人能给我一些如何改进的想法,那就太好了。这些都是用 C# 编写的,但对于使用其他语言的人来说应该足够清楚了。
生成 1000 个染色体的初始种群(代码未显示,因为它只是生成长度为 117 的随机二进制字符串)后,我进入主循环,在每一代中,我调用 Breed 方法,传入当前种群并一些参数...
private static List<Chromosome> Breed(List<Chromosome> population, int crossoverGene,
double mutationProbability, double mutationRate) {
List<Chromosome> nextGeneration = new List<Chromosome>();
// Cross breed half of the population number
for (int nChromosome = 0; nChromosome < population.Count / 2; nChromosome++) {
Chromosome daddy = Roulette(population);
Chromosome mummy = Roulette(population);
string babyGenes = daddy.Genes.Substring(0, crossoverGene)
+ mummy.Genes.Substring(crossoverGene);
Chromosome baby = new Chromosome(babyGenes);
baby.Fitness = Fitness(baby);
nextGeneration.Add(baby);
}
// Mutate some chromosomes
int numberToMutate = (int)(P() * 100 * mutationProbability);
List<Chromosome> mutatedChromosomes = new List<Chromosome>();
for (int i = 0; i < numberToMutate; i++) {
Chromosome c = Roulette(population);
string mutatedGenes = MutateGenes(c.Genes, mutationRate);
Chromosome mutatedChromosome = new Chromosome(mutatedGenes);
mutatedChromosome.Fitness = Fitness(mutatedChromosome);
mutatedChromosomes.Add(mutatedChromosome);
}
// Get the next generation from the fittest chromosomes
nextGeneration = nextGeneration
.Union(population)
.Union(mutatedChromosomes)
.OrderBy(p => p.Fitness)
.Take(population.Count)
.ToList();
return nextGeneration;
}
MutateGenes 只是根据传入的突变率随机翻转位。主循环将继续,直到我们达到最大代数,或者适应度降至零。我目前已经运行了 1000 代。
这是轮盘赌方法...
private static Chromosome Roulette(List<Chromosome> population) {
double totalFitness = population.Sum(c => 1 / c.Fitness);
double targetProbability = totalFitness * P();
double cumProbability = 0.0;
List<Chromosome> orderedPopulation = population.OrderBy(c => c.Fitness).ToList();
for (int i = 0; i < orderedPopulation.Count; i++) {
Chromosome c = orderedPopulation[i];
cumProbability += 1 / c.Fitness;
if (cumProbability > targetProbability) {
return c;
}
}
return orderedPopulation.Last();
}
不知道您是否需要查看其他代码。我对发布太多内容有点担心,以免让人们望而却步!
任何人都可以就如何改进此问题提出任何建议吗?
最佳答案
托多尔·巴拉巴诺夫的回答非常有趣。可能使用相对坐标和适当的打包函数是关键。
无论如何,我想尽可能地扩展你的想法。对于 Stackoverflow 来说,完整的讨论可能太长了......
考虑每 block 的完整坐标范围 ([0;7] x [0;7]
) 是过多的(并且对健身评估有些误导)。
第 (2) 点和第 (3) 点允许将搜索空间从 2^117
减少到 2^95
元素。
我已经在 GitHub wiki 中详细阐述了这些观点(这是一项正在进行的工作)。
关于genetic-algorithm - 如何让我的 GA 收敛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47858717/
有人有关于基因工程模拟的软件/教程的好来源吗?也许有关基因剪接/克隆模拟的开源软件? 谢谢 最佳答案 这可能正合你的胃口: Genetic Programming - Evolution of Mon
我在遗传算法中执行以下程序来选择锦标赛: choose k random individuals from population & select two best individuals among
如何选择符号回归的特征?我有 30 个特征,我只想使用最敏感的特征进行符号回归。 作为示例,可以使用与我的数据集类似的数据集。 https://scikit-learn.org/stable/modu
我希望有人能就这个话题对我有所了解。如果这被认为是一个愚蠢的问题,我很乐意立即删除这个问题。 我正在设计一个类(class)时间表系统,通过研究,我偶然发现了 GA 和约束编程作为解决我问题的方法。但
This question answers pseudocode for roulette wheel selection .但这是为了最大化问题。但我的问题是最小化适应度函数的值。也就是说,适应度低
我正在阅读一些有关遗传算法的论文,并且他们经常以非常相似的方式提及进化算法。根据维基百科,GA是EA的子集。但是,如果我们仔细观察,我们会发现它们都是基于自然选择(交叉,选择,变异)的元启发式优化算法
我想使用遗传算法基于扩展有限状态机(EFSM)生成测试序列。基于EFSM的测试面临着遗传算法在可行路径上的问题。我的覆盖标准是过渡覆盖。我有一个系统的 EFSM 模型,该模型具有输入参数并保护从一种状
我面临以下问题。 我有一个系统能够根据异常分数对某些操作进行排名。为了提高性能,我实现了一个遗传算法来执行特征选择,这样最异常的操作出现在第一个位置。我所做的并不是完全的特征选择,因为我没有使用二进制
我正在研究一个非常大规模的问题,我有一个启发式算法,除了表现非常好的遗传算法启发式算法之外,它还提供了一个相当好的解决方案。我想知道用启发式解决方案预先播种 GA 是否有任何 yield ,如果有的话
我对比赛选择的理解是: 对于给定的锦标赛规模t,从总体中随机选择t个人,并将该锦标赛的获胜者确定为具有最大适应度函数值的个人。 我的问题是: “二进制锦标赛选择”和“锦标赛选择”之间是否有区别,或者它
我目前正在写一篇关于遗传算法的论文。我想有一个关于终止条件的小部分,它决定了算法何时必须停止。 我发现了这个不错的网站: http://www.nd.com/genetic/termination.h
我正在实现一个稳态遗传算法来执行符号回归。 我的问题是关于变异和交叉算子之间的关系。 在应用变异和锦标赛选择以根据他们的错误选择 parent 之前,我总是咨询变异概率 (Pm)。 第一个问题: 突变
假设我有一个未知函数,我想通过遗传算法来近似它。对于这种情况,我假设它是 y = 2x。 我有一个由 5 个元素组成的 DNA,每个 x 一个 y,从 x = 0 到 x = 4,其中,经过大量试验和
我必须做一个关于遗传算法的学期项目,并且我有调整第一人称射击机器人的特征(即要使用的武器等)的想法。例如,我会以字符串的形式表示特征,前 10 位代表选择武器 1 的概率,接下来的 10 位代表选择武
我需要求解变量在很宽范围内变化的联立线性方程(5 个方程和 7 个未知数,即欠定问题)[0 - 1,00,000]。有人可以建议我应该使用什么健身功能吗? 最佳答案 我猜您指的是具有 7 个变量的 5
我正在用遗传算法在 81 个城市实现 TSPTW(带时间窗的旅行商),我应用了以下步骤: mutation prob=0.03 population size=100 -Generate random
我正在研究国际象棋引擎,并且正在使用基因表达编程方法来改进评估函数。 由于国际象棋没有神谕,我的适应度函数只能找到两个人的相对适应度(通过进行国际象棋比赛)。 因为我没有绝对的适应度测量,我可能会以循
我承担了使用遗传算法创建数独求解器的任务。 初始化 :将给定值存储在每个染色体中,然后随机生成值,使得每一行都是值 1 到 9 的有效排列。 健身 :由每行、列和方格中的“不合适”值的数量相加确定。
我阅读了有关此的各种内容并了解所涉及的原理和概念,但是,没有一篇论文提到如何计算涉及未直接连接的相邻城市(在染色体中)的染色体(代表一条路线)的适应度的细节通过一条边(在图中)。 例如,给定一条染色体
我是遗传算法的新手。我正在尝试预测规则出现的模式。例如,我有一组定义如下的规则。 规则 1,规则 2,规则 3,规则 4,规则 5,规则 6, 对于给定的日期,我只能使用规则 2、规则 3 和规则 6
我是一名优秀的程序员,十分优秀!