24小时热门版块排行榜    

查看: 2299  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] NSFC申报书里申请人简历中代表性论著还需要在申报书最后的附件里面再上传一遍吗 20+5 NSFC2026我来了 2026-03-10 14/700 2026-03-15 23:53 by 不负韶华的虎
[考研] 材料与化工一志愿南昌大学327求调剂推荐 +5 Ncdx123456 2026-03-13 6/300 2026-03-15 23:39 by lovewei0727
[考研] 326求调剂 +3 上岸的小葡 2026-03-15 4/200 2026-03-15 18:50 by 无际的草原
[考研] 一志愿985,本科211,0817化学工程与技术319求调剂 +3 Liwangman 2026-03-15 3/150 2026-03-15 18:16 by JourneyLucky
[考研] 0703化学调剂 290分有科研经历,论文在投 +3 腻腻gk 2026-03-14 3/150 2026-03-15 17:28 by 小物理化学
[考研] 267一志愿南京工业大学0817化工求调剂 +5 SUICHILD 2026-03-12 5/250 2026-03-14 14:53 by jean5056
[考研] 一志愿北京化工大学材料与化工296分求调剂 +16 稻妻小编 2026-03-09 18/900 2026-03-14 02:00 by JourneyLucky
[考研] 085600求调剂 +3 a邵星池 2026-03-09 3/150 2026-03-14 01:32 by JourneyLucky
[考研] 0856材料与化工309分求调剂 +6 ZyZy…… 2026-03-10 6/300 2026-03-14 00:38 by JourneyLucky
[考研] 337一志愿华南理工0805材料求调剂 +7 mysdl 2026-03-11 9/450 2026-03-13 22:43 by JourneyLucky
[考研] 一志愿中科院,化学方向,295求调剂 +4 一氧二氮 2026-03-11 4/200 2026-03-13 22:35 by JourneyLucky
[考研] 290求调剂 +9 ADT 2026-03-11 9/450 2026-03-13 21:55 by JourneyLucky
[考研] 四川大学085601材料工程专硕 初试294求调剂 +4 祝我们好在冬天 2026-03-11 4/200 2026-03-13 21:39 by peike
[考研] 310求调剂 +3 【上上签】 2026-03-11 3/150 2026-03-13 16:16 by JourneyLucky
[考研] 材料专硕350 求调剂 +4 王金科 2026-03-12 4/200 2026-03-13 16:02 by ruiyingmiao
[考研] 土木第一志愿276求调剂,科研和技能十分丰富,求新兴方向的导师收留 +3 土木小天才 2026-03-12 3/150 2026-03-13 15:01 by JourneyLucky
[考研] 285求调剂 +4 ytter 2026-03-12 4/200 2026-03-13 14:48 by jxchenghu
[考研] 085600材料与化工 309分请求调剂 +7 dtdxzxx 2026-03-12 8/400 2026-03-13 14:43 by jxchenghu
[考研] 化工学硕306求调剂 +9 42838695 2026-03-12 9/450 2026-03-13 10:16 by houyaoxu
[考研] 0857 资源与环境 285分 +6 未名考生 2026-03-09 6/300 2026-03-11 21:08 by 30660438
信息提示
请填处理意见