【问题标题】:Single point ordered crossover in matlabmatlab中的单点有序交叉
【发布时间】:2013-04-24 12:29:16
【问题描述】:

我需要在 matlab 中创建有序交叉。我的父母 P1 和 P2 如下:

P1=[1 2 3 4 ; 0 1 1 0],
P2=[3 2 1 4 ; 0 1 0 0].

前 1 [在位置 P1(2,2) 和 P2(2,2)] 是我的交叉点。现在我需要后代如下:

O1=[1 2 3 4 ; 0 1 0 0],
O2=[3 2 1 4 ; 0 1 0 0].

你能帮帮我吗?最好的,埃尔纳兹

【问题讨论】:

  • 我觉得这里有错误,我觉得O2应该是[3 2 1 4; 0 1 1 0] 也许?
  • @user2286747 你的交叉技术是什么?你能说明你的交叉点在哪里吗?
  • @Dan 不,它是正确的,O2 从 P2 (3 2 ; 0 1) 给出它的第一部分,从 P1 (3 4 ; 1 0) 给出它的最后一部分来考虑排列,因为 3 在第一部分,所以它应该检查哪个数字不存在来选择它。所以它应该选择 (1 4; 0 0)。
  • @EitanT 它是单点顺序交叉,当我们看到 P1 第二行的第一个数字 1 时,我们应该设置为交叉点。
  • @user2286747 那么如何确定交叉点呢?是预定义的,还是由每个父级的第二行第一个“1”的位置决定的?

标签: matlab genetic-algorithm


【解决方案1】:

要找到交叉点,请在父母的第二行使用逻辑 AND 运算符:

idx = find(P1(2, :) & P2(2, :));

然后我们通过在交叉点之后在父母之间切换值来创建后代:

O1 = [P1(:, 1:idx), P2(:, idx + 1:end)];
O2 = [P2(:, 1:idx), P1(:, idx + 1:end)];

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 2015-05-27
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    相关资源
    最近更新 更多