• maybe2021
    了解作者
  • matlab
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2021-04-19 22:20
    上传日期
本代码是遗传算法的交叉操作,适合初学者学习代码。
cross.zip
  • cross
  • Cross.m
    1.8KB
内容介绍
function ret=Cross(pcross,lenchrom,chrom,sizepop) %本函数完成交叉操作 % pcorss input : 交叉概率 % lenchrom input : 染色体的长度 % chrom input : 染色体群 % sizepop input : 种群规模 % ret output : 交叉后的染色体 for i=1:sizepop %每一轮for循环中,可能会进行一次交叉操作,染色体是随机选择的,交叉位置也是随机选择的,%但该轮for循环中是否进行交叉操作则由交叉概率决定(continue控制) % 随机选择两个染色体进行交叉 pick=rand(1,2); %产生1行2列的随机数矩阵 while prod(pick)==0 %prod(A)检测矩阵是否有0,有则重新生成随机数 pick=rand(1,2); end index=ceil(pick.*sizepop); %ceil(z)函数将输入z中的元素取整,2.1则取3 % 交叉概率决定是否进行交叉 pick=rand; while pick==0 pick=rand; end if pick>pcross continue; %如果随机数比交叉概率大,则重新回到for语句,不执行下面的语句 end flag=0; %随机数比交叉概率小,说明可以交叉 while flag==0 % 随机选择交叉位 pick=rand; while pick==0 pick=rand; end pos=ceil(pick.*sum(lenchrom)); %随机选择进行交叉的位置,即选择第几个变量进行交叉,注意:两个染色体交叉的位置相同 pick=rand; %交叉开始 v1=chrom(index(1),pos);%随机选到index(1)条染色体以及它的位置pos,将其变量值取出 v2=chrom(index(2),pos); chrom(index(1),pos)=pick*v2+(1-pick)*v1;%实数交叉法,交叉公式 chrom(index(2),pos)=pick*v1+(1-pick)*v2; %交叉结束 flag1=test(chrom(index(1),:)); %检验染色体1的可行性 flag2=test(chrom(index(2),:)); %检验染色体2的可行性 if flag1*flag2==0 %如果两个染色体不是都可行,则重新交叉 flag=0; else flag=1; end end end ret=chrom;
评论
    相关推荐
    • 遗传算法.zip
      遗传算法展示,利用python演示遗传算法,更好的理解遗传算法
    • 遗传算法.zip
      最全遗传算法工具箱,matlab遗传算法教程
    • 遗传算法.zip
      遗传算法的代码和相应介绍,可以实现遗传算法对于城市数的最佳路径
    • 遗传算法.zip
      遗传算法求解目标函数的最小值,并绘制图像
    • 遗传算法.rar
      遗传算法的主程序和变异操作操作平台为matlab
    • 遗传算法.zip
      matlab遗传算法%主程序:用遗传算法求解y=200*exp(-0.05*x).*sin(x)在[-2 2]区间上的最大值 clc; clear all; close all; 。。。。。。
    • 遗传算法.zip
      一个简单的遗传算法案例 内有中文注释 适合初学者进行遗传算法的学习
    • 遗传算法解决TSP问题
      使用遗传算法解决TSP问题以和其它智能优化算法进行比较。
    • 遗传算法.rar
      整理的遗传算法,用于程序演示,适合新手小白学习使用
    • 遗传算法.zip
      遗传算法的例子及源代码。。。。。。。。。