A. 请高人指点:matlab遗传算法工具箱编程,求一个多约束,多元非线性方程的最小值
将下属两个目标函数分别保存在两个m文件中
function f1=func1(x) %第一目标函数
f1=x(:,1).*x(:,1)./4+x(:,2).*x(:,2)./4;
function f2=func2(x) %第二目标函数
f2=x(:,1).*(1-x(:,2))+10;
function GA()
clear;clc;close all
NIND=100; %个体数目
MAXGEN=50; %最大遗传代数
NVAR=2; %变量个数
PRECI=20; %变量的二进制位数
GGAP=0.9; %代沟
trace1=[];trace2=[];trace3=[]; %性能跟踪
%建立区域描述器
% rep([PRECI],[1,NVAR])
FieldD=[rep([PRECI],[1,NVAR]);rep([1;2],[1,NVAR]);rep([1;0;1;1],[1,NVAR])];
Chrom=crtbp(NIND,NVAR*PRECI); %初始种群
v=bs2rv(Chrom,FieldD) ; %初始种群十进制转换
gen=1;
while gen<MAXGEN,
[NIND,N]=size(Chrom);
M=fix(NIND/2);
ObjV1=func1(v(1:M,:)); %分组后第一目标函数值
FitnV1=ranking(ObjV1); %分配适应度值
SelCh1=select('sus',Chrom(1:M,:),FitnV1,GGAP); %选择
ObjV2=func2(v(M+1:NIND,:)); %分组后第二目标函数值
FitnV2=ranking(ObjV2); %分配适应度值
SelCh2=select('sus',Chrom(M+1:NIND,:),FitnV2,GGAP); %选择
SelCh=[SelCh1;SelCh2]; %合并
SelCh=recombin('xovsp',SelCh,0.7); %重组
Chrom=mut(SelCh); %变异
v=bs2rv(Chrom,FieldD);
trace1(gen,1)=min(func1(v));
trace1(gen,2)=sum(func1(v))/length(func1(v));
trace2(gen,1)=min(func2(v));
trace2(gen,2)=sum(func2(v))/length(func2(v));
trace3(gen,1)=min(func1(v)+func2(v));
trace3(gen,2)=sum(func1(v))/length(func1(v))+sum(func2(v))/length(func2(v));
gen=gen+1;
end
figure(1);clf;
plot(trace1(:,1));hold on;plot(trace1(:,2),'-.');
plot(trace1(:,1),'.');plot(trace1(:,2),'.');grid on;
legend('解的变化','种群均值的变化')
xlabel('迭代次数');ylabel('目标函数值');
figure(2);clf;
plot(trace2(:,1));hold on;
plot(trace2(:,2),'-.');
plot(trace2(:,1),'.');
plot(trace2(:,2),'.');grid;
legend('解的变化','种群均值的变化');
xlabel('迭代次数');ylabel('目标函数值');
figure(3);clf;
plot(trace3(:,1));hold on;
plot(trace3(:,2),'-.');
plot(trace3(:,1),'.');
plot(trace3(:,2),'.');grid;
legend('解的变化','种群均值的变化');
xlabel('迭代次数');ylabel('目标函数值');
figure(4);clf;plot(func1(v));hold on;
plot(func2(v),'r-.');grid;
B. matlab遗传算法工具箱求解非线性约束问题,如何在GUI设置,或者这个程序如何编
感觉lb=[2,30];和ub=[2,30];上有问题。根据我的判断,lb=[2,30];和ub=[];,这样的话,可以得到,x1=5.91529880464077,x2= 91.34970961511135,y=8.612323770417001
C. 遗传算法非线性约束问题
很多时候遗传算法并不能给出合理的答案,你可以考虑适当的更改初始种群的大小、迭代次数的上限、函数精度等处理一下!工具箱中的函数往往是通用的,必要的时候你需要自己提供种群初始函数,甚至优胜劣汰、变异等等,建议复杂的优化问题还是交给lingo吧!
D. 使用matlab遗传算法工具箱如何加入目标函数中变量的约束条件啊,可否在M文件中加
首先回答你第一个问题:怎么加入变量的约束条件?
打开遗传算法工具箱的窗体中会有下图所示的选项,即是约束条件的编辑
至于添加的方式,这里要重点的提一下,首先将问题抽象成规划问题的标准形式(如果你不懂什么是标准形式的话,建议你去翻阅运筹学那本书,上告诉你什么是标准形式),然后用矩阵语言写出来,最后将矩阵的系数填写到线性不等约束和线性相等约束中,同时定义所求变量x的上界和下界(记住有多少个变量就有多少列,如果你发现有些条件中没有出现某些变量,那么就应该用0补足,这个是matlab解决规划问题与lingo想比较麻烦的一个地方,)。
然后回答你第二个问题:可否在M文件中添加约束条件?
当然可以,界面的东西是为了方便不熟悉matlab编程的人而设计出来的,但是其底层的算法和接口肯定是有的。
碰到不懂的函数,请记得:help函数名
helpga之后会得到一下一些函数
ga
//这个是定义
Syntax //这个是语法也即是调用的规则
x=ga(fitnessfcn,nvars)
x=ga(fitnessfcn,nvars,A,b)
x=ga(fitnessfcn,nvars,A,b,Aeq,beq)
x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB)
x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon)
x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)
x=ga(problem)
[x,fval]=ga(...)
[x,fval,exitflag]=ga(...)直接给你将最长的那个吧
x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)
X是返回所求的解
fitnessfcn是适应度函数
nvars是适应度函数中所含变量的维数
A是不等式约束中变量的系数矩阵,b是不等式约束中不含变量的值矩阵
Aeq是等式约束中变量的系数矩阵,beq是等式约束中不含变量的值矩阵
LB是下界,UB是上界
nonlcon是非线性约束条件
至于options嘛 我也木有用过,其实你也可以不用管的。
懂了木有呢,亲?
E. 用遗传算法工具箱怎么求解线性约束函数
Matlab遗传算法工具箱是可以施加的非线性隐性约束条件的。例如:
min z= 3050*x1³+0.25*x2;
其中x1定义域[-0.381,0.381],x2定义域[-100,100]
求目标函数值为10时的x1、x2值。
求解结果
x1=0.14169943480903302 x2=5.289387991237991
function [c,ceq]=ga_con(x) %非线性约束条件函数
c=10-(3050*x(1)^3+0.25*x(2));
ceq=[];
F. 约束条件如何在遗传算法工具箱中体现
Matlab优化工具箱中的fmincon()函数就可以求解有约束的最小化包括线性约束和非线性约束,还有边界控制等具体可以看看帮助系统,如果在操作上有什么具体问题我们再探讨
G. 请问,Matlab遗传算法工具箱能施加的非线性隐性约束条件吗谢谢!!!
Matlab遗传算法工具箱是可以施加的非线性隐性约束条件的。例如:
min z= 3050*x1³+0.25*x2;
其中x1定义域[-0.381,0.381],x2定义域[-100,100]
求目标函数值为10时的x1、x2值。
求解结果
x1=0.14169943480903302 x2=5.289387991237991
function [c,ceq]=ga_con(x) %非线性约束条件函数
c=10-(3050*x(1)^3+0.25*x(2));
ceq=[];
H. matlab遗传算法工具箱应用问题.在适应度函数处应该输入什么约束条件怎么输入
这个ga工具箱只能解决简单的线性约束问题,你的约束条件是非线性约束,所以你还是要使用gatbx菲尔德大学的那个工具箱,你的问题带有不等式约束,转化为无约束的拉格朗日对偶问题求解
I. Matlab遗传工具箱使用时添加非线性约束条件
是非线性约束
再单独写个.M文件,像目标函数那样,把两个约束条件写进去,在约束区有个“Nonlinear constraint function” @+"你的约束文件名"
J. 用matlab的optimization工具箱遗传算法,添加约束条件的问题。
你看到下边那个nonlinear constraint function了吗?
把你的约束写在一个m文件的function中,函数名比如取为:xconstr
则将@xconstr写到nonlinear constraint function后面的框里,应该就可以了。线性约束的话直接写在上方的栏目中。
你的优化问题没看到,用遗传算法求解一般没有问题。这种智能优化算法的最大优点在于求解多局部解优化问题时能得到全局性较好的最有解。如果你不考解的全局最优性的话,可以直接使用fmincon函数来求解。关于fmincon函数,可以在matlab命令行中输入 doc fmincon命令以查看帮助。