这一切都在标题中,但对于任何对进化算法感兴趣的人来说,这是一个细分:
在EA中,基本前提是你随机生成一定数量的生物(实际上只是参数集),针对问题运行它们,然后让最佳表现者生存.
然后,你将幸存者的杂交组合,幸存者的突变以及一定数量的新随机生物重新组合起来.
做了几千次,有效的生物出现了.
有些人也会做一些事情,比如引入多个生物群的"岛屿",这些生物群是一段时间允许杂交的单独种群.
所以,我的问题是:什么是最佳的再增殖百分比?
我一直保持前10%的表现,并重新种植30%的杂交和30%的突变.剩余的30%用于新生物.
我也尝试了多岛理论,我也对你的结果感兴趣.
对我来说,这绝不是EA可以解决的问题类型.你知道有人在尝试吗?
提前致谢!
computer-science artificial-intelligence genetic-programming genetic-algorithm evolutionary-algorithm
从事涉及遗传算法的任务(头痛负荷,有趣的负担).我需要能够测试不同的交叉方法和不同的基因突变的方法,来比较其结果(本文我必须写在课程的一部分).因此,我想将函数名称作为函数句柄传递给Repopulate方法.
function newpop = Repopulate(population, crossOverMethod, mutationMethod)
...
child = crossOverMethod(parent1, parent2, @mutationMethod);
...
function child = crossOverMethod(parent1, parent2, mutationMethod)
...
if (mutateThisChild == true)
child = mutationMethod(child);
end
...
Run Code Online (Sandbox Code Playgroud)
这里的关键点是3,参数3:如何将mutationMethod传递到另一个级别?如果我使用@符号,我会被告知:
"mutationMethod" was previously used as a variable,
conflicting with its use here as the name of a function or command.
Run Code Online (Sandbox Code Playgroud)
如果我不使用@符号,那么在没有参数的情况下调用mutationMethod,并且非常不满意.
虽然我知道是的,但我可以重写我的代码以使其工作方式不同,我现在很好奇如何让它实际工作.
任何帮助是极大的赞赏.
编辑:哇,很多很棒的回复.是的,我使用它作为一个适应度函数来判断遗传算法执行的排序质量.因此,评估成本很重要(即,必须快速,最好O(n).)
作为我正在使用的AI应用程序的一部分,我希望能够根据其单调性(也就是其"排序性")对整数的候选数组进行评级.目前,我正在使用一种计算最长排序运行的启发式算法,然后将其除以数组的长度:
public double monotonicity(int[] array) {
if (array.length == 0) return 1d;
int longestRun = longestSortedRun(array);
return (double) longestRun / (double) array.length;
}
public int longestSortedRun(int[] array) {
if (array.length == 0) return 0;
int longestRun = 1;
int currentRun = 1;
for (int i = 1; i < array.length; i++) {
if (array[i] >= array[i - 1]) {
currentRun++;
} else {
currentRun = 1;
}
if (currentRun > longestRun) longestRun = currentRun;
}
return …Run Code Online (Sandbox Code Playgroud) math artificial-intelligence information-theory genetic-algorithm
我在大学里做了一点GP(注意:很少)工作,最近一直在玩它.我的问题是关于初始运行设置(种群大小,世代数,树的最小/最大深度,初始树的最小/最大深度,用于不同复制操作的百分比等).设置这些参数的常规做法是什么?人们使用哪些论文/网站作为指导?
我希望在我参与的运营研究项目中添加一些遗传算法.目前我们有一个程序可以帮助优化一些调度,我们希望以遗传算法的形式添加一些启发式算法.在c ++中是否有用于通用遗传编程/算法的好库?或者你会建议我自己编码吗?
我应该补充一点,虽然我不熟悉c ++,但我在c ++中进行这种数学优化工作还是比较新的,因为我以前合作的小组倾向于使用专有的优化包.
我们有一个相当计算密集的适应度函数来评估,我们有一个集群来运行它,所以非常需要并行代码.
那么c ++是一个很好的语言吗?如果没有,请推荐一些其他的,因为我愿意学习另一种语言,如果它让生活更轻松.
谢谢!
昨天我开始探索遗传算法,当我最终得到一些基本理论时,我试图在Python上编写简单的GA,它解决了丢番图方程.我是Python和GA的新手,所以请不要严格判断我的代码.
由于早熟收敛,我不能得到任何结果(有一些无返回点(n-population),population [n] == population [n + i],其中i是任意整数.甚至随机变换元素也无法改变这个,这一代很快就退化了)
GA使用交叉来繁殖,并加权选择父母.
码:
# -*- coding: utf-8 -*-
from random import randint
from copy import deepcopy
from math import floor
import random
class Organism:
#initiate
def __init__(self, alleles, fitness, likelihood):
self.alleles = alleles
self.fitness = fitness
self.likelihood = likelihood
self.result = 0
def __unicode__(self):
return '%s [%s - %s]' % (self.alleles, self.fitness, self.likelihood)
class CDiophantine:
def __init__(self, coefficients, result):
self.coefficients = coefficients
self.result = …Run Code Online (Sandbox Code Playgroud) python artificial-intelligence genetic-programming genetic-algorithm
我手头有一个任务问题,我想知道应用本地搜索技术达到理想解决方案是多么合适(搜索空间非常大).
我有一个有向图(流程图),我想在二维平面上以一种非常清晰,易懂和易于人眼阅读的方式进行可视化.因此; 我将为每个顶点分配(x,y)位置.我正在考虑使用模拟退火,遗传算法或您建议的任何此类方法来解决此问题
输入:图形G =(V,E)
输出:一组赋值,{(xi, yi) for each vi in V}.换句话说,每个顶点将被分配一个位置(x,y),其中坐标都是整数,并且> = 0.
这些是我将用来判断解决方案的标准(我欢迎任何建议):
此外; 我有一个初始配置(位置到顶点的分配),手工制作.它非常混乱,这就是为什么我要尝试自动化这个过程.
我的问题是,
使用本地搜索技术是多么明智?它产生预期结果的可能性有多大?
我应该从什么开始?模拟退火,遗传算法还是其他什么?
我应该在开头随机播种还是使用初始配置开始?
或者,如果您已经知道类似的实现/伪代码/事物,请指出我.
任何帮助将不胜感激.谢谢.
编辑:它不需要很快 - 不是实时的.此外; | V | = ~200,每个顶点平均有大约1.5个输出边.该图表没有断开连接的组件.它涉及周期.
直觉上我认为如果我想找到"最佳"参数集,我可以简单地从一群孩子中选出表现最好的1个人,让那个人生成100个与自己相似的孩子,挑选最好的表演者并重复.具体目的是挑选最好的2和杂交?那么,为什么不选择3个,4个或10个父母("狂欢衍生的"受精卵)来创造每一代孩子呢?
genetic-programming genetic-algorithm evolutionary-algorithm
我需要开发一个课程时间表软件,可以有效地分配时间段和房间.这是一个基于课程的例程,而不是基于后期注册.并且有效地意味着课程根据工作人员的时间偏好分配时间段,并且还需要最小化第1年 - 第2年课程重叠,以便第2年学生可以重新学习他们未能通过的课程.(以及3至4年级的学生) .
现在,起初我认为这将是一个容易的问题,但现在看起来不同了.我看过的大多数论文都使用遗传算法/ PSO /模拟退火或这些类型的算法.我仍然无法将问题解释为GA问题.令我困惑的是为什么几乎没有人建议使用DFS或图形着色算法?
如果使用DFS/graph-coloring,有人可以解释这个场景吗?或者为什么不建议或尝试他们.
algorithm mathematical-optimization combinatorics genetic-algorithm evolutionary-algorithm
我正在尝试实现遗传算法以最大化n个变量的函数.然而问题是健身值可能是负的,我不确定如何在做选择时处理负值.我读过这篇文章遗传算法中的线性适应度缩放会产生负的适应度值, 但我不清楚如何处理负适应度值以及如何计算比例因子a和b.
另外,从文章中我知道轮盘赌选择仅适用于积极适应值.锦标赛选择也一样吗?