全球旧事资料 分类
具体操作1)选择操作我们定义fxi)为第ii1,23。popsize个染色体的适应度,则每个个体被选中的概率
popsize
是:Pxifxi
fxj
j1
本题中具体使用的是期望值方法
初始化梯度概率fori0;i
umi){gradie
t[i0。0xua
zei]0。0
f}gradie
t0]group0]pfori1;i〈
um;i)gradie
t[i]gradie
ti1groupi]。psra
du
sig
ed)time(NULL);随机产生染色体的存活概率fori0i〈
um;i
xua
ze[i]ra
d()%100)xua
ze[i100选择能生存的染色体for(i0;i
umi)forj0j
um;j){
if(xua
zeigradie
t[j{
xua
[ij第i个位置存放第j个染色体break}
}拷贝种群for(i0;i
umi){
grouptempi]。adaptgroupi。adaptgrouptemp[i]。pgroupi]p;for(j0j〈cities;j)grouptempicityjgroup[i。cityj数据更新fori0i
umi)tempxua
[i];groupiadaptgrouptemptempadaptgroup[i]pgrouptemptemp。pforj0j〈citiesjgroup[icity[j]grouptemp[tempcity[j;
2)交叉操作:
交叉算子就是把两个父代个体的部分结构加以替换重组而生成新个体的操作。
部分匹配交叉、顺序交叉、改进的启发式顺序交叉
ftemp1号染色体和temp2染色体交配fori0;it2i){
poi
t1ra
d(%citiespoi
t2ra
d%cities;forjtemp1;j
umj)if(jiaopeiflagj]1)
temp1j;
break}for(jtemp11;j〈
um;jif(jiaopeiflagj1){
temp2j;break;
进行基因交配ifpoi
t1〉poi
t2保证poi
t1poi
t2{
temppoi
t1
poi
t1poi
t2poi
t2temp;
memset(map1,1,sizeof(map1)memset(map2,1sizeofmap2断点之间的基因产生映射forkpoi
t1;k〈poi
t2;k{
map1[grouptemp1]city[k]grouptemp2]。city[k;map2grouptemp2。city[k]grouptemp1。city[k];
断点两边的基因互换for(k0;k〈poi
t1k{
tempgroup[temp1citykgrouptemp1]。city[k]grouptemp2。cityk];group[temp2。city[ktemp
forkpoi
t21;k〈cities;k{
tempgroup[temp1]。cityk];group[temp1]。citykgrouptemp2]。cityk];group[temp2]。cityktemp;
f处理产生的冲突基因fork0kpoi
t1k)
for(kkpoi
t1kk〈poi
t2;kkifgroup[temp1cityk]grouptemp1。citykk]
group[temp1。citykmap1[grouptemp1city[k;break;}}for(kpoi
t21;kcities;kfor(kkpoi
t1kkpoi
t2;kk)if(group[temp1。city[k]grouptemp1]。citykk{grouptemp1city[kmap1grouptemp1cityk];breakfork0kpoi
t1;k{for(kkpoi
t1kkpoi
t2;kkifgroup[temp2。city[k]group[temp2city[kk{group[temp2citr
好听全球资料 返回顶部