1、最优化优化工具箱MATLAB优化工具箱1、线性规划1.1一般线性规划(linprog)1.1.1 数学模型其中,和为向量,和为矩阵.1.1.2 相关语法x=linprog(f,A,b)x=linprog(f,A,b,Aeq,beq)x=linprog(f,A,b,Aeq,beq,lb,ub)x=linprog(f,A,b,Aeq,beq,lb,ub,x0)x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)x,fval=linprog()x,fval,exitflag=linprog()x,fval,exitflag,output=linprog()x,fval,
2、exitflag,output,lambda=linprog()1.1.3 实例分析例1、求解如下线性规划模型代码: f=-2;-3;-1;A=1 2 2;1 4 7;b=4;9;lb=0;0;0;x,fval=linprog(f,A,b,lb)Optimization terminated.x = 4.0000 0.0000 0.0000fval = -8.0000即原问题的最优解为,最优值为8.例2、求解如下线性规划模型 代码: f=5;0;21;A=-1 1 -6;-1 -1 -2;b=-2;-1;lb=0;0;0;x,fval=linprog(f,A,b,lb)Optimization
3、 terminated.x = 0.5000 0.0000 0.2500fval =7.7500即原问题的最优解为,最大值为-7.75.1.2 0-1线性规划(bintprog)1.2.1 数学模型其中,和为向量,和为矩阵.1.2.2 相关语法x=bintprog(f,A,b)x=bintprog(f,A,b,Aeq,beq)x=bintprog(f,A,b,Aeq,beq,lb,ub)x=bintprog(f,A,b,Aeq,beq,lb,ub,x0)x=bintprog(f,A,b,Aeq,beq,lb,ub,x0,options)x,fval=bintprog()x,fval,exitf
4、lag=bintprog()x,fval,exitflag,output=bintprog()1.2.3 实例分析代码:f=-193;-191;-187;-186;-180;-185;A=0 0 0 0 -1 -1;0 -1 0 0 -1 0;1 1 0 0 0 0;0 1 0 0 0 1;0 0 0 1 0 1; b=-1;-1;1;1;1;Aeq=1 1 1 1 1 1;beq=3;x=bintprog(f,A,b,Aeq,beq)Optimization terminated.x = 1 0 1 0 1 0即原问题的最优解为,z=560.1.3 整数线性规划(intprog)1.3.1
5、数学模型其中,和为向量,和为矩阵.1.3.2 相关语法function x,fval,status = intprog(f,A,B,I,Aeq,Beq,lb,ub,e)%整数规划求解函数 intprog()% 其中 f为目标函数向量% A和B为不等式约束 Aeq与Beq为等式约束% I为整数约束% lb与ub分别为变量下界与上界% x为最优解,fval为最优值%例子:% maximize 20 x1 + 10 x2 % S.T.% 5 x1 + 4 x2 =24% 2 x1 + 5 x2 =0 % x1, x2是整数% f=-20, -10;% A= 5 4; 2 5;% B=24; 13;%
6、 lb=0 0;% ub=inf inf;% I=1,2;% e=0.000001;% x v s= IP(f,A,B,I,lb,ub,e)% x = 4 1 v = -90.0000 s = 1 % 控制输入参数if nargin 9, e = 0.00001; if nargin 8, ub = ; if nargin 7, lb = ; if nargin 6, Beq = ; if nargin 5, Aeq = ; if nargin 4, I = 1:length(f);end, end, end, end, end, end %求解整数规划对应的线性规划,判断是否有解option
7、s = optimset(display,off);x0,fval0,exitflag = linprog(f,A,B,Aeq,Beq,lb,ub,options);if exitflag 0 disp(没有合适整数解); x = x0; fval = fval0;status = exitflag; return;else%采用分支定界法求解 bound = inf; x,fval,status=branchbound(f,A,B,I,x0,fval0,bound,Aeq,Beq,lb,ub,e);endfuntion newx,newfval,status,newboundbranchbo
8、und(f,A,B,I,x,fval,bound,Aeq,Beq,lb,ub,e)% 分支定界法求解整数规划%f,A,B,Aeq,Beq,lb,ub与线性规划相同%I为整数限制变量的向量%x为初始解,fval为初始值options=optimiset(display,off);x0,fval0,status0=linprog(f,A,B,Aeq,Beq,lb,ub,options);%递归中的最终退出条件%无解或者解比现在有上界大则返回原解if status0=bound newx=x; newfval=fval;newbound=bound;status=status0; return;en
9、d%是否为整数解,如果是整数解则返回原解intindex=find(abs(x0(I)-round(x0(I)e);if isempty(intindex) newx(I)=round(x0(I); newfval=fval0;newbound=fval0;status=1;return;end%当有非整可行解时,则进行分支求解%此时必定会有整数解或空解%找到第一个不满足整数要求的变量n=I(intindex(1);addA=zeros(1,length(f);addA(n)=1;%构造第一个分支x0&bound0&bound2boundstatus=status2;newx=x2; newf
10、val=fval2; newbound=bound2;end1.3.3 实例分析例1、求解下列运输问题. 代码:f=2;9;10;7;1;3;4;2;8;4;2;5;Aeq=1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1;beq=9;5;7;3;8;4;6;I=1:length(f);lb=zeros(12,1
11、);x,fval=intprog(f,I,Aeq,beq,lb)Optimization terminated.x= 3 0 0 6 0 5 0 0 0 3 4 0fval= 83.0000即原问题的最优值为83.2、非线性规划2.1 无约束非线性规划2.1.1 单变量优化(fminbnd)2.1.1.1 数学模型其中,和为标量,为函数,返回标量.2.1.1.2 相关语法x=fminbnd(fun,x1,x2)x=fminbnd(fun,x1,x2,options)x=fminbnd(fun,x1,x2,options,P1,P2,)x,fval=fminbnd()x,fval,exitfla
12、g=fminbnd()x,fval,exitflag,output=fminbnd()2.1.1.3 实例分析例1、在区间0,1上求函数的最小值.代码:%先定义函数f(x)的M文件f1114.m function f=f1114(x) f=x5+x3-7*x+1;%主程序%调用fminbnd函数x,fval=fminbnd(f1114,0,1)x = 0.9595fval = -4.0199即原问题在x=0.9595处取得最小值-4.0199.2.1.1.4 常见算法(1) 二分法程序以及实例程序:function y=erfen(fun,a,b,esp)if nargin4 esp=1e-4;endif feval(fun,a)*feval(fun,b)esp if feval(fun,a)*feval(fun,c)0 b=c; c=(a+b)/2; elseif feval(fun,c)*feval(fun,b)0 a=c; c=(a+b)/2; else y=c; es
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1