【智能优化算法-遗传算法】基于遗传算法求解单目标优化问题(实数编码)附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机

⛄ 内容介绍

在日常生产生活中,会遇到各种各样的优化问题,例如,求到某地的“最短路径”或某种资源的“最大利用率”等。常规的解法是先通过数学建模的方式将这些问题转化成函数优化问题,之后再利用数学方法进行求解。由于所要求解的问题类型多种多样,因此,通过数学建模形成的目标函数会呈现出各种各样的数学特征,此时,采用数学方法很难求解。实数编码遗传算法由于其结构简单,在求解时不受具体问题的约束以及求解精度高等优点,自提出以来便在函数优化问题上得到了广泛使用。

⛄ 部分代码

%%遗传算法主函数

clc;

clear all;

close all;

warning off

%%遗传算法参数

maxgen=200; %进化代数,也即是迭代次数

sizepop=20; %种群规模,个体数,也即是染色体数

pcross=[0.6];   %交叉概率,[0,1]之间为什么写成数组的形式?

pmutation=[0.01];%变异概率,【0,1】之间

lenchrom=[1 1 1 1 1];%每个变量的字符串长度,如果是浮点型变量,则长度都为1

bound=[0,0.9*pi;

    0,0.9*pi;

    0,0.9*pi;

    0,0.9*pi;

    0,0.9*pi];

%%个初始化

individuals=struct('fitness',zeros(1,sizepop),'chrom',[]);%种群结构体

avgfitness=0;%种群平均适应度

bestfitness=0;%种群最佳适应度

bestchrom=[];%适应度最好的染色体

bf=[];%记录种群最佳适应度

af=[];%记录种群平均适应度

%%初始化种群

for i=1:sizepop

    individuals.chrom(i,:)=Code(lenchrom,bound);%随机产生一个种群

    x=individuals.chrom(i,:);

    individuals.fitness(i)=fun(x);%计算染色体适应度

end        %以上完成了初始化种群,并计算了初始化种群每个个体的适应度

%%找最好的染色体

[bestfitness bestindex]=min(individuals.fitness);%得到初始化种群的最小的适应度函数值和位置。(函数值最小,那么倒数也就是适应度就最大,在轮盘赌操作的时候再去倒数)

bestchrom=individuals.chrom(bestindex,:);%适应度最好,也就是函数值最小的染色体编号

avgfitness=sum(individuals.fitness)/sizepop;%染色体平均适应度

trace=[];%记录每一代进化中最好的适应度和平均适应度,可以用来绘图反映是否过早收敛

%%进化开始

for i=1:maxgen

    %选择

    individuals=Select(individuals,sizepop);%返回被选中的染色体sizepop条和对应被选中染色体的适应度

    avgfitness=sum(individuals.fitness)/sizepop;%经过选择之后的种群的平均适应度

    %交叉

    individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);%返回交叉后的染色体群

    %变异

    individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,[i,maxgen],bound);

    

    %%非线性寻优,可以被注释掉,注释掉之后就是一般的遗传算法

    %每进化10代,以所得值为初始值进行非线性寻优,这是将遗传算法和非线性规划的函数寻优算法结合起来,nonlinear

    if(mod(i,10)==0)

        individuals.chrom=nonlinear(individuals.chrom,sizepop);

    end

    

    %%计算适应度

    for j=1:sizepop

        x=individuals.chrom(j,:);       

        individuals.fitness(j)=fun(x);

    end

    

    %找到最优染色体及他们在种群中的位置

    [newbestfitness,newbestindex]=min(individuals.fitness);

    

    %进行更新,代替上一次进化中最好的染色体

    if bestfitness>newbestfitness       %如果新一代染色体的函数值小,也就是适应度高

        bestfitness=newbestfitness;     %那么把新的适应度赋值给bestfitness

        bestchrom=individuals.chrom(newbestindex,:);%把新的当前最好的染色体给bestchrom

    end

    avgfitness=sum(individuals.fitness)/sizepop;

    

    bf=[bf bestfitness];

    af=[af avgfitness];

    

    %trace=[trace,avgfitness bestfitness];%记录每一代进化中最好的适应度和平均适应度

end %进化结束

%绘制图像分析

[r,c]=size(bf);

plot([1:c],bf,'r-',[1:c],af,'b--','LineWidth',2);

title(['函数值曲线' '终止代数=' num2str(maxgen)]);

xlabel('进化代数');

ylabel('函数值');

ylim([1.5 8]);

legend('各代最佳值','各代平均值');

disp('函数值            变量');

grid on

%窗口显示

disp([bestfitness x]);

% %绘制图像分析

% [r c]=size(trace);%计算trace的行列

% figure(1)

% plot([1:r]',trace(:,1),'r-',[1:r]',trace(:,2),'b--');

% title(['函数值曲线' '终止代数=' num2str(maxgen)]);

% xlabel('进化代数');

% ylabel('函数值');

% legend('各代平均值','各代最佳值');

% disp('函数值            变量');

% grid on

% %窗口显示

% disp([bestfitness x]);

⛄ 运行结果

⛄ 参考文献

[1]王雪峰. 用于函数优化问题的实数编码遗传算法的改进及并行化实现[D]. 河北大学.

[2]张强, 邢长征. 基于遗传算法智能组卷实数编码的应用[J]. 科技信息, 2008.

❤️ 关注我领取海量matlab电子书和数学建模资料

❤️部分理论引用网络文献,若有侵权联系博主删除

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于遗传算法求解多配送中心车辆路径规划问题的步骤如下: 首先,我们需要将多配送中心车辆路径规划问题转化为遗传算法中的优化问题。我们假设有N个配送中心和M辆配送车辆,将车辆路径规划问题转化为在N个配送中心之间进行路径选择,每辆车的路径形成一个染色体。遗传算法目标是找到一组最优的染色体,其中每个染色体对应一辆车的路径,使得总体路径最短。 然后,我们需要定义染色体的编码方式。可以使用二进制编码实数编码或者排列编码等方式表示染色体。例如,我们可以使用二进制编码表示染色体,其中每个基因位代表一个配送中心。对于每辆车的染色体,我们可以采用基于排列的编码方式。 接下来,我们需要定义适应度函数。适应度函数用于评价个体的适应程度,即个体的路径长度。适应度函数应根据染色体的编码方式进行相应的计算,例如,对于二进制编码,我们可以采用距离矩阵和路径的映射关系计算每个染色体的路径长度。 然后,我们需要定义遗传算法的基本操作,包括选择、交叉和变异。选择操作用于选择适应度较高的个体作为父代用于繁衍下一代。交叉操作用于产生新的个体,通过交换两个个体的染色体的一部分基因片段来生成新的染色体。变异操作用于改变染色体中的某些基因,通过随机的方式引入新的解空间。 最后,我们可以使用遗传算法求解多配送中心车辆路径规划问题。我们可以编写MATLAB代码实现上述步骤,其中包括染色体编码方式的定义、适应度函数的计算、遗传算法的基本操作等。整个算法可以迭代执行多次,直到达到停止条件(如达到最大迭代次数或收敛到最优解)为止。 在编写代码的过程中,我们可以根据具体问题的需要进行进一步的调整和优化,例如引入启发式信息、改变选择、交叉和变异算子的策略等。这样,我们就可以利用遗传算法有效地求解多配送中心车辆路径规划问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值