24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 2319  |  回复: 5

s20090281

银虫 (小有名气)

[求助] 关于遗传算法中交叉的程序

% Crossover two chromosome
    IndexPair = zeros( 1, PopulationSize);
    for j = 1 : PopulationSize
       IndexPair( j ) = j;
    end % End of for - j      
    for j = 1 : PopulationSize
       Point = floor ( (PopulationSize - j - 1)  *  rand( 1 ) );
       Temp = IndexPair( j );
       IndexPair( j ) = IndexPair( j + Point );
       IndexPair( j + Point ) = Temp;
    end % End of for - j      
      这段程序看不太懂,请高手指点。我先说我的想法吧,首先是Indexpair初始化为1行80列的矩阵,然后进行循环 , Indexpair就变为1-80的1行80列的矩阵,再然后就是确定point点,再接下来就不懂了,我运行了下程序发现Temp就变为了一个个不相邻的数,这里是为什么呢?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mengxc

木虫 (著名写手)

【答案】应助回帖


s20090281(金币+1): 2011-06-08 08:45:59
臭水沟(金币+1): 谢谢应助~ 2011-06-08 15:58:25
for j = 1 : PopulationSize
       IndexPair( j ) = j;
    end % End of for - j
执行完后,IndexPair的值就是1到PopulationSize
2楼2011-06-08 08:37:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

s20090281

银虫 (小有名气)

引用回帖:
Originally posted by mengxc at 2011-06-08 08:37:17:
for j = 1 : PopulationSize
       IndexPair( j ) = j;
    end % End of for - j
执行完后,IndexPair的值就是1到PopulationSize

关键是接下来那段是什么意思呢?
3楼2011-06-08 08:45:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mengxc

木虫 (著名写手)

【答案】应助回帖


臭水沟(金币+1): 谢谢应助~ 2011-06-08 15:58:37
引用回帖:
Originally posted by s20090281 at 2011-06-08 08:45:40:
关键是接下来那段是什么意思呢?

Point = floor ( (PopulationSize - j - 1)  *  rand( 1 ) );
rand(1)是生成0-1之间的一个随机数,floor是向下去整;
  Temp = IndexPair( j );   记录下第j个元素的值
       IndexPair( j ) = IndexPair( j + Point );   利用j + Point 元素修改j元素
       IndexPair( j + Point ) = Temp;      将temp赋给j + Point

上面三行相当于是j + Point 和j元素交换位置
4楼2011-06-08 08:55:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

s20090281

银虫 (小有名气)

引用回帖:
Originally posted by mengxc at 2011-06-08 08:55:24:
Point = floor ( (PopulationSize - j - 1)  *  rand( 1 ) );
rand(1)是生成0-1之间的一个随机数,floor是向下去整;
  Temp = IndexPair( j );   记录下第j个元素的值
       IndexPair( j ) = IndexPai ...

可是我还是不太明白这是什么意思,交换以后有什么用呢?它完了之后就是这段程序,这段程序不就是相邻的两个交叉吗?
for j = 1 : 2 : ( PopulationSize - 1 )
        RandP = rand( 1 );
        if RandP < ProCro            
            Point = floor ( rand( 1 ) *  ChromosomeLen ) ;
            if Point == 0
                Point = 1
            end
            for k = Point : (ChromosomeLen + Point - 1)
                Temp = Population ( IndexPair( j ) ) . Chromosome( k );
                Population ( IndexPair( j ) ) . Chromosome( k )  = Population ( IndexPair( j + 1) ) . Chromosome( k );
                Population ( IndexPair( j + 1) ) . Chromosome( k )  = Temp;
            end % End of for - k
        end % End of if
    end % End of for - j
IndexPair =

  Columns 1 through 12

    12    69    45    61    64    75    49     7    15    53    76    34

  Columns 13 through 24

    55    33     2    72    71    57    38    41     8    18    25    58

  Columns 25 through 36

     5    29    11    54    14    35    27     6    70    44    39    74

  Columns 37 through 48

    42    43    66    36    65    21    16     1    78    26    46    22

  Columns 49 through 60

    13    51    47    28    30    63    67    40    56    52    19    31

  Columns 61 through 72

    48    73    62     4     9    77    37    17    10    32    60    20

  Columns 73 through 80

    24    50    68     3    59    23    79    80
结果是这样的好多步,你能不能再帮我解释解释,本人愚笨,谢谢
5楼2011-06-08 15:26:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mengxc

木虫 (著名写手)

【答案】应助回帖


臭水沟(金币+1): 谢谢应助~~ 2011-06-08 15:58:59
s20090281(金币+4): 都送你分吧,谢谢你回答我的问题 2011-06-08 19:39:15
引用回帖:
Originally posted by s20090281 at 2011-06-08 15:26:50:
可是我还是不太明白这是什么意思,交换以后有什么用呢?它完了之后就是这段程序,这段程序不就是相邻的两个交叉吗?
for j = 1 : 2 : ( PopulationSize - 1 )
        RandP = rand( 1 );
        if RandP ...

这一段貌似和上一段差不多也是两个元素交换位置
对于遗传算法中交叉,我没学过,不懂,反正就是根据一定准则把原来的数组重新排列,具体干嘛用,好事查一下遗传算法的原理吧,呵呵
6楼2011-06-08 15:42:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 s20090281 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 070300化学学硕311分求调剂 +9 梁富贵险中求 2026-04-04 11/550 2026-04-05 08:17 by melodiousnow
[考研] 材料专硕306英一数二 +8 z1z2z3879 2026-03-31 8/400 2026-04-04 22:08 by hemengdong
[考研] 一志愿武理材料工程302调剂环化或化工 +19 Doleres 2026-03-31 20/1000 2026-04-04 16:44 by 啊俊!
[考研] 322求调剂 +6 FZAC123 2026-04-03 6/300 2026-04-03 22:23 by 科研小专家
[考研] 293求调剂 +5 末未mm 2026-04-02 6/300 2026-04-03 15:20 by 王保杰33
[基金申请] esi高被引论文是不是能对中标有所加分和帮助呢 +5 redcom 2026-04-01 6/300 2026-04-03 15:15 by Howard28
[考研] 生物学硕341求调剂 +4 你笑起来像云朵 2026-04-03 4/200 2026-04-03 10:32 by macy2011
[考研] 085801 总分275 本科新能源 求调剂 +19 bradoner 2026-04-01 23/1150 2026-04-03 10:07 by linyelide
[考研] 专硕 351 086100 也是考的材科基 本科也是材料 +8 202451007219 2026-04-02 8/400 2026-04-03 09:50 by 蓝云思雨
[考研] 材料调剂 +4 一样YWY 2026-04-03 4/200 2026-04-03 09:48 by 蓝云思雨
[考研] 296求调剂 +4 sdhu 2026-04-02 4/200 2026-04-02 21:29 by baoball
[考研] 08生物与医药专硕初试346找调剂 +6 dianeeee 2026-04-01 7/350 2026-04-02 08:23 by guoweigw
[考研] 材料调剂 +11 一样YWY 2026-03-31 11/550 2026-04-01 22:25 by zhouyuwinner
[考研] 食品学硕362求调剂 +3 xuanxianxian 2026-04-01 3/150 2026-04-01 21:05 by 啊李999
[考研] 290求调剂 +5 dfffsar 2026-03-29 5/250 2026-04-01 19:45 by 6781022
[考研] 一志愿北京科技大学085601材料工程英一数二初试总分335求调剂 +5 双马尾痞老板2 2026-03-31 5/250 2026-04-01 09:04 by oooqiao
[考研] 【调剂】一志愿厦大生物与医药调剂 +3 Echo虾米 2026-03-31 3/150 2026-04-01 08:40 by JourneyLucky
[考研] 335求调剂 +3 321* 2026-03-31 4/200 2026-04-01 00:00 by 321*
[考研] 085601英二数二求调剂 总分325 +4 余航航 2026-03-31 4/200 2026-03-31 17:38 by 唐沐儿
[基金申请] 面上5B能上会吗? +8 redcom 2026-03-29 8/400 2026-03-31 15:53 by niuailing
信息提示
请填处理意见