前言

之前写过在python中的多目标遗传算法了,但是很可惜的是python调用商用有限元软件比较费事,需要在ironpython的编译环境下调用,然后这个ironpython它又是个老古董,不支持pandas和numpy这些python必备的第三方库(内心是崩溃的)。没办法,被迫向matlab低头。从头学起来吧,好在有了python的基础学matlab也是比较容易的。

代码实现

这个代码水平写得比较low,毕竟我刚学matlab,多多包含。相关的理论说明在我之前的博客中给出了,在此就不赘述了,理论说明贴个链接:

Python_多目标遗传算法_入门学习+代码实现

直接上代码了哈。首先是两个待优化的函数。

function y=fun1(x)
%optimal function one
y=(x-1)^2;
end
function y=fun2(x)
%optimal function two
y=cos(x);
end

接着就是算法进化过程了:

%%get initial parameter
NP=70;
L=10;
Pc=0.8;
Pm=0.2;
G=30;        %迭代次数
Xs=pi/2;
Xx=0;
%% generate Primary population
f=randi([0,1],NP,L);
x=zeros(1,NP*2);
tempx=zeros(1,NP*2);
f1trace=[];
f2trace=[];
%% begin to Iteration
for i=1:1:Gdisp([i]);%pause(10);f1=zeros(1,NP*2);f2=zeros(1,NP*2);nf=f;for M=1:2:NPp=rand();if p<Pcq=randi([0,1],1,L);for j=1:1:Lif q(j)==1tempsize=nf(M+1,j);nf(M+1,j)=nf(M,j);nf(M,j)=tempsize;endendendendj=1;while j<=NP*Pmh=randi(NP);for k=1:1:round(NP*Pm)g=randi(L);nf(h,g)=~nf(h,g);endj=j+1;endnewf=[f;nf];           %垂直方向合并两个矩阵tempsize=size(newf);for j = 1:1:tempsize(1)U=newf(j,:);m=0;for k =1:1:Lm=U(k)*2^(k-2)+m;endx(j)=Xx+m*(Xs-Xx)/(2^(L-1));f1(j)=func(x(j));f2(j)=func1(x(j));   %f1,f2都是预先分配好内存了的,避免了append的使用endlenfs=length(f1)*2;fs=zeros(1,lenfs);for j=1:2:lenfsfs(j)=f1((j+1)/2);fs(j+1)=f2((j+1)/2);endfs=reshape(fs,2,lenfs/2);ps=zeros(length(f1),length(f1));for k =1:1:length(f1)for j = 1:1:length(f1)if fs(1,k)<fs(1,j) && fs(2,k)<fs(2,j)ps(k,j)=1;elseif fs(1,k)<fs(1,j) && fs(2,k)==fs(2,j)ps(k,j)=1;elseif fs(1,k)==fs(1,j) && fs(2,k)<fs(2,j)ps(k,j)=1;endendendjishu=zeros(1,length(f1));       %问题记录,把数值大的点筛出来了的,判断语句没问题,但是结果中for k = 1:1:length(f1)           %又出现数值大的点了,这些点从何处来?tempa=0;for j = 1:1:length(f1)if ps(j,k)==1tempa=tempa+1;endendjishu(k)=tempa;end[num,index]=sort(jishu);uninum=unique(num);     %向量去重front=cell(1,length(uninum));for k =1:1:length(uninum)temmat=[];for j =1:1:length(index)if num(j)==uninum(k)temmat=[temmat,index(j)];  %记录对应索引endendfront{k}=temmat;endf=[];for j = 1:1:length(front)if length(f)==NPbreakendtempf=[];for k=1:1:length(front{j})tempf=[tempf;newf(front{j}(k),:)];endtempf1=[];tempf2=[];[widtemf,wif_]=size(tempf);for M = 1:1:widtemfU=tempf(M,:);m=0;for k =1:1:Lm=m+U(k)*(2^(k-2));endxtemp=Xx+m*(Xs-Xx)/(2^(L-1));tempf1=[tempf1,func(xtemp)];tempf2=[tempf2,func1(xtemp)];end[temp1sort,temp1index]=sort(tempf1);distance=zeros(1,length(tempf1));distance(temp1index(1))=inf;distance(temp1index(end))=-inf;for k=1:1:length(temp1index)-1if abs(distance(temp1index(k)))<10distace(temp1index(k))=(tempf1(temp1index(k+1))-tempf1(temp1index(k-1)))/(max(tempf1)-min(tempf1));elsecontinueendend[temp2sort,temp2index]=sort(tempf2);distance1=zeros(1,length(tempf2));distance1(temp2index(1))=inf;distance1(temp2index(end))=-inf;for k=1:1:length(temp2index)-1if abs(distance1(temp2index(k)))<10distace1(temp2index(k))=(tempf2(temp2index(k+1))-tempf2(temp2index(k-1)))/(max(tempf2)-min(tempf2));elsecontinueendendsumdis=[];for k =1:1:length(distance)sumdistance=distance(k)+distance1(k);sumdis=[sumdis,sumdistance];end[dis_,disindex]=sort(sumdis,'descend');for k=1:1:length(sumdis)f=[f;tempf(disindex(k),:)];if length(f)==NPbreakendend
%         f=reshape(f,length(f)/L,L);f1=[];f2=[];[lenf,wid_]=size(f);for j=1:1:lenfU=f(j,:);m=0;for k =1:1:Lm=m+U(k)*(2^(k-2));endx(j)=Xx+m*(Xs-Xx)/(2^(L-1));f1=[f1,func(x(j))];f2=[f2,func1(x(j))];endendname=['F:/单轨吊驱动电机/maxwell调用/测试/pic/','pareto',num2str(i),'.png']; %保存图片到指定文件夹并命名plot(f1,f2,'o','MarkerSize',7);set(gca,'FontName','Times New Roman');grid ontitle('优化前沿曲线','FontName','宋体');xlabel('f1value')ylabel('f2value')saveas(gcf, name);
end

最后的话

代码的确写得比较不堪入目,但是结果是好的,功能可以保证实现。

第一代优化结果:

第30代结果:

再多说两句,之前一直用python,就不想去学matlab,限制在自己的舒服区了,之后还是要多尝试尝试,不能一直止步不前。

matlab_多目标遗传算法相关推荐

  1. 基于帕累托的多目标遗传算法优化的原理与 Python 实现

    文章目录 帕累托多目标遗传算法 代码实现 排序函数 查找所需索引函数 Pareto 法得到帕累托前沿函数 拥挤度计算 从父代和子代中选择下一个父代 帕累托多目标遗传算法 在优化领域,遗传算法绝对占得上 ...

  2. MATLAB代码:基于多目标遗传算法的分布式电源选址定容研究

    关键词:选址定容 分布式电源 多目标 遗传算法 参考文档:<Optimal Siting and Sizing of Distributed Generation in Radial Distr ...

  3. 多目标遗传算法NSGA-II原理详解及算法实现

    在接触学习多目标优化的问题上,经常会被提及到多目标遗传算法NSGA-II,网上也看到了很多人对该算法的总结,但真正讲解明白的以及配套用算法实现的文章很少,这里也对该算法进行一次详解与总结.会有侧重点的 ...

  4. 多目标遗传算法及MATLAB代码

    需要求一个比较复杂的矩阵,一般方法解不出来,故尝试用多目标遗传算法(Multiobjective Genetic Algorithm)求解.不是专门做研究遗传算法的,根据自己需求进行了简单学习,并做如 ...

  5. 【搞搞算法】多目标遗传算法NSGA-II的C语言代码使用手册

    这是2014年4月在其他博客写的,转帖到CSDN博客上. 在之前的博文里提到过,多目标遗传算法NSGA-II的提出者之一--Kalyanmoy Deb教授实验室的网站http://www.iitk.a ...

  6. 多目标遗传算法NSGA

    多目标遗传算法NSGA 因所读的一篇论文中,为了解决多目标的最优解问题,作者使用了一种称为NSGA-II(Improved Non-dominated Sorting Genetic Algorith ...

  7. 基于多目标遗传算法的IEEE14节点系统分布式电源选址定容matlab程序

    基于多目标遗传算法的IEEE14节点系统分布式电源选址定容matlab程序 摘 要: 为更好地解决分布式电源选址定容问题,提出一种改进的多目标遗传算法.之后,考虑投资成本.网损以及电压稳定性三因素建立 ...

  8. 多目标遗传算法电力系统系统分布式电源选址定容

    多目标遗传算法电力系统系统分布式电源选址定容(matlab程序) 基于IEEE14节点的电力系统多目标优化的遗传算法分布式电源选址定容 对于网损.容量和.电压稳定值的目标优化出来的选址定容 分为有DG ...

  9. 多目标遗传算法NSGAII求解环境经济调度(Python代码实现)

    目录 1 电力系统环境经济调度数学模型 2 算例--IEEE10节点 2.1 数据​ 2.2 Python代码学习 3 一点拓展知识 1 电力系统环境经济调度数学模型   2 算例--IEEE10节点 ...

  10. 基于改进多目标遗传算法的城市轨道列车运行控制曲线优化研究

    摘要:构建多目标改进遗传算法求解城市轨道列车运行仿真模型,求出最优运行曲线.在列车控制系统中,运行方式的转换点是基因编码的基础,由多个基因组成的染色体代表一个控制方案,通过这种方式可以形成初始种群.根 ...

最新文章

  1. HTML5 表单 中
  2. 如何在ALV中输出标题头
  3. c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)(二)
  4. 讨论计算机在学术领域的应用,BGPLUS实地科研 | 卡内基梅隆大学 | 计算机、人工智能:在科学实验领域的应用...
  5. CobaltStrike的使用
  6. matlab插值与拟合例题_菜鸟进阶系列:MATLAB数学建模·数据插值与拟合
  7. the job was canceled什么意思_什么第三人称单数形式?怎么用?
  8. 前端学习笔记之DOM(一)
  9. Centos7下配置安装mysql5.5主从复制(一主两从)
  10. mysql syncrelaylog_MySQL 5.7复制延迟之sync_relay_log
  11. VS2015安装VBpowerpacks工具箱教程
  12. 计算机等级考试无纸化模拟软件(免费版)
  13. 阿里巴巴java开发手册一方库、二方库、三方库都是什么东东
  14. webstorm 下载安装及破解
  15. Typora:明明保存了,但是却内容丢失了
  16. 磨金石教育分享:43款字体设计工具大集合,超赞!
  17. 【教3妹学mysql】一条慢sql如何排查优化
  18. 300iq Contest 1
  19. C语言移位运算 左移长度大于数据类型字节数的情况
  20. STM32最小核心板F103串口通信USART

热门文章

  1. CS61C 学习笔记 --实时更新
  2. CS 61A Environment Diagrams 学习笔记
  3. Yu-Chee Tseng
  4. TCPIP协议详解----网络基础知识
  5. 基于matlab的信源编码pcm,信源编码仿真实现
  6. 上海自考计算机应用基础实践,2001年4月份全国高教自考计算机应用基础试题及答案...
  7. 航信eterm指令_Eterm常用指令
  8. 思科交换机配置试题_思科交换机配置命令大全 思科交换机配置手册
  9. FastStone Capture7.0注册码
  10. 全面精通Web 2.0,做互联网潮头人