【问题标题】:Performance impacts of different ways to perform genetic operations on the genome of a multivariable genetic algorithm对多变量遗传算法的基因组执行遗传操作的不同方法对性能的影响
【发布时间】:2015-06-17 14:24:25
【问题描述】:

我在研究中经常使用遗传算法,并且遇到了一个有趣的问题,即如何最好地对基因组执行遗传操作。假设您有一个由 f(x,y) = ax^n + bx^n-1 + ... + cy^m + d 定义的函数y^m-1 ... 等等。它只是一个多变量函数,计算起来有些昂贵,因此您要尽可能地提高遗传操作的效率。

如果您使用的是基因组的二进制表示,我发现有 2 种合理的方法可以执行遗传操作。让我们只看交叉阶段。

这是 Matlab 中矢量化锦标赛选择的代码(用于变量名称的上下文)

%% Tournament Selection
T = round(rand(2*popSize,S)*(popSize-1)+1);     % Tournaments
[~,idx] = max(F(T),[],2);                       % Index of Winners
W = T(sub2ind(size(T),(1:2*popSize)',idx));     % Winners

因此,您有 2 个不同的变量正在优化,我的问题是您是否要拆分遗传操作,以便将交叉分别应用于每个变量,然后将数组重新连接在一起,看起来像这样两点交叉:

%% 2 Point Crossover

Pop2 = Pop(W(1:2:end),:);                   % Set Pop2 = Pop Winners 1
P2A  = Pop(W(2:2:end),:);                   % Assemble Pop2 Winners 2

% Split Pop2 for x and y genomes
xPop2 = Pop2(:,1:genome/2);
yPop2 = Pop2(:,genome/2 + 1:end);

% Split P2A for x and y genomes
xP2A = P2A(:,1:genome/2);
yP2A = P2A(:,genome/2+2:end);

% For x genome
Ref  = ones(popSize,1)*(1:genome/2);                     % Reference Matrix
CP   = sort(round(rand(popSize,2)*(genome/2-1)+1),2);    % Crossover Points
xidx  = CP(:,1)*ones(1,genome/2)<Ref & CP(:,2)*ones(1,genome/2)>Ref;   % Logical Index
xPop2(xidx) = xP2A(xidx);                       % Recombine Winners


% For y genome
Ref  = ones(popSize,1)*(1:genome/2);                     % Reference Matrix
CP   = sort(round(rand(popSize,2)*(genome/2-1)+1),2);    % Crossover Points
yidx  = CP(:,1)*ones(1,genome/2)<Ref & CP(:,2)*ones(1,genome/2)>Ref;   % Logical Index
yPop2(yidx) = yP2A(yidx);                       % Recombine Winners

Pop2 = horzcat(xPop2,yPop2);
P2A = horzcat(xP2A,yP2A);

或者你是否将基因组视为一个单一的交叉操作,只执行 2 点交叉,就好像它只是一个单一的可变基因组,像这样:

Pop2 = Pop(W(1:2:end),:); % New Pop is Winners of old Pop
P2A = Pop(W(2:2:end),:); % Assemble Pop2 Winners 2
Ref = ones(popSize,1)*(1:genome); % Ones Matrix
CP = sort(round(rand(popSize,2)*(genome-1)+1),2); % Crossover Points
idx = CP(:,1)*ones(1,genome)<Ref&CP(:,2)*ones(1,genome)>Ref; % Index
Pop2(idx)=P2A(idx); % Recombine Winners

有没有人知道已经进行的任何研究表明两种不同的基因组表示方式的差异?我还没有找到任何关于它的发布,但这可能只是因为我不知道如何在谷歌中巧妙地表达我的问题。

谢谢

【问题讨论】:

  • 这个研究分支确实​​很有趣,当然,有标准的、经过验证的、简单的程序来解决、解决和分析这类问题。首先,我想知道:1.您的具体问题是什么?:解决或优化解决方案的框架? / 选择突变程序的方法?选择目标函数的方法? 2. 实际上,多项目标函数不是一个复杂的函数来解决 - 这是 C0,..,Cn 连续的:),或者您实际上是否需要将 GA 应用于非 C0,...Cn 函数,例如离散过程?
  • 3.您是否绑定到 GA 类方法?你能扩展到其他人吗? 4. 作为参考,您的问题工作侧重于哪个学科,IT、数学、工程?
  • 所以我的主要问题是如何在交叉阶段用二进制表示多变量函数。我已经介绍了两种不同的交叉技术,第一种只是简单地交叉整个基因组,第二种技术首先将基因组分割成各个变量并分别交叉每个变量。我很好奇是否有研究表明哪个更好?我猜想如果变量太多,您不想将它们分开,但是对于 2 个变量的情况,我的收敛速度会稍微快一点
  • 2.我给出的函数与我刚刚展示的多变量函数的问题完全无关。我实际处理的函数是非常计算积分的总和。 3. 我正在做的研究是基于遗传算法的使用,所以我不能使用其他方法来解决这个特定问题。 4. 我是一名物理和数学专业的学生,​​但该项目是针对国家天气中心(气象)的,现在我对 GA 本身进行研究,所以我想说这更像是一个一般性问题,而不是与任何特定学科相关的问题!

标签: matlab optimization genetic-algorithm evolutionary-algorithm genome


【解决方案1】:

我的主要评论如下:

  1. 突变阶段强烈取决于问题类型。

  2. 对于连续的、非线性的、动态的问题,例如您引用的天气气象物理问题,具有估计和预测过程,仍然是一个 GA 框架可以表现得非常好,如果陈述得当并且始终明确关注您与他一起追求的目标。一个离散的突变策略——比如提出的单一选择性交叉——会表现得很差,就像标准的非引导、随机、蛮力搜索一样。正如你所说,这确实是最天真的方法。性能和执行时间,将毫无疑问地表达这一事实。

  3. 明确问题是物理的——我假设太多了——因此,假设存在一个动态系统,可能具有一定数量的状态,无论是否有限,并且在变量,以及有或没有一些非线性度,这里的主要 GA 焦点应该涉及 贝叶斯估计器。在这种情况下,每个获胜者个人 - 或您希望应用的任何其他描述性词 - 都会有一个变异阶段,而不是基于参数的简单交换。这只是对 GA 的最简单、更容易、更有说服力的解释。在这种情况下解释 mutation 阶段的更好、更快、更有效的方法等于应用能够从这个动态非线性系统收集适当梯度的统计估计器,在每个阶段进行估计。在 贝叶斯 GA 框架下,粒子过滤器是准备良好的变异阶段的有趣替代方案。

  4. 您正在使用多个嵌套积分这一事实启发我认为您的问题是真正的动态问题。在这种情况下,通过更具统计性的贝叶斯框架来指导 GA 让我很有意义。请记住,贝叶斯方法在某些条件下也是稳健的。

  5. 如果问题显然是动态的,那么您应该面对事实,并考虑放弃 GA,并转向 非线性优化 技术。甚至,Parameter EstimationSystem Identification 方法甚至会表现得更好,如果问题可以适当地表示为参数搜索过程。

  6. 另外,如果您的问题以无法区分的方式离散 - 也就是说,如果您没有任何类型的 PDE 表达式,或者如果这些 PDE 对解决,或者如果显然没有任何涉及状态的物理过程-并且您的问题主要基于专家规则、数据库查找或处理大型数据系统,并且您已经丢弃-由于您认为相关的任何原因-没有动态模型从这些数据中,只有那时,我才会尝试将 GA 引导为一种蛮力方法,在更好的解决方案之间具有随机交叉阶段。根据每个变异阶段的概率估计,离散贝叶斯框架在这里甚至会很有用。

如果您有更多信息,我可以回答evolve....

祝你好运 hypfco

【讨论】:

  • 非常感谢您的详尽回答。设置问题的方式实际上我认为 GA 或其他类型的启发式算法(群体智能、模拟退火等)最适合该问题。我将研究实施贝叶斯遗传算法。直到现在我还没有听说过它们,但是在初步浏览了一些论文之后,这似乎是一种非常有趣的技术,我想尝试一下。你有什么有趣的论文展示了一个很好用的贝叶斯遗传算法吗?再次感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
相关资源
最近更新 更多