『壹』 matlab fmincon 怎么添加非线性约束
,un为目标函数,它可用前面的方法定义;
『贰』 matlab ga函数的非线性约束和目标函数能不能不单独写M文件,把所有的代码都放到一个M文件可以吗
可以,将所有函数都写到一个文件中
不过这个文件也只能是函数文件
你可以为你的函数文件先写一个总函数,类似于C语言的main函数
然后其它的函数写在后面
写在同一个函数文件中的函数是可以互相调用的
例如:
function[]=main()
.....
.....
x=ga(@objfun,nvars,.....);
.....
end
functionoutput=objfun(x)
.....
.....
end
实际上,就是将原来要在命令行里运行的代码
或者要写在脚本m文件中要运行的代码写到main函数中
当然不一定要命名为main,可以改其它名字
只要将该函数放在最先的位置就可以了
函数m文件以第一个定义的函数作为主函数
而后面可以定义更多的函数,都可以被主函数调用
这样就是将优化函数、约束函数、和主函数写在同一个文件的办法
但是,由于主体运行的代码被被封装为一个函数
所以不能像脚本m文件那样调用base工作空间中变量
生成的变量也不保存在base工作空间中
当函数运行完毕,退出的时候,它运行时所产生的变量将会被清空
你可以将要输入和输出的变量以函数输入参数和输出参数的形式传递
实际上不及用脚本m文件方便
但是脚本m文件中是不能用function语句定义函数的
『叁』 请问,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=[];
『肆』 Matlab利用GA算法的多约束非线性问题求助
你的ga函数使用不对,猜测是你用的代码的matlab版本比较老,你自己的matlab比较新,ga函数经过几次的升级,调用方法进行了改进。
『伍』 使用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嘛 我也木有用过,其实你也可以不用管的。
懂了木有呢,亲?
『陆』 用matlab的optimization工具箱遗传算法,添加约束条件的问题。
你看到下边那个nonlinear constraint function了吗?
把你的约束写在一个m文件的function中,函数名比如取为:xconstr
则将@xconstr写到nonlinear constraint function后面的框里,应该就可以了。线性约束的话直接写在上方的栏目中。
你的优化问题没看到,用遗传算法求解一般没有问题。这种智能优化算法的最大优点在于求解多局部解优化问题时能得到全局性较好的最有解。如果你不考解的全局最优性的话,可以直接使用fmincon函数来求解。关于fmincon函数,可以在matlab命令行中输入 doc fmincon命令以查看帮助。
『柒』 用Matlab解决有约束的非线性问题
用matlab里面的optimazation tool工具,来解决有约束的非线性问题。
首先,应分别建立自定义极值函数fmincon_fun(x)和自定义约束函数fmincon_con(x)
其二,用optimtool命令,打开optimazation tool工具箱
其三,分别用@fmincon_fun和@fmincon_con填入对于命令框内,同时将初值设定为【0,0】
最后,点击Start按钮,可以求得x1=-0.2,x2=0.2,f=0.8
自定义极值函数fmincon_fun(x)和自定义约束函数fmincon_con(x)的内容:
function f=fmincon_fun(x)
x1=x(1);x2=x(2);
f=(x1-x2)^2+(x2-1)^2
end
function [c,ceq]=fmincon_con(x)
x1=x(1);x2=x(2);
c(1)=x1^2-x2;
c(2)=x1+x2
ceq=[];
end
『捌』 matlab遗传算法优化问题中,非线性等式约束怎么添加啊
建立约束条件函数,把非线性的等式约束条件添加加在[c,ceq]中。如
function [c,ceq]=NonCon(x)
c=x(1)^2+x(2)^2-9;
ceq=[];
然后,再用ga()函数调用,如
[x, fval, exitflag] =ga(o@FitFun,nvars,A,b,Aeq,beq,lb,ub,NonCon)