Matlab非线性规划

合集下载

matlab解决非线性规划问题(凸优化问题)

matlab解决非线性规划问题(凸优化问题)

matlab解决⾮线性规划问题(凸优化问题)当⽬标函数含有⾮线性函数或者含有⾮线性约束的时候该规划问题变为⾮线性规划问题,⾮线性规划问题的最优解不⼀定在定义域的边界,可能在定义域内部,这点与线性规划不同;例如:编写⽬标函数,定义放在⼀个m⽂件中;编写⾮线性约束条件函数矩阵,放在另⼀个m⽂件中;function f = optf(x);f = sum(x.^2)+8;function [g, h] = limf(x);g = [-x(1)^2+x(2)-x(3)^2x(1)+x(2)^2+x(3)^3-20]; %⾮线性不等式约束h = [-x(1)-x(2)^2+2x(2)+2*x(3)^2-3]; %⾮线性等式约束options = optimset('largescale','off');[x y] = fmincon('optf',rand(3,1),[],[],[],[],zeros(3,1),[],...'limf',options)输出为:最速下降法(求最⼩值):代码如下:function [f df] = detaf(x);f = x(1)^2+25*x(2)^2;df = [2*x(1)50*x(2)];clc,clear;x = [2;2];[f0 g] = detaf(x);while norm(g)>1e-6 %收敛条件为⼀阶导数趋近于0p = -g/norm(g);t = 1.0; %设置初始步长为1个单位f = detaf(x+t*p);while f>f0t = t/2;f = detaf(x+t*p);end %这⼀步很重要,为了保证最后收敛,保持f序列为⼀个单调递减的序列,否则很有可能在极值点两端来回震荡,最后⽆法收敛到最优值。

x = x+t*p;[f0,g] = detaf(x);endx,f0所得到的最优值为近似解。

非线性规划的MATLAB解法及其应用

非线性规划的MATLAB解法及其应用

题 目 非线性规划的MATLAB 解法及其应用(一) 问题描述非线性规划是具有非线性约束条件或目标函数的数学规划,是运筹学的一个重要分支。

非线性规划是20世纪50年代才开始形成的一门新兴学科。

70年代又得到进一步的发展。

非线性规划在工程、管理、经济、科研、军事等方面都有广泛的应用,为最优设计提供了有力的工具。

在经营管理、工程设计、科学研究、军事指挥等方面普遍地存在着最优化问题。

例如:如何在现有人力、物力、财力条件下合理安排产品生产,以取得最高的利润;如何设计某种产品,在满足规格、性能要求的前提下,达到最低的成本;如何确定一个自动控制的某些参数,使系统的工作状态最佳;如何分配一个动力系统中各电站的负荷,在保证一定指标要求的前提下,使总耗费最小;如何安排库存储量,既能保证供应,又使储存 费用最低;如何组织货源,既能满足顾客需要,又使资金周转最快等。

对于静态的最优化 问题,当目标函数或约束条件出现未知量的非线性函数,且不便于线性化,或勉强线性化后会招致较大误差时,就可应用非线性规划的方法去处理。

具有非线性约束条件或目标函数的数学规划,是运筹学的一个重要分支。

非线性规划研究一个n 元实函数在一组等式或不等式的约束条件下的极值问题,且目标函数和约束条件至少有一个是未知量的非线性函数。

目标函数和约束条件都是线性函数的情形则属于线性规划。

本实验就是用matlab 软件来解决非线性规划问题。

(二) 基本要求掌握非线性规划的MATLAB 解法,并且解决相关的实际问题。

题一 :对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?题二: 某厂生产一种产品有甲、乙两个牌号,讨论在产销平衡的情况下如何确定各自的产量,使总利润最大. 所谓产销平衡指工厂的产量等于市场上的销量.符号说明:z(x 1,x 2)表示总利润;p 1,q 1,x 1分别表示甲的价格、成本、销量; p 2,q 2,x 2分别表示乙的价格、成本、销量; a ij ,b i ,λi ,c i (i ,j =1,2)是待定系数.题三:设有400万元资金, 要求4年内使用完, 若在一年内使用资金x 万元, 则可得效益x 万元(效益不能再使用),当年不用的资金可存入银行, 年利率为10%. 试制定出资金的使用计划, 以使4年效益之和为最大.(三) 数据结构题一:设剪去的正方形的边长为x ,则水槽的容积为:x x )23(2-;建立无约束优化模型为:min y=-x x )23(2-, 0<x<1.5题二:总利润为: z(x1,x2)=(p1-q1)x1+(p2-q2)x2若根据大量的统计数据,求出系数b1=100,a11=1,a12=0.1,b2=280,a21=0.2,a22=2,r1=30,λ1=0.015,c1=20, r2=100,λ2=0.02,c2=30,则问题转化为无约束优化问题:求甲,乙两个牌号的产量x1,x2,使总利润z 最大.为简化模型,先忽略成本,并令a12=0,a21=0,问题转化为求:z1 = ( b1 - a11x1 ) x1 + ( b2 - a22x2 ) x2的极值. 显然其解为x1 = b1/2a11 = 50, x2 = b2/2a22 = 70,我们把它作为原问题的初始值.题三:设变量i x 表示第i 年所使用的资金数,则有 4,3,2,1,04.5321.121.1331.14841.121.14401.1400..max 43213212114321=≥≤+++≤++≤+≤+++=i x x x x x x x x x x x t s x x x x z i(四) 源程序题一:编写M 文件fun0.m:function f=fun0(x)f=-(3-2*x).^2*x;主程序为wliti2.m:[x,fval]=fminbnd('fun0',0,1.5);xmax=xfmax=-fval题二:建立M-文件fun.m:function f = fun(x)y1=((100-x(1)- 0.1*x(2))-(30*exp(-0.015*x(1))+20))*x(1); y2=((280-0.2*x(1)- 2*x(2))-(100*exp(-0.02*x(2))+30))*x(2); f=-y1-y2;输入命令:x0=[50,70];x=fminunc(‘fun ’,x0),z=fun(x)题三:建立M 文件 fun44.m,定义目标函数:function f=fun44(x)f=-(sqrt(x(1))+sqrt(x(2))+sqrt(x(3))+sqrt(x(4)));建立M 文件mycon1.m 定义非线性约束:function [g,ceq]=mycon1(x)g(1)=x(1)-400;g(2)=1.1*x(1)+x(2)-440;g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)-532.4;ceq=0主程序youh4.m 为:x0=[1;1;1;1];vlb=[0;0;0;0];vub=[];A=[];b=[];Aeq=[];beq=[];[x,fval]=fmincon('fun44',x0,A,b,Aeq,beq,vlb,vub,'mycon1')(五) 运行结果题一:运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米.题二:运行结果为:x=23.9025, 62.4977, z=6.4135e+003即甲的产量为23.9025,乙的产量为62.4977,最大利润为6413.5.题三:运行结果为:x1=86.2;x2=104.2;x3=126.2;x4=152.8;z=43.1(六) 相关知识用Matlab 解无约束优化问题一元函数无约束优化问题21),(m in x x x x f ≤≤常用格式如下:(1)x= fminbnd (fun,x1,x2)(2)x= fminbnd (fun,x1,x2 ,options)(3)[x ,fval]= fminbnd (...)(4)[x ,fval ,exitflag]= fminbnd (...)(5)[x ,fval ,exitflag ,output]= fminbnd (...)其中(3)、(4)、(5)的等式右边可选用(1)或(2)的等式右边。

非线性规划的MATLAB解法

非线性规划的MATLAB解法
特点
非线性规划问题通常具有多个局部最 优解,解的稳定性与初始条件有关, 需要使用特定的算法来找到全局最优 解。
非线性规划的应用场景
数据拟合、模型选择、参 数估计等。
生产计划、物流优化、设 备布局等。
投资组合优化、风险管理、 资本预算等。
金融
工业
科研
非线性规划的挑战与解决方法
挑战
非线性规划问题可能存在多个局部最优解,且解的稳定性与初始条件密切相关,需要使用特定的算法来找到全局 最优解。
共轭梯度法
总结词
灵活、适用于大型问题、迭代方向交替
详细描述
共轭梯度法结合了梯度下降法和牛顿法的思 想,通过迭代更新搜索方向,交替使用梯度 和共轭方向进行搜索。该方法适用于大型非 线性规划问题,具有较好的灵活性和收敛性。
04
非线性规划问题的约束 处理
不等式约束处理
处理方式
在Matlab中,可以使用 `fmincon`函数来求解非线性规划 问题,该函数可以处理不等式约 束。
要点二
详细描述
这类问题需要同时考虑多个目标函数,每个目标函数可能 有不同的优先级和权重。在Matlab中,可以使用 `gamultiobj`函数来求解这类问题。该函数可以处理具有 多个目标函数的约束优化问题,并允许用户指定每个目标 函数的权重和优先级。
谢谢观看
具体操作
将等式约束条件表示为线性方程组,并使用`Aeq`参 数指定系数矩阵,使用`beq`参数指定常数向量。
注意事项
等式约束条件需要在可行域内满足,否则会 导致求解失败。
边界约束处理
处理方式
边界约束可以通过在目标函数中添加惩罚项来处理,或者使用专门的优化算法来处理。
具体操作
在目标函数中添加惩罚项时,需要在目标函数中添加一个与边界约束相关的项,并调整 其权重以控制边界约束的重要性。

MATLAB求解非线性规划

MATLAB求解非线性规划

MATLAB求解非线性规划非线性规划是一类涉及非线性目标函数或非线性约束条件的数学规划问题。

MATLAB是一种强大的数学计算软件,可以用来求解非线性规划问题。

本文将介绍MATLAB中求解非线性规划问题的方法。

1. 目标函数和约束条件在MATLAB中,非线性规划问题可以表示为以下形式:minimize f(x)subject to c(x)≤0ceq(x)=0lb≤x≤ub其中f(x)是目标函数,c(x)和ceq(x)是不等式和等式约束条件,lb和ub是变量的下限和上限。

2. 求解器MATLAB提供了多种求解器可以用来求解非线性规划问题。

其中常用的有fmincon和lsqnonlin。

lsqnonlin可以用来求解非线性最小二乘问题。

它使用的是Levenberg-Marquardt算法,能够有效地求解非线性最小二乘问题,并且具有较好的收敛性。

3. 示例下面我们来看一个求解非线性规划问题的示例。

假设我们要求解以下非线性规划问题:首先,我们需要定义目标函数和约束条件。

在MATLAB中,我们可以使用anonymous function来定义目标函数和约束条件。

代码如下:f = @(x)x(1)^2+2*x(2)^2+3*x(3)^2;c = @(x)[x(1)+x(2)+x(3)-4, x(1)*x(2)+x(1)*x(3)+x(2)*x(3)-3];ceq = [];lb = [0,0,0];接下来,我们使用fmincon求解非线性规划问题。

代码如下:[x,fval,exitflag,output] = fmincon(f,[1,1,1],[],[],[],[],lb,[],@(x)c(x));其中,第一个参数是目标函数,第二个参数是变量的初值,第三个参数是不等式约束条件,第四个参数是等式约束条件,第五个参数是变量的下限,第六个参数是变量的上限,第七个参数是非线性约束条件,最后一个参数是opts,可以设置其他求解参数。

非线性规划的Matlab解法

非线性规划的Matlab解法

⾮线性规划的Matlab解法
编写M ⽂件fun1.m 定义⽬标函数
function f=fun1(x);
% 定义⽬标函数
f=sum(x.^2)+8;
% .^2是矩阵中的每个元素都求平⽅。

^2是求矩阵的平⽅或两个相同的矩阵相乘,要求矩阵为⽅阵。

编写M⽂件fun2.m定义⾮线性约束条件
function[g,h]=fun2(x);
%定义⾮线性约束条件
g=[-x(1)^2+x(2)-x(3)^2
x(1)+x(2)^2+x(3)^2-20];
%⾮线性约束不等式条件
h=[-x(1)-x(2)^2+2
x(2)+2*x(3)^2-3];
编写主程序⽂件example2.m 如下:
[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2',optimset('largescale','off'))
%这是对寻优函数搜索⽅式的设定,
%LargeScale指⼤规模搜索,off表⽰在规模搜索模式关闭,Simplex指单纯形算法,on表⽰该算法打开。

%display指结果⽅式,有四种off | iter | notify | final,
%iter⼤概是指中间结果每步都显⽰,⼀般选择final显⽰最终结果。

在MATLAB运⾏窗⼝直接输⼊optimset可显⽰所有可设置的参数及对应的可选择的参数值。

MATLAB线性规划非线性规划

MATLAB线性规划非线性规划

解 编写M文件xxgh1.m如下: c=[-0.4 -0.28 -0.32 -0.72 -0.64 -0.6]; A=[0.01 0.01 0.01 0.03 0.03 0.03;0.02 0 0 0.05 0 0;0 0.02 0 0 0.05 0;0 0 0.03 0 0 0.08]; b=[850;700;100;900];
返 回
解答
线性规划模型的一般形式
目标函数和所有的约束条件都是设计变量 的线性函数.
min u ci xi
i 1
n
n aik xk bi , i 1, 2,..., n. s.t. k 1 x 0, i 1, 2,..., n. i
矩阵形式: min u cx Ax b s.t. vlb x vub
Aeq=[]; beq=[];
vlb=[0;0;0;0;0;0]; vub=[];
To MATLAB (xxgh1)
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
例2
min z 6x1 3x2 4x3 s.t. x1 x2 x3 120 x1 30 0 x2 50 x3 20
编写M文件xxgh3.m如下: f = [13 9 10 11 12 8]; A = [0.4 1.1 1 0 0 0 0 0 0 0.5 1.2 1.3]; b = [800; 900]; Aeq=[1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1]; To MATLAB (xxgh3) beq=[400 600 500]; vlb = zeros(6,1); vub=[]; [x,fval] = linprog(f,A,b,Aeq,beq,vlb,vub)

非线性规划matlab求解

非线性规划matlab求解

在matlab 中非线性规划的数学模型可写成一下形式:minf(X)s.t. Ax ≪B Aeq .x =Beq C (x )≪0Ceq x =0其中,f(x)是标量函数;A,B,Aeq,Beq 是相应维数的矩阵和向量;C(x),Ceq(x)是非线性向量函数。

Matlab 中的命令是X=FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS)它的返回值是向量x 。

其中,FUN 是用M 文件定义的函数f(x)。

X0是X 的初始值。

A ,B ,Aeq ,Beq 定义了线性约束AX ≪B ,Aeq*X=Beq ,如果没有线性约束,则A=[],B=[],Aeq=[],Beq=[]。

LB 和UB 是变量x 的下界和上界,如果上界和下界没有约束,则LB=[],UB=[];如果X 无下界,则LB=-inf;如果X 无上界,则UB=inf 。

NONLCON 是用M 文件定义的非线性向量函数C(x),Ceq(x)。

OPTIONS 定义了优化函数,可以使用MATLAB 默认的参数设置。

例求解下列非线性规划问题:max z= X 1+ X 2+ X 3+ X 4 s.t.x 1≪4001.1x 1+x 2≪4401.21x 1+1.1x 2+x 3≪4841.331x 1+1.21x 2+1.1x 3+x 4≪532.4X i≫0,i =1,2,3,4(1)编写M 文件,定义目标函数:function f=fun44(x)f=-(sqrt(x(1))+sqrt(x(2))+sqrt(x(3))+sqrt(x(4)) );(2)编写M 文件,定义约束条件function[g,ceq]=mycon1(x)g(1)=x(1)-400;g(2)=1.1*x(1)+x(2)-440;g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)-532.4;ceq=0(3)编写主程序x0=[1;1;1;1];lb=[0;0;0;0];ub=[];A=[];b=[];Aeq=[];beq=[];[x,fval] = fmincon('fun44',x0,A,b,Aeq,beq,lb,ub,'mycon1')输出结果x =86.1883104.2879 126.1883 152.6879fval =-43.0860。

非线性规划及matlab应用

非线性规划及matlab应用

非线性规划及matlab 应用目录1.概念 ............................................................................................................................................... 1 2.二次规划........................................................................................................................................ 1 3.一般非线性规划 ............................................................................................................................ 2 4. 案例:供应与选址 . (4)1.概念定义:如果目标函数或约束条件中至少有一个是非线性函数时的最优化问题就叫做非线性规划问题.其它情况: 求目标函数的最大值或约束条件为小于等于零的情况,都可通过取其相反数化为上述一般形式.2.二次规划用MATLAB 软件求解,其输入格式如下: 1. x=quadprog(H,C,A,b); 2. x=quadprog(H,C,A,b,Aeq,beq); 3. x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB); 4. x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0); 5. x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0,options); 6. [x,fval]=quadprog(...); 7. [x,fval,exitflag]=quaprog(...); 实例1:2212121122121212min (,)2622..2220,0=--+-++≤-+≤≥≥f x x x x x x x x s tx x x x x x写成标准形式标准型为: Min Z= 21X T HX+c T Xs.t. AX<=b beq X Aeq =⋅ VLB ≤X ≤VUB111222 1 -12min (,) 1 26Tx x z x x x x ⎛⎫⎛⎫⎛⎫⎛⎫-=+ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪--⎝⎭⎝⎭⎝⎭⎝⎭1212 1 121 2200x x x x ⎛⎫⎛⎫⎛⎫≤ ⎪ ⎪ ⎪ ⎪-⎝⎭⎝⎭⎝⎭⎛⎫⎛⎫≤ ⎪ ⎪ ⎪⎝⎭⎝⎭Matlab 命令H=[1 -1; -1 2]; c=[-2 ;-6]; A=[1 1; -1 2]; b=[2;2]; Aeq=[]; beq=[]; VLB=[0;0]; VUB=[];[x,z]=quadprog(H,c,A,b,Aeq,beq,VLB,VUB)运算结果为:x =0.6667 1.3333 z = -8.22223.一般非线性规划标准型为:min ()..()0()0≤≤=≤≤F X s t AX bG X Ceq X VLB X VUB其中X 为n 维变元向量,G(X)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划、二次规划中相同.非线性规划求解的函数是fmincon,命令的基本格式如下: ● x=fmincon(‘fun’,X0,A,b)● x=fmincon(‘fun’,X0,A,b,Aeq,beq)● x=fmincon(‘fun’,X0,A,b, Aeq,beq,VLB,VUB)● x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’)● x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options) ● [x,fval]= fmincon(...)● [x,fval,exitflag]= fmincon(...)● [x,fval,exitflag,output]= fmincon(...) 1.fun 为目标函数2.x0为初始值3.A 是不等式约束AX<=b 的系数矩阵4.b 是不等式约束AX<=b 的常数项4.Aeq 是等式约束AeqX=beq 的系数矩阵,5.beq 是等式约束AeqX=beq 的常数项,6.lb 是X 的下限,7.ub 是X 的上限,8.nonlcon 为非线性不等式约束 9.option 为设置fmincon 的参数 注意:fmincon 函数提供了大型优化算法和中型优化算法。

matlab中的非线性规划求解fmincon函数

matlab中的非线性规划求解fmincon函数

这个函数的基本形式为x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)其中fun为你要求最小值的函数,可以单写一个文件设置函数,如以上给的例子中。

1.如果fun中有N个变量,如x y z, 或者是X1, X2,X3, 什么的,自己排个顺序,在fun 中统一都是用x(1),x(2)....x(n) 表示的。

2. x0, 表示初始的猜测值,大小要与变量数目相同3. A b 为线性不等约束,A*x <= b, A应为n*n阶矩阵,学过线性代数应不难写出A和b4 Aeq beq为线性相等约束,Aeq*x = beq。

Aeq beq同上可求5 lb ub为变量的上下边界,正负无穷用 -Inf和Inf表示, lb ub应为N阶数组6 nonlcon 为非线性约束,可分为两部分,非线性不等约束 c,非线性相等约束,ceq可按下面的例子设置function [c,ce] = nonlcon1(x)c = -x(1)+x(2)^2-4;ce = []; % no nonlinear equality constraints7,最后是options,可以用OPTIMSET函数设置,见上例具体可见OPTIMSET函数的帮助文件。

对于优化控制,MATLAB提供了18个参数,这些参数的具体意义为:options(1)-参数显示控制(默认值为0)。

等于1时显示一些结果。

&nbsp;&nbsp;&nbsp;&nbsp;options(2)-优化点x的精度控制(默认值为1e-4)。

options = optimset('TolX',1e-8)&nbsp;&nbsp;&nbsp;&nbsp;options(3)-优化函数F的精度控制(默认值为1e-4)。

options = optimset('TolFun',1e-10)&nbsp;&nbsp;&nbsp;&nbsp;options(4)-违反约束的结束标准(默认值为1e-6)。

用MATLAB求解非线性规划

用MATLAB求解非线性规划

例3
f ( x) = e
s.t.
x
1
2 (4 x1
+
2 2 x2
+ 4 x1x2 + 2 x2 + 1)
x1+x2=0 1.5+x1x2 - x1 - x2 ≤ 0 -x1x2 –10≤ 0
1 先建立M文件 fun4.m,定义目标函数: 1.先建立M文件 fun4.m,定义目标函数: 先建立 定义目标函数
2. 若约束条件中有非线性约束:G(X) ≤ 0 或Ceq(X)=0, 则建立M文件nonlcon.m定义函数G(X)与Ceq(X): function [G,Ceq]=nonlcon(X) G=... Ceq=...
3. 建立主程序.非线性规划求解的函数是fmincon,命令的基本格 式如下: (1) x=fmincon(‘fun’,X0,A,b) (2) x=fmincon(‘fun’,X0,A,b,Aeq,beq) (3) x=fmincon(‘fun’,X0,A,b, Aeq,beq,VLB,VUB)
H=[1 -1; -1 2]; c=[-2 ;-6];A=[1 1; -1 2];b=[2;2]; Aeq=[];beq=[]; VLB=[0;0];VUB=[]; [x,z]=quadprog(H,c,A,b,Aeq,beq,VLB,VUB)
3、运算结果 运算结果为: 运算结果 x =0.6667 1.3333
function f=fun4(x); f=exp(x(1)) *(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
2.再建立M文件 .再建立 文件 文件mycon.m定义非线性约束: 定义非线性约束: 定义非线性约束

数学实验报告——利用MALTAB进行非线性规划

数学实验报告——利用MALTAB进行非线性规划

㈡简要分析
本题是一道比较简单的非线性规划求解问题, 不涉及数学建模以及应用分析 等问题,只需要将所给问题转化为 MATLAB 代码进行处理。这里可以采用不同的 算法,并对比进行分析。
㈢方法与公式
1、求解规划方法
求解本题可以考虑几种规划。 对于第(1)组约束来说,仅含有上下界约束,可以考虑使用 SQP 方法或者置 信域方法;但是考虑到本题规模较小,这里仅采用 SQP 方法。(事实是,设定使 用大规模算法后,MATLAB 仍旧自动使用 SQP 完成计算,因而无法进行对比); 对第(2)组约束来说,仅可以使用 SQP 方法; 对第(3)组约束来说,可以使用 SQP 方法,也可以利用后两个等式把规划化 化简后再使用 SQP 方法。
5、脚本 2
5
v1 = -10*ones(1,4); v2 = 10*ones(1,4); x00 = [-3,-1,-3,-1]; x01 = -[-3,-1,-3,-1]; x02 = [10,-20,5,3]; x03 = [-5,10,15,-20]; opt = optimset('largeScale','off','MaxFunEvals',4000,'MaxIter', 1000,'Algorithm','active-set'); [x(1,:),f1,exitflag1,out(1)] = fmincon('fun',x00,[],[],[],[],v1,v2,@edge3,opt); [x(2,1:2),f2,exitflag2,out(2)] = fmincon('fun1',x00(2:3),[],[],[],[],v1(1:2),v2(1:2),@edge 31,opt); [x(3,:),f3,exitflag3,out(3)] = fmincon('fun',x01,[],[],[],[],v1,v2,@edge3,opt); [x(4,1:2),f4,exitflag4,out(4)] = fmincon('fun1',x01(2:3),[],[],[],[],v1(1:2),v2(1:2),@edge 31,opt); [x(5,:),f5,exitflag5,out(5)] = fmincon('fun',x02,[],[],[],[],v1,v2,@edge3,opt); [x(6,1:2),f6,exitflag6,out(6)] = fmincon('fun1',x02(2:3),[],[],[],[],v1(1:2),v2(1:2),@edge 31,opt); [x(7,:),f7,exitflag7,out(7)] = fmincon('fun',x03,[],[],[],[],v1,v2,@edge3,opt); [x(8,1:2),f8,exitflag8,out(8)] = fmincon('fun1',x03(2:3),[],[],[],[],v1(1:2),v2(1:2),@edge 31,opt); answer = zeros(1:8); for i = 1:8 out(i) end for j = 1:4 x(2*j,3)=x(2*j,1); x(2*j,1) = -x(2*j,2);

Matlab非线性规划应用

Matlab非线性规划应用

1 绪论1.1 课题的背景1.1.1 Matlab简介MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。

它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

MATLAB和Mathematica、Maple并称为三大数学软件。

它在数学类科技应用软件中在数值计算方面首屈一指。

MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB 成为一个强大的数学软件。

在新的版本中也加入了对C,FORTRAN,C++,JA VA 的支持。

可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。

MATLAB的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。

附加的工具箱(单独提供的专用MATLAB 函数集)扩展了MATLAB环境,以解决这些应用领域内特定类型的问题。

1.1.2 非线性规划(nonlinear programming)非线性规划是具有非线性约束条件或目标函数的数学规划,是运筹学的一个重要分支。

MATLAB非线性规划

MATLAB非线性规划

MATLAB⾮线性规划MATLAB求解⾮线性规划可以使⽤ fmincon 函数,其数学模型可以写成如下形式:x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)其中,fun是⽬标函数,x0是初始值,A,b 规定线性不等式约束条件,Aeq,beq 规定线性等式约束条件,lb 规定可⾏解的数值下限,ub规定可⾏解的数值上限。

nonlcon是包含⾮线性约束条件(C(x),Ceq(x))的函数。

使⽤options所指定的优化选项执⾏最⼩化。

例如,使⽤MATLAB计算如下⾮线性规划。

x0 = [0.5,0];A = [1,-2];b = 1;Aeq = [2,1];beq = 1;x = fmincon(fun,x0,A,b,Aeq,beq)带有边界约束的,例如:fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1));lb = [0,0];ub = [1,2];% 没有线性约束,因此将这些参数设置为 []。

A = [];b = [];Aeq = [];beq = [];% 尝试使⽤⼀个位于区域中部的初始点。

x0 = (lb + ub)/2;x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)带有⾮线性约束的,例如:%% 主函数options=optimset('largescale','off');x = fmincon(@fun,rand(3,1),[],[],[],[],zeros(3,1),[], @nonlcon, options)%% ⽬标函数function f=fun(x)f=sum(x.^2)+8;end%% ⾮线性约束条件function [c,ceq]=nonlcon(x)c=[-x(1)^2+x(2)-x(3)^2x(1)+x(2)^2+x(3)^3-20]; %⾮线性不等式约束ceq=[-x(1)-x(2)^2+2x(2)+2*x(3)^2-3]; %⾮线性等式约束end特别注意:⽬标函数为最⼩化函数,fun是⼀个函数,fun接受向量或数组 x,并返回实数标量 f,即在 x 处计算的⽬标函数值。

MATLAB非线性规划问题

MATLAB非线性规划问题

封面作者:PanHongliang仅供个人学习一.非线性规划课题实例1 表面积为36平方M的最大长方体体积.建立数学模型:设x、y、z分别为长方体的三个棱长,f为长方体体积.max f = x y (36-2 x y)/2 (x+y)实例2 投资决策问题某公司准备用5000万元用于A、B两个工程的投资,设x1、x2分别表示配给工程A、B的投资.预计工程A、B的年收益分别为20%和16%.同时,投资后总的风险损失将随着总投资和单位投资的增加而增加,已知总的风险损失为2x12+x22+(x1+x2)2.问应如何分配资金,才能使期望的收益最大,同时使风险损失为最小.建立数学模型:max f=20x1+16x2-λ[2x12+x22+(x1+x2)2]s.t x1+x2≤5000x 1≥0,x2≥0目标函数中的λ≥0是权重系数.由以上实例去掉实际背景,其目标函数与约束条件至少有一处是非线性的,称其为非线性问题.非线性规划问题可分为无约束问题和有约束问题.实例1为无约束问题,实例2为有约束问题.二.无约束非线性规划问题:求解无约束最优化问题的方法主要有两类:直接搜索法(Search method)和梯度法(Gradient method),单变量用fminbnd,fminsearch,fminunc。

多变量用fminsearch,fminnuc 1.fminunc函数调用格式:x=fminunc(fun,x0)x=fminunc(fun,x0,options)x=fminunc(fun,x0,options,P1,P2)[x,fval]=fminunc(…)[x,fval, exitflag]=fminunc(…)[x,fval, exitflag,output]=fminunc(…)[x,fval, exitflag,output,grad]=fminunc(…)[x,fval, exitflag,output,grad,hessian]=fminunc(…)说明:fun为需最小化的目标函数,x0为给定的搜索的初始点.options指定优化参数.返回的x为最优解向量;fval为x处的目标函数值;exitflag描述函数的输出条件;output返回优化信息;grad返回目标函数在x处的梯度.Hessian返回在x处目标函数的Hessian矩阵信息.例1 :求程序:通过绘图确定一个初始点:[x,y]=meshgrid(-10:.5:10)。

MATLAB求解非线性规划

MATLAB求解非线性规划
MATLAB基础及求解非线性规划
经济管理学院:李继红
1 Matlab简介及操作环境
1.1 Matlab简介
由美国 DOCTORCLEVER MOLER 于 1980 年 开始研制并于1984年推出正式版本。以后陆续推 出了4.0,4.2和5.0版本,1999年初推出了功能更 为强大的5.3版本,2001年推出6.1版本,2003年 推出了6.5版本。2004年6月正式推出7.0版本。 MATLAB是建立在 C 语言基础上的高级语言, 并建立了自已独特的语言环境。
plot3(x,y,z,’s’)
plot3(x1,y1,z1,’s1’,x2,y2,z2,’s2’,·· ·) plot3例命:令t将=绘0制:二pi维/5图0形:1的0函*p数i;plot的特性扩展到三维空间。函 数格式除p了lo包t括3(第s三in维(t的),信co息s((t)比,t如);Z方向)之外,与二维函数
1、for循环
li1_6_1.m
• For循环可以按指定的次数重复执行一系列语 句。For循环的常见结构:
• for 变量 =表达式 循环语句
end
这里循环语句可以是一条或 多条,并且可以是变量的函 数
• 如:for k=初值: 增值: 终值
例:
% mzmfor.m
clear all
N=input('请输入矩阵的维数 N:');
6.4 switch-case语句
一般switch-case语句格式为: switch num case n1 command case n2 command case n3 command . . .otherwise Command
li1_6_4.m
7 数据的可视化

用Matlab求解非线性规划

用Matlab求解非线性规划

用Matlab 求解非线性规划1.无约束优化问题)(min x f n Rx ∈,其中向量x 的n 个分量i x 都是决策变量,称)(x f 目标函数。

用Matlab 求解:先建立函数文件mbhs.m ,内容是)(x f 的表达式;再回到Matlab 命令区输入决策变量初值数据x0,再命令[x,fmin]=fminunc(@mbhs,x0) 如:)32(m in 22212x x R x +∈的最优解是.)0,0(T x = 用Matlab 计算,函数文件为 function f=mbhs(x)f=2*x(1)^2+3*x(2)^2;再输入初值 x0=[1;1]; 并执行上述命令,结果输出为 x =? fmin =? 略。

2.约束优化问题.),,...,2,1(,0)(),,...,2,1(,0)(..)(min U x L m i x h p i x g t s x f i i Rx n ≤≤===≤∈其中:向量x 的n 个分量i x 都是决策变量,称)(x f 目标函数、)(x g i 等式约束函数、)(x h i 不等式约束函数、L 下界、U 上界。

用Matlab 求解:先把模型写成适用于Matlab 的标准形式.,0)(,0)(,,..)(min U x L x h x g beq x Aeq b Ax t s x f n Rx ≤≤=≤=≤∈ 约束条件中:把线性的式子提炼出来得前两个式子;后三个式子都是列向量。

(如:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡===⨯⨯)()()([],[],,,11262x g x g x g beq Aeq b A p )再建立两个函数文件:目标函数mbhs.m ;约束函数yshs.m再回到Matlab 命令区,输入各项数据及决策变量初值数据x0,执行命令[x,fmin]=fmincon(@mbhs,x0,A,b,Aeq,beq,L,U,@yshs)例:单位球1222≤++z y x 内,曲面xy y x z 1.05.022--+=的上方,平面008.0=-++z y x 之上(不是上面),满足上述三个条件的区域记为D ,求函数)1cos()sin(2-+-+-z e z y x e xy xyz 在D 上的最大值、最大值点。

工程优化 6-解非线性规划的MATLAB指令

工程优化 6-解非线性规划的MATLAB指令

练习:利用Matlab求解下列最优化问题
( 1)
1 2 1 2 min f x1 2 x2 x1 x2 2 2 2x1+3x2 6 s.t x1+4x2 5 x1,x2 0
2 2 (2) min f ( x ) e x1 (4 x1 2 x2 4 x1 x2 2 x2 1)
(4) 若修改主程序gying2.m, 取初值为上面的计算结果:
x0=[ 3.0000 5.0000 0.0707 7.0000 0 0.9293 0 0 3.9293 0 6.0000 10.0707 6.3875 4.3943 5.7511 7.1867]’
得结果为:
x=[3.0000 5.0000 0.3094 7.0000 0.0108 0.6798 0 0 3.6906 0 5.9892 10.3202 5.5369 4.9194 5.8291 7.2852]’ fval =103.4760 exitflag = 1 总的吨千米数比上面结果略优. (5) 若再取刚得出的结果为初值, 却计算不出最优解.
(6) 若取初值为: x0=[3 5 4 7 1 0 0 0 0 0 5 11 5.6348 4.8687 7.2479 7.7499]', 则计算结果为: x=[3.0000 5.0000 4.0000 7.0000 1.0000 0 0 0 0 0 5.0000 11.0000 5.6959 4.9285 7.2500 7.7500]’ fval =89.8835 exitflag = 1 总的吨千米数89.8835比上面结果更好.
小结:用Matlab求解非线性规划问题,基本步骤:
1. 首先建立M文件fun.m,定义目标函数 f(x): function f=fun(x); f= f(x); 2.若约束条件中有非线性约束:g(x) 0

多元非线性规划Matlab,非线性规划MATLAB代码

多元非线性规划Matlab,非线性规划MATLAB代码

多元⾮线性规划Matlab,⾮线性规划MATLAB代码下⾯是三个⾮线性规划领域的算法。

课堂上给予了详细的讲解,在实践环节让学⽣编程实现,从⽽可以实验复杂⼀些的例⼦,加深对算法的理解。

下⾯共有四个程序grad,simplelinesearch,bfgs和phr,全部使⽤MATLAB语⾔编写。

这些代码远未完善,可修改余地很⼤,仅供教学之⽤。

function gradf=grad(hfun,x)%GRAD 数值法求函数在给定点处的导数值(⼀元函数)或梯度(多元函数)% gradf = grad(hfun,x0) hfun是函数句柄或内联函数,x0是⼀定点或⼀批点(按列);返回% 值gradf是函数在该点处的导数或梯度。

% 要求函数能对成批的点求函数值。

⽐如:feval(hfun,X)返回⼀个与X同列的⾏向量,对应于以% X每⼀列作为函数⾃变量⽽求得的函数值。

%% Reference: 《最优化计算原理与算法程序设计》, 粟塔⼭等编著, 国防科技⼤学出版社% (湖南), 2001.%% $Author: WBC $ $Date: 2003/10/25 $n = length(x);h=1e-3; % 数值法求梯度的步长w1=zeros(n,1);%h/2w2=w1; %-h/2w3=w1; %hw4=w1; %-hfor i=1:nx(i)=x(i)+h/2;w1(i)=hfun(x);x(i)=x(i)-h;w2(i)=hfun(x);x(i)=x(i)-h/2;w4(i)=hfun(x);x(i)=x(i)+2*h;w3(i)=hfun(x);x(i)=x(i)-h;endgradf=(8*(w1-w2)-(w3-w4))/(6*h);function [fv,x,lambda,exitflag]=simplelinesearch(hf,rho,l,u,lambda0,fv0,x0,g,d)%LINESEARCH 简单线搜索%输⼊参数:% hf -- 函数句柄,⽬标函数% rho -- 实标量,简单线搜索的参数,介于0到0.5之间的数% l -- 实标量,简单线搜索的参数,介于0到1之间的数% u -- 实标量,简单线搜索的参数,介于0到1之间的数,满⾜u>l% alpha0 -- 实标量,步长的初始值% fv0 -- 实标量,⼀维搜索的初始⽬标函数值,即 hf(x0+alpha_0*d)% x0 -- 实列向量,当前点% g -- 实列向量,函数hf在当前点处的梯度% d -- 实列向量,函数hf在当前点处的搜索⽅向%输出参数:% fv -- 实标量,⼀维搜索完成后的⽬标函数值,即 hf(x0+alpha*d)% x -- 实列向量,下⼀个点% lambda -- 实标量,可接受步长% exitflag -- 整型标量,等于0表⽰线搜索成功,等于-1表⽰线搜索失败(内部迭代次数⼤于iterMax) %参考⽂献:倪勤,最优化⽅法与程序设计,科学出版社% Date: 2009/12/20lambda = lambda0;x = x0;i = 0;imax = 30; % 最⼤迭代次数,⽤户可以修改% 主循环gd = dot(g, d);while i <= imaxfv = hf(x + lambda*d);i = i + 1;if fv < fv0 + lambda * rho * gd;x = x + lambda*d;exitflag = 0;return;endlambda_bar = -gd*lambda^2*0.5/(fv-fv0-lambda*gd);lambda = min(lambda_bar, u*lambda);endexitflag=0;if i >= imax && fv >= fv0fv = fv0;x = x0;lambda = 0;exitflag = -1;endfunction [fv, x, exitflag] = bfgs(hf, x0, epsi)%BFGS ⽆约束问题的BFGS算法%输⼊参数:% hf -- 函数句柄,⽬标函数% x0 -- 实列向量,初始点% epsi -- 实标量,终⽌误差%输出参数:% fv -- 实标量,⼀维搜索完成后的⽬标函数值,即 hf(x0+alpha*d)% x -- 实列向量,下⼀个点% exitflag -- 整型标量,等于0表⽰成功,等于-1表⽰失败(迭代次数⼤于iter_max) %参考⽂献:倪勤,最优化⽅法与程序设计,科学出版社% Date: 2009/12/20%%初始化%k = 0;rho = 0.01;l = 0.15;u = 0.85;x =x0;fv = hf(x);n = length(x);H = eye(n);iter_max = 100;%检查终⽌条件%g = grad(hf, x);while norm(g) > epsi && k<= iter_maxd = -H*g;lambda0 = 1.0;%%做线搜索,如果成功,则返回更新当前点%[fv, x, lambda, exitflag] = simplelinesearch(hf, rho, l, u, lambda0, fv, x, g, d); if exitflag == -1 %重开始H = eye(n);else%%更新H%g_old = g;g = grad(hf, x);p = lambda*d;q = g- g_old;Hq = H*q;pq = p'*q;qHq = q'*Hq;v = sqrt(qHq) * (p/pq-Hq/qHq);H = H + p*p'/pq - Hq*Hq'/qHq + v*v';endk = k+1;endexitflag = 0;if k > iter_maxexitflag = -1;endfunction [fv, x, exitflag] = phr(hf, cf, x0)%输⼊参数:% hf -- 函数句柄,⽬标函数% cf -- 函数句柄,约束条件,包含等式约束和不等式约束% x0 -- 实列向量,初始点%输出参数:% fv -- 实标量,⼀维搜索完成后的⽬标函数值,即 hf(x0+alpha*d)% x -- 实列向量,下⼀个点% exitflag -- 整型标量,等于0表⽰成功,等于-1表⽰失败(迭代次数⼤于iter_max) %参考⽂献:倪勤,最优化⽅法与程序设计,科学出版社% Date: 2009/12/20%%初始化%epsi = 1.0e-4;k = 0;sigma = 0.8;c = 1.5;theta = 0.8;x = x0;[ce, ci] = cf(x);l = length(ce);li = length(ci);lambda = ones(l+li, 1) * 0.1;iter_max = 100;phi = 0;if lphi = phi + ce'*ce;endif liphi = phi + sum(min(ci,lambda(l+1:end)/sigma).^2);endwhile phi > epsi && k <= iter_max%%hmf = @(x) mfun(x, hf, cf,lambda, sigma);[fv, x] = bfgs(hmf, x, epsi);[ce, ci] = cf(x);phi_old = phi;phi = 0;if lphi = phi + ce'*ce;endif liphi = phi + sum(min(ci,lambda(l+1:end)/sigma).^2); endif phi > epsi%%更新罚因⼦%if k >= 2 && phi/phi_old > thetasigma = c * sigma;end%%更新乘⼦%if llambda(1:l) = lambda(1:l) - sigma*ce;endif lilambda(l+1:end) = max(0, lambda(l+1:end) - sigma*ci); endendk = k+1;endexitflag = 0;fv = hf(x);exitflag = -1;end%%乘⼦罚函数%function fv = mfun(x, hf, cf, lambda, sigma)[ce, ci] = cf(x);l = length(ce);li = length(ci);fv = 0;fv = fv + hf(x);if lfv = fv - lambda(1:l)'*ce + 0.5*sigma*ce'*ce;endif lifv = fv + 0.5/sigma*sum(max(0,lambda(l+1:end) - sigma*ci).^2 - lambda(l+1:end).^2); end这⾥是演⽰代码:%% bfgs演⽰%教材P328.1-3hf1 = @(x) 100 * (x(2) - x(1).^2).^2 + (1 - x(1)).^2; %banana函数hf2 = @(x) (6 + x(1) + x(2)).^2 + (2 - 3*x(1) - 3*x(2) - x(1)*x(2)).^2;hf3 = @(x) x(1).^2 - 2*x(1)*x(2) + 4*x(2).^2 + x(1) - 3*x(2);[fv,x,exitflag]=bfgs(hf1,[0;0],0.001);fvxexitflag[fv,x,exitflag]=bfgs(hf2,[4;6],0.001);fvxexitflag[fv,x,exitflag]=bfgs(hf3,[1;1],0.001);fvexitflag%% phr算法%教材P414.5hf1 = @(x) x(1).^2 + x(2).^2;cf1 = @(x) deal([], x(1) - 1);hf2 = @(x) x(1) + (x(2) + 1).^2/3;cf2 = @(x) deal([],[x(1); x(2) - 1]);%教材P392.2hf3 = @(x) x(1).^2 + x(1).*x(2) + 2*x(2).^2 - 6*x(1) - 2*x(2) - 12*x(3);cf3 = @(x) deal(x(1)+x(2)+x(3)-2,...[x(1) - 2*x(2) + 3; x(1); x(2); x(3)]);%其它例⼦hf4 = @(x) 6*x(2)*x(5) + 7*x(1)*x(3) + 3*x(2)^2;cf4 = @(x) deal([3*x(2)^2*x(5) + 3*x(1)^2*x(3) - 20.875;x(1) - 0.3*x(2)],...[-x(1) + 0.2*x(2)*x(5) + 71-0.9*x(3) + x(4)^2 + 67x(3)x(5) - 1-x(3) + 20x(4) - 0.1*x(5)-x(4) + 0.5*x(5)x(3) - 0.9*x(5)]);hf5 = @(x) exp(x(1)) * (4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + 1);cf5 = @(x) deal([], [x(1) + x(2) - x(1)*x(2) - 1.5; x(1)*x(2) + 10]);[fv, x, exitflag] = phr(hf1, cf1, [3;2]); fv x exitflag [fv, x, exitflag] = phr(hf2, cf2, [3;2]); fv x exitflag [fv, x, exitflag] =phr(hf3, cf3, [1;1;0]); fv x exitflag [fv, x, exitflag] = phr(hf4, cf4, [1; 4; 5; 2; 5]); fv x exitflag [fv, x, exitflag] = phr(hf5, cf5, [-1; 1]); fv x exitflag。

matlab非线性规划

matlab非线性规划
i1
1
giX
m
m
其中 r 称 lngiX或r
i1
i1
gi1X为障碍 r为 项障 ,碍因子
这样问1题 )( 就转化为求一 值系 问列 题极 :
XmDi0nIX,rk 得X( k rk)
10
内点法的迭代步骤
( 1 ) 给 定 允 许 误 差 0 , 取 r 1 0 , 0 1 ;
( 2 ) 求 出 约 束 集 合 D 的 一 个 内 点 X 0 D 0 , 令 k 1 ;
7. [x,fval,exitflag]=quaprog(...);
8. [x,fval,exitflag,output]=quaprog(...);
15
例1 min f(x1,x2)=-2x1-6x2+x12-2x1x2+2x22 s.t. x1+x2≤2 -x1+2x2≤2 x1≥0, x2≥0
17
3. 建立主程序.非线性规划求解的函数是fmincon,命令的基本格 式如下:
(1) x=fmincon(‘fun’,X0,A,b) (2) x=fmincon(‘fun’,X0,A,b,Aeq,beq) (3) x=fmincon(‘fun’,X0,A,b, Aeq,beq,VLB,VUB)
[3] fmincon函数可能会给出局部最优解,这与初值X0的选取 有关。
19
例2 mfi n x 1 2 x 2 1 2 x 1 2 1 2 x 2 2 2x1+3x2 6
s.t x1+4x2 5 x1,x2 0
1、写成标准形式:
mfi n x12x21 2x1 21 2x2 2
2x13x260 s.t. x14x25 0
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一般非线性规划 标准型为:
min F(X)
s.t AX<=b b e q
X A e q =⋅ G(X)0≤ Ceq(X)=0 VLB ≤X ≤VUB
其中X 为n 维变元向量,G(X)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划、二次规划中相同.用Matlab 求解上述问题,基本步骤分三步:
1. 首先建立M 文件fun.m,定义目标函数F (X ): function f=fun(X);
f=F(X);
2. 若约束条件中有非线性约束:G(X)0≤或Ceq(X)=0,则建立M 文件nonlcon.m 定义函数G(X)与Ceq(X): function [G,Ceq]=nonlcon(X) G=...
Ceq=...
3. 建立主程序.非线性规划求解的函数是fmincon,命令的基本格式如下:
(1) x=fmincon (‘fun’,X0,A,b)
(2) x=fmincon (‘fun’,X0,A,b,Aeq,beq)
(3) x=fmincon (‘fun’,X0,A,b, Aeq,beq,VLB,VUB)
(4) x=fmincon (‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’)
(5)x=fmincon (‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options)
(6) [x,fval]= fmincon(...)
(7) [x,fval,exitflag]= fmincon(...)
(8)[x,fval,exitflag,output]= fmincon(...) 注意:
[1] fmincon 函数提供了大型优化算法和中型优化算法。

默认时,若在
fun 函数中提供了梯度(options 参数的GradObj 设置为’on’),并且只有上下界存在或只有等式约束,fmincon 函数将选择大型算法。

当既有等式约束又有梯度约束时,使用中型算法。

[2] fmincon 函数的中型算法使用的是序列二次规划法。

在每一步迭代中求解二次规划子问题,并用BFGS 法更新拉格朗日Hessian 矩阵。

[3] fmincon 函数可能会给出局部最优解,这与初值X0的选取有关。

例2 2221212
121
2min x x x x f ++--= s.t.0
,546
32212121≥≤+≤+x x x x x x
2、先建立M-文件 fun3.m:
function f=fun3(x);
f=-x(1)-2*x(2)+(1/2)*x(1)^2+(1/2)*x(2)^2
3、再建立主程序youh2.m :
x0=[1;1]; 1、写成标准形式:
s.t.
⎪⎭⎫ ⎝⎛≤⎪⎭⎫ ⎝⎛-+-+00546322121x x x x ⎪⎭⎫ ⎝⎛≤⎪⎭⎫ ⎝⎛2100x x 22212121212min x x x x f ++--=
A=[2 3 ;1 4]; b=[6;5];
Aeq=[];beq=[];
VLB=[0;0]; VUB=[];
[x,fval]=fmincon('fun3',x0,A,b,Aeq,beq,VLB,VUB) 4、运算结果为:
x = 0.7647 1.0588
fval = -2.0294
例3
0 100
5.1
..
)1
2
4
2
4(
)
(
min
2 1
2
1
2
1
2
1
2
2
1
2
2
2
1
1

-
-

-
-
+
=
+
+
+
+
+
=
x
x
x
x
x
x
x
x t s
x
x
x
x
x
e
x
f x
1.先建立M文件fun4.m,定义目标函数:
function f=fun4(x);
f=exp(x(1))
*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); 2.再建立M文件mycon.m定义非线性约束:
function [g,ceq]=mycon(x)
g=[x(1)+x(2);1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10]; 3.主程序youh3.m为:
x0=[-1;1];
A=[];b=[];
Aeq=[1 1];beq=[0];
vlb=[];vub=[];
[x,fval]=fmincon('fun4',x0,A,b,Aeq,beq,vlb,vub,'mycon')
3. 运算结果为:
x = -1.2250 1.2250
fval = 1.8951
例4.资金使用问题
设有400万元资金, 要求4年内使用完, 若在一年内使用资金x 万元, 则可得效益x 万元(效益不能再使用),当年不用的资金可存入银行, 年利率为10%. 试制定出资金的使用计划, 以使4年效益之和为最大.
设变量i x 表示第i 年所使用的资金数,则有 4,3,2,1,04
.5321.121.1331.1484
1.121.1440
1.1400
..max 43213212114
321=≥≤+++≤++≤+≤+++=i x x x x x x x x x x x t s x x x x z i
1.先建立M 文件 fun44.m,定义目标函数:
function f=fun44(x)
f=-(sqrt(x(1))+sqrt(x(2))+sqrt(x(3))+sqrt(x(4)));
2.再建立M 文件mycon1.m 定义非线性约束:
function [g,ceq]=mycon1(x)
g(1)=x(1)-400;
g(2)=1.1*x(1)+x(2)-440;
g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;
g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)-532.4;
ceq=0
3.主程序youh4.m 为:
x0=[1;1;1;1];vlb=[0;0;0;0];vub=[];A=[];b=[];Aeq=[];beq=[];
[x,fval]=fmincon('fun44',x0,A,b,Aeq,beq,vlb,vub,'mycon1')
得到
1.
43
8.
152
,2.
126
,2.
104
,2.
86
4
3
2
1
==
=
=
=
z x
x
x
x。

相关文档
最新文档