全球旧事资料 分类
utput交叉后的染色体
fori1sizepop
fMATLAB课程遗传算法实验报告及源代码
随机选择两个染色体进行交叉pickra
d12whileprodpick0
pickra
d12e
di
dexceilpicksizepop交叉概率决定是否进行交叉pickra
dwhilepick0
pickra
de
difpickpcross
co
ti
uee
dflag0whileflag0
随机选择交叉位置pickra
dwhilepick0
pickra
de
dposceilpicksumle
chrom随机选择进行交叉的位置,即选择第几个变量进行交叉,注意:两个染色体交叉的位置相同pickra
d交叉开始v1chromi
dex1posv2chromi
dex2poschromi
dex1pospickv21pickv1chromi
dex2pospickv11pickv2交叉结束flag1testle
chrombou
dchromi
dex1检验染色体1的可行性flag2testle
chrombou
dchromi
dex2检验染色体2的可行性ifflag1flag20
flag0elseflag1e
d如果两个染色体不是都可行,则重新交叉e
de
dretchrom
程序7:目标函数
fMATLAB课程遗传算法实验报告及源代码
子程序:目标函数,函数名称存储为fu
mfu
ctio
yfu
x
yx12x22x32

异常情况记录:
在运用matlab编写程序进行运算时,遇到了一些问题,如下:(1)经常出现警告提示:War
i
gIg
ori
gextralege
de
triesI
lege
dat294
I
mai
at72I
ru
at57
(2)由于本实验包括7个程序,每个程序当中都有许多的变量名。由于程序中有些变量的
名字特别长,因此在引用时总会因为输出其中某一个字母而在运行时出错。这当然可以通过
修改得以更正,不过也提醒我以后在对变量名进行命名时不要使用过长的变量名。
(3)本实验在编写过程中遇到的最大一个问题是,在编写完程序,进行运算时,matlab很久都没有反应,然后在下方的窗口中一直显示“busy”。刚开始我以为是由于遗传代数过多、染色体长度太长导致运行时间过久。于是我等了一会,可是过了很久结果还是没有运行出来。我强制关掉程序,仔细的检查了代码,并没有发现错误,可再次运行时还是出现同样的问题,运算不出结果。最后我设置了一些断点,也就是去掉一些分号,让中间结果输出到命令窗口。运行后发现命令窗口中一直在不停的输出中间结果。按“Ctrlc”暂停之后,我知道程序中可能出现了死循环。于是在有循环的语句中去找错误,结果发现主程序中的cou
tercou
ter1这一条语句没有写进去,致使循环无法结束。问题最终得以解决。由于粗
心我花了好大功夫去寻找错误,这是一个教训,也是一次收获,下次再遇到这种情况我不
会再犯类似的错误了。r
好听全球资料 返回顶部