多目标遗传算法
❶ 急求一份多目标遗传算法matlab代码!
我给你一个标准遗传算法程序供你参考:
该程序是遗传算法优化BP神经网络函数极值寻优:
%% 该代码为基于神经网络遗传算法的系统极值寻优
%% 清空环境变量
clc
clear
%% 初始化遗传算法参数
%初始化参数
maxgen=100; %进化代数,即迭代次数
sizepop=20; %种群规模
pcross=[0.4]; %交叉概率选择,0和1之间
pmutation=[0.2]; %变异概率选择,0和1之间
lenchrom=[1 1]; %每个变量的字串长度,如果是浮点变量,则长度都为1
bound=[-5 5;-5 5]; %数据范围
indivials=struct('fitness',zeros(1,sizepop), 'chrom',[]); %将种群信息定义为一个结构体
avgfitness=[]; %每一代种群的平均适应度
bestfitness=[]; %每一代种群的最佳适应度
bestchrom=[]; %适应度最好的染色体
%% 初始化种群计算适应度值
% 初始化种群
for i=1:sizepop
%随机产生一个种群
indivials.chrom(i,:)=Code(lenchrom,bound);
x=indivials.chrom(i,:);
%计算适应度
indivials.fitness(i)=fun(x); %染色体的适应度
end
%找最好的染色体
[bestfitness bestindex]=min(indivials.fitness);
bestchrom=indivials.chrom(bestindex,:); %最好的染色体
avgfitness=sum(indivials.fitness)/sizepop; %染色体的平均适应度
% 记录每一代进化中最好的适应度和平均适应度
trace=[avgfitness bestfitness];
%% 迭代寻优
% 进化开始
for i=1:maxgen
i
% 选择
indivials=Select(indivials,sizepop);
avgfitness=sum(indivials.fitness)/sizepop;
%交叉
indivials.chrom=Cross(pcross,lenchrom,indivials.chrom,sizepop,bound);
% 变异
indivials.chrom=Mutation(pmutation,lenchrom,indivials.chrom,sizepop,[i maxgen],bound);
% 计算适应度
for j=1:sizepop
x=indivials.chrom(j,:); %解码
indivials.fitness(j)=fun(x);
end
%找到最小和最大适应度的染色体及它们在种群中的位置
[newbestfitness,newbestindex]=min(indivials.fitness);
[worestfitness,worestindex]=max(indivials.fitness);
% 代替上一次进化中最好的染色体
if bestfitness>newbestfitness
bestfitness=newbestfitness;
bestchrom=indivials.chrom(newbestindex,:);
end
indivials.chrom(worestindex,:)=bestchrom;
indivials.fitness(worestindex)=bestfitness;
avgfitness=sum(indivials.fitness)/sizepop;
trace=[trace;avgfitness bestfitness]; %记录每一代进化中最好的适应度和平均适应度
end
%进化结束
%% 结果分析
[r c]=size(trace);
plot([1:r]',trace(:,2),'r-');
title('适应度曲线','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);
axis([0,100,0,1])
disp('适应度 变量');
x=bestchrom;
% 窗口显示
disp([bestfitness x]);
提问者评价
谢谢!
❷ 怎么评价MATLAB中gamultiobj函数(多目标遗传算法)的计算结果比如下面的函数和其部分结果
您好,多目标遗传算法可以得到Pareto Front图,即您展示的结果。至于评价方法应由您自己确定,比如最简单的线性加权函数评价方法,评价值Evalue=w1*minf1(x1,x2)+w2*minf2(x1,x2),其中w1+w2=1。
总的来说,就是依据自己的需要进行评价,matlab中不含有评价方法(因为评价方法很灵活)。
❸ 遗传算法 求解多目标过程 有实例更好
多目标是相对传统的单目标而言的,最基本的遗传算法都是单目标的,是说要优化的目标函数只有一个,要么求最大,要么求最小,而多目标问题一般是求解多个待优化的目标函数共同的非劣解。建议你去找找关于多目标优化的文章,看一篇,能看明白的话这个问题你就懂了。
❹ matlab 非线性多目标的遗传算法问题
用matlab的ga()遗传算法函数求非线性多目标的最小值(或最大值),其解决帮助如下:
1、首先建立自定义目标函数,y=FitFun(x)
2、其二建立自定义约束函数,[c,ceq]=NonCon(x)
3、最后,根据已知条件,用ga()函数求解。
为了说明问题,没有用你随意给的问题。下面,给你一个例子作参考。
FitFun.m
function f = FitFun(x,a1)
f = exp(x(1))*(4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + a1);
end
NonCon.m
function [c,ceq] = NonCon(x,a2)
c = [1.5 + x(1)*x(2) - x(1) - x(2);-x(1)*x(2) - a2];
ceq = [];
end
ga_main.m
a1 = 1; a2 = 10;
options = gaoptimset('MutationFcn',@mutationadaptfeasible);
x = ga(@(x)FitFun(x,a1),2,[],[],[],[],[],[],@(x)NonCon(x,a2),options)
运行结果
❺ 多目标优化遗传算法求解混合整数规划问题
可以参考多目标寻优遗传方法的进化思路,把遗传算法修改为针对整数规划的方法就可以
❻ 对于解决多目标优化问题,遗传算法、粒子群、模拟退火哪个比较好啊哪位大神能分析一下么
个人感觉是遗传算法吧,当然可以和模拟退火算法结合来使用。
多目标遗传算法可解决多目标优化问题,和模拟退火算法相结合时还能强化局部搜索能力。
❼ 谁能通俗的讲解一下NSGA-II多目标遗传算法
NSGA-II特别的地方就在它的选择过程上,其他的和其他算法也没什么区别。
选择过程分两个部分:
1. 把种群分成一组Pareto非支配集。一个非支配集里的个体不被当前或之后非支配集里的任何个体支配。方法就是每次选出所有不被任何其他个体支配的非支配个体,从种群里删除当一个非支配集,然后剩下的再不停重复这个过程,直到取完。
2. 按crowd distance排序。就是在各个维度左右相邻个体的距离之和。
选择的时候,先从前往后一个个取非支配集。取到手里的个体数量大于等于需要的数量了,最后一个非支配集里再怎么选?选crowd distance大的。
❽ 什么是多目标遗传算法
http://www.easyworm.com/chinese/document/Chapter4.htm
比较复杂,解释起来不知是否可行,你先去这看看吧。
大学图书馆里这些书一找一大堆,可以去翻翻
❾ 跪求一份多目标多约束遗传算法的代码,matlab ,c ,c++都可以!不胜感激