matlab线性规划

matlab线性规划
matlab线性规划

用MATLAB 优化工具箱解线性规划

命令:x=linprog (c ,A ,b )

2、模型:

beq

AeqX b

AX ..min =≤=t s cX

z 命令:x=linprog (c ,A ,b ,Aeq,beq )

注意:若没有不等式:b AX ≤存在,则令A=[ ],b=[ ]. 若没有等式约束, 则令Aeq=[ ], beq=[ ]. 3、模型:

VUB

X VLB beq AeqX b

AX ..min ≤≤=≤=t s cX z

命令:[1] x=linprog (c ,A ,b ,Aeq,beq, VLB ,VUB )

[2] x=linprog (c ,A ,b ,Aeq,beq, VLB ,VUB, X0)

注意:[1] 若没有等式约束, 则令Aeq=[ ], beq=[ ]. [2]其中X0表示初始点 4、命令:[x,fval]=linprog(…)

返回最优解x及x处的目标函数值fval.

例1 max 6543216.064.072.032.028.04.0x x x x x x z +++++=

85003.003.003.001.001.001.0.

.654321≤+++++x x x x x x t s

70005.002.041≤+x x 10005.002.052≤+x x 90008.003.063≤+x x

6,2,10

=≥j x j

解 编写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];

Aeq=[]; beq=[];

vlb=[0;0;0;0;0;0]; vub=[];

[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)

min z=cX

b AX t s

≤..1、模型:

例2 321436min x x x z ++= 120.

.321=++x x x t s

301≥x 5002≤≤x

203≥x

解: 编写M 文件xxgh2.m 如下: c=[6 3 4]; A=[0 1 0]; b=[50];

Aeq=[1 1 1]; beq=[120]; vlb=[30,0,20];

vub=[];

[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub

例3 (任务分配问题)某车间有甲、乙两台机床,可用于加工三种工件。 假定这两台车床的可用台时数分别为800和900,三种工件的数量分别为400、 600和500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工 费用如下表。问怎样分配车床的加工任务,才能既满足加工工件的要求,又使 加工费用最低?

解 设在甲车床上加工工件1、2、3的数量分别为x1、x2、x3,在乙车床上 加工工件1、2、3的数量分别为x4、x5、x6。可建立以下线性规划模型:

6543218121110913min x x x x x x z +++++= ???????????=≥≤++≤++=+=+=+6

,,2,1,09003.12.15.08001.14.0500

600

400x ..6543216352

41 i x x x x x x x x x x x x t s i

编写M 文件xxgh3.m 如下:

f = [13 9 10 11 12 8];

单位工件所需加工台时数 单位工件的加工费用 车床类 型 工件1 工件2 工件3 工件1 工件2 工件3 可用台时数 甲

0.4 1.1 1.0 13 9 10 800 乙

0.5 1.2 1.3 11 12 8 900

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]; beq=[400 600 500]; vlb = zeros(6,1); vub=[];

[x,fval] = linprog(f,A,b,Aeq,beq,vlb,vub)

例4.某厂每日8小时的产量不低于1800件。为了进行质量控制,计划聘请两种不同水平的检验员。一级检验员的标准为:速度25件/小时,正确率98%,计时工资4元/小时;二级检验员的标准为:速度15小时/件,正确率95%,计时工资3元/小时。检验员每错检一次,工厂要损失2元。为使总检验费用最省,该工厂应聘一级、二级检验员各几名? 解 设需要一级和二级检验员的人数分别为x1、x2人, 则应付检验员的工资为: 因检验员错检而造成的损失为:

故目标函数为:

约束条件为:

线性规划模型:

编写M 文件xxgh4.m 如下:

c = [40;36]; A=[-5 -3]; b=[-45];

212124323848x x x x +=??+??21211282)%5158%2258(x x x x +=????+???2121213640)128()2432(min x x x x x x z +=+++=??????

?≥≥≤??≤??≥??+??0,018001581800258180015825821

2121x x x x x x 2

13640min x x z +=???????≥≥≤≤≥+0,015945

35 ..2121

21x x x x x x t s

Aeq=[];

beq=[];

vlb = zeros(2,1);

vub=[9;15];

%调用linprog函数:

[x,fval] = linprog(c,A,b,Aeq,beq,vlb,vub)

结果为:

x =

9.0000

0.0000

fval =360

即只需聘用9个一级检验员。

Matlab 优化工具箱简介

1.MATLAB 求解优化问题的主要函数

2.优化函数的输入变量

使用优化函数或优化工具箱中其它优化函数时, 输入变量见下表:

3. 优化函数的输出变量下表:

类 型 模 型 基本函数名

一元函数极小 Min F (x )s.t.x1

X=fminunc(‘F ’,X 0) X=fminsearch(‘F ’,X 0)

线性规划 Min X c T s.t.AX<=b

X=linprog(c,A,b) 二次规划 Min 21x T Hx+c T

x

s.t. Ax<=b X=quadprog(H,c,A,b)

约束极小 (非线性规划) Min F(X) s.t. G(X)<=0 X=fmincon(‘FG ’,X 0) 达到目标问题 Min r s.t. F(x)-wr<=goal

X=fgoalattain(‘F ’,x,goal,w)

极小极大问题 Min max {F i (x)}

X {Fi(x)} s.t. G(x)<=0 X=fminimax(‘FG ’,x 0)

变量 描 述 调用函数 f 线性规划的目标函数f*X 或二次规划的目标函

数X ’*H*X+f*X 中线性项的系数向量 linprog,quadprog fun 非线性优化的目标函数.fun 必须为行命令对象

或M 文件、嵌入函数、或MEX 文件的名称

fminbnd,fminsearch,fminunc,

fmincon,lsqcurvefit,lsqnonlin,

fgoalattain,fminimax H 二次规划的目标函数X ’*H*X+f*X 中二次项的系数矩阵 quadprog

A,b

A 矩阵和b 向量分别为线性不等式约束:b AX ≤中的系数矩阵和右端向量 linprog,quadprog,fgoalattain, fmincon, fminimax

Aeq,beq

Aeq 矩阵和beq 向量分别为线性等式约束: beq X Aeq =?中的系数矩阵和右端向量 linprog,quadprog,fgoalattain, fmincon, fminimax

vlb,vub X 的下限和上限向量:vlb ≤X ≤vub linprog,quadprog,fgoalattain,

fmincon,fminimax,lsqcurvefit, lsqnonlin

X 0 迭代初始点坐标 除fminbnd 外所有优化函数 x 1,x 2 函数最小化的区间 fminbnd options 优化选项参数结构,定义用于优化函数的参数 所有优化函数

4.控制参数options 的设置

Options 中常用的几个参数的名称、含义、取值如下:

(1) Display : 显示水平.取值为’off ’时,不显示输出; 取值为’iter ’时,显示每次迭代的信息;取值为’final ’时,显示最终结果.默认值为’final ’.

(2) MaxFunEvals : 允许进行函数评价的最大次数,取值为正整数. (3) MaxIter : 允许进行迭代的最大次数,取值为正整数

控制参数options 可以通过函数optimset 创建或修改。命令的格式如下: (1) options=optimset(‘optimfun ’)

创建一个含有所有参数名,并与优化函数optimfun 相关的默认值的选项结构options. (2)options=optimset(‘param1’,value1,’param2’,value2,...)

创建一个名称为options 的优化选项参数,其中指定的参数具有指定值,所有未指定的参数取默认值.

(3)options=optimset(oldops,‘param1’,value1,’param2’, value2,...)

创建名称为oldops 的参数的拷贝,用指定的参数值修改oldops 中相应的参数. 例:opts=optimset(‘Display ’,’iter ’,’TolFun ’,1e-8)

该语句创建一个称为opts 的优化选项结构,其中显示参数设为’iter ’, TolFun 参数设为1e-8. 用Matlab 解无约束优化问题

一元函数无约束优化问题21),(min 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 (...)

变量 描 述 调用函数 x 由优化函数求得的值.若exitflag>0,则x

为解;否则,x 不是最终解,它只是迭代制止时优化过程的值 所有优化函数 fval

解x 处的目标函数值 linprog,quadprog,fgoalattain,

fmincon,fminimax,lsqcurvefit, lsqnonlin, fminbnd exitflag 描述退出条件: ● exitflag>0,表目标函数收敛于解x 处

● exitflag=0,表已达到函数评价或迭代的最大次数

● exitflag<0,表目标函数不收敛 output 包含优化结果信息的输出结构. ● Iterations:迭代次数 ● Algorithm:所采用的算法 ● FuncCount:函数评价次数 所有优化函数

(5)[x ,fval ,exitflag ,output]= fminbnd (...) 其中(3)、(4)、(5)的等式右边可选用(1)或(2)的等式右边。

函数fminbnd 的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优解。

例1 求x e f x sin 2-=在0

主程序为wliti1.m:

f='2*exp(-x).*sin(x)';

fplot(f,[0,8]); %作图语句 [xmin,ymin]=fminbnd (f, 0,8) f1='-2*exp(-x).*sin(x)';

[xmax,ymax]=fminbnd (f1, 0,8) 运行结果:

xmin = 3.9270 ymin = -0.0279 xmax = 0.7854 ymax = 0.6448

例2 对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?

先编写M 文件fun0.m 如下: function f=fun0(x) f=-(3-2*x).^2*x; 主程序为wliti2.m:

[x,fval]=fminbnd('fun0',0,1.5); xmax=x fmax=-fval

运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米.

2、多元函数无约束优化问题 标准型为:min F(X) 命令格式为:

(1)x= fminunc (fun,X0 );或x=fminsearch (fun,X0 ) (2)x= fminunc (fun,X0 ,options ); 或x=fminsearch (fun,X0 ,options ) (3)[x ,fval]= fminunc (...); 或[x ,fval]= fminsearch (...) (4)[x ,fval ,exitflag]= fminunc (...); 或[x ,fval ,exitflag]= fminsearch

(5)[x ,fval ,exitflag ,output]= fminunc (...); 或[x ,fval ,exitflag ,output]= fminsearch (...) 说明:

? fminsearch 是用单纯形法寻优. fminunc 的算法见以下几点说明:

[1] fminunc 为无约束优化提供了大型优化和中型优化算法。由options 中的参数LargeScale

设剪去的正方形的边长为x ,则水槽的容积为:x x )23(2-

建立无约束优化模型为:min y=-x x )23(2-, 0

控制:

LargeScale=’on’(默认值),使用大型算法

LargeScale=’off’(默认值),使用中型算法

[2] fminunc为中型优化算法的搜索方向提供了4种算法,由

options中的参数HessUpdate控制:

HessUpdate=’bfgs’(默认值),拟牛顿法的BFGS公式;HessUpdate=’dfp’,拟牛顿法的DFP公式;

HessUpdate=’steepdesc’,最速下降法

[3] fminunc为中型优化算法的步长一维搜索提供了两种算法,

由options中参数LineSearchType控制:

LineSearchType=’quadcubic’(缺省值),混合的二次和三

次多项式插值;LineSearchType=’cubicpoly’,三次多项式插

?使用fminunc和fminsearch可能会得到局部最优解.

例3 min f(x)=(4x12+2x22+4x1x2+2x2+1)*exp(x1)

1、编写M-文件fun1.m:

function f = fun1 (x)

f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);

2、输入M文件wliti3.m如下:

x0 = [-1, 1];

x=fminunc(‘fun1’,x0);

y=fun1(x)

3、运行结果:

x= 0.5000 -1.0000

y = 1.3029e-10

例4 Rosenbrock 函数 f(x1,x2)=100(x2-x12)2+(1-x1)2的最优解(极小)为x*=(1,1),极小值为f*=0.试用

不同算法(搜索方向和步长搜索)求数值最优解.

初值选为x0=(-1.2 , 2).

1.为获得直观认识,先画出Rosenbrock 函数的三维图形,

输入以下命令:

[x,y]=meshgrid(-2:0.1:2,-1:0.1:3);

z=100*(y-x.^2).^2+(1-x).^2;

mesh(x,y,z)

2. 画出Rosenbrock 函数的等高线图,输入命令:

contour(x,y,z,20)

hold on

plot(-1.2,2,' o ');

text(-1.2,2,'start point')

plot(1,1,'o')

text(1,1,'solution')

3.用fminsearch函数求解

输入命令:

f='100*(x(2)-x(1)^2)^2+(1-x(1))^2';

[x,fval,exitflag,output]=fminsearch(f, [-1.2 2]) 运行结果:

x =1.0000 1.0000 fval =1.9151e-010 exitflag = 1 output =

iterations: 108 funcCount: 202

algorithm: 'Nelder-Mead simplex direct search'

4. 用fminunc 函数 (1)建立M-文件fun2.m

function f=fun2(x)

f=100*(x(2)-x(1)^2)^2+(1-x(1))^2 (2)主程序wliti44.m

Rosenbrock 函数不同算法的计算结果

可以看出,最速下降法的结果最差.因为最速下降法特别不适合于从一狭长通道到达最优解的情况.

例5 产销量的最佳安排

某厂生产一种产品有甲、乙两个牌号,讨论在产销平衡的情况下如何确定各自的产量,使总利润最大. 所谓产销平衡指工厂的产量等于市场上的销量.

符号说明

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)是待定系数. 基本假设

1.价格与销量成线性关系

利润既取决于销量和价格,也依赖于产量和成本。按照市场规律,

搜索方向 步长搜索 最优解 最优值 迭代次数 混合二、三次插值 (0.9996,0.9992) 2.3109710-?

155

BFGS

三次插值 (1.0001,1.0002) 2.3943810-?

132

混合二、三次插值 (0.9995,0.9990) 2.6223710-? 151

DFP

三次插值 (0.8994,0.7995) 0.0192 204 (-1.1634,1.3610) 4.6859 204

(0.9446,0.8920) 0.0031 8002

最速下降 混合二、三次插值

(0.9959,0.9916 1.85435

10-?

9002

单纯形法

(1.0000,1.0000) 1.91511010-?

202

甲的价格p 1会随其销量x 1的增长而降低,同时乙的销量x 2的增长也 会使甲的价格有稍微的下降,可以简单地假设价格与销量成线性关系, 即: p 1 = b 1 - a 11 x 1 - a 12 x 2 ,b 1,a 11,a 12 > 0,且a 11 > a 12; 同理, p 2 = b 2 - a 21 x 1- a 22 x 2 ,b 2,a 21,a 22 > 0 2.成本与产量成负指数关系

甲的成本随其产量的增长而降低,且有一个渐进值,可以假设为 负指数关系,即:

0,,,1111111

1>+=-c r c e r q x λλ 同理,

0,,,

22222222>+=-c r c e r q x λλ

模型建立

总利润为: 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, 我们把它作为原问题的初始值. 模型求解

1.建立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; 2.输入命令:

x0=[50,70];

x=fminunc(‘fun ’,x0), z=fun(x) 3.计算结果:

x=23.9025, 62.4977, z=6.4135e+003

即甲的产量为23.9025,乙的产量为62.4977,最大利润为6413.5. 非线性规划 1、 二次规划

用MATLAB 软件求解,其输入格式如下: 1. x=quadprog(H,C,A,b);

2. x=quadprog(H,C,A,b,Aeq,beq);

标准型为: Min Z= 21X T HX+c T X s.t. AX<=b beq X Aeq =? VLB ≤X ≤VUB

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]=quaprog(...);

7. [x,fval,exitflag]=quaprog(...);

8. [x,fval,exitflag,output]=quaprog(...); 例1 min f(x1,x2)=-2x1-6x2+x12-2x1x2+2x22 s.t. x1+x2≤2 -x1+2x2≤2 x1≥0, x2≥0 1、写成标准形式:

2、 输入命令: 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 z = -8.2222

一般非线性规划

标准型为:

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=...

???

?

?????

?

??--+???? ?????? ??-=212121622 11- 1 ),(min x x x x x x z T

???

? ??≤???? ?????? ??≤???? ?????? ??-212100222 11 1 x x x x s.t.

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]; 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

1、写成标准形式:

s.t.

??

?

??≤??? ??-+-+00546322121x x x x ?

?? ??≤??? ??2100x x 2

2

21212

1212min x x x x f ++--=

例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.14401.1400

..max 43213212114321=≥≤+++≤++≤+≤+++=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

.438.152,2.126,2.104,2.864321=====z x x x x

用MATLAB解线性规划

用MATLAB 优化工具箱解线性规划 命令:x=linprog (c ,A ,b ) 2、模型: beq AeqX b AX ..min =≤=t s cX z 命令:x=linprog (c ,A ,b ,Aeq,beq ) 注意:若没有不等式:b AX ≤存在,则令A=[ ],b=[ ]. 若没有等式约束, 则令Aeq=[ ], beq=[ ]. 3、模型: VUB X VLB beq AeqX b AX ..min ≤≤=≤=t s cX z 命令:[1] x=linprog (c ,A ,b ,Aeq,beq, VLB ,VUB ) [2] x=linprog (c ,A ,b ,Aeq,beq, VLB ,VUB, X0) 注意:[1] 若没有等式约束, 则令Aeq=[ ], beq=[ ]. [2]其中X0表示初始点 4、命令:[x,fval]=linprog(…) 返回最优解x及x处的目标函数值fval. 例1 max 6543216.064.072.032.028.04.0x x x x x x z +++++= 85003.003.003.001.001.001.0..654321≤+++++x x x x x x t s 70005.002.041≤+x x 10005.002.052≤+x x 90008.003.063≤+x x 6,2,10 =≥j x j 解 编写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]; Aeq=[]; beq=[]; vlb=[0;0;0;0;0;0]; vub=[]; [x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub) min z=cX b AX t s ≤..1、模型:

运用Matlab进行线性规划求解(实例)

线性规划 线性规划是处理线性目标函数和线性约束的一种较为成熟的方法,目前已经广泛应用于军事、经济、工业、农业、教育、商业和社会科学等许多方面。 8.2.1 基本数学原理 线性规划问题的标准形式是: ????? ??????≥=+++=+++=++++++=0,,,min 21221122222121112 121112211n m n mn m m n n n n n n x x x b x a x a x a b x a x a x a b x a x a x a x c x c x c z 或 ???? ?????=≥===∑∑==n j x m i b x a x c z j n j i j ij n j j j ,,2,1,0,,2,1,min 1 1 写成矩阵形式为: ?? ???≥==O X b AX CX z min 线性规划的标准形式要求使目标函数最小化,约束条件取等式,变量b 非负。不符合这几个条件的线性模型可以转化成标准形式。 MATLAB 采用投影法求解线性规划问题,该方法是单纯形法的变种。 8.2.2 有关函数介绍 在MATLAB 工具箱中,可用linprog 函数求解线性规划问题。 linprog 函数的调用格式如下: ●x=linprog(f,A,b):求解问题minf'*x ,约束条件为A*x<=b 。 ●x=linprog(f,A,b,Aeq,beq):求解上面的问题,但增加等式约束,即Aeq*x=beq 。若没有不等式约束,则令A=[ ],b=[ ]。 ●x=linprog(f,A,b,Aeq,beq,lb,ub):定义设计x 的下界lb 和上界ub ,使得x 始终在该范围内。若没有等式约束,令Aeq=[ ],beq=[ ]。 ●x=linprog(f,A,b,Aeq,beq,lb,ub,x0):设置初值为x0。该选项只适用于中型问题,默认时大型算法将忽略初值。 ●x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options):用options 指定的优化参数进行最小化。 ●[x,fval]=linprog(…):返回解x 处的目标函数值fval 。 ●[x,lambda,exitflag]=linprog(…):返回exitflag 值,描述函数计算的退出条件。 ●[x,lambda,exitflag,output]=linprog(…):返回包含优化信息的输出参数output 。 ●[x,fval,exitflag,output,lambda]=linprog(…):将解x 处的拉格朗日乘子返回到lambda 参数中。

matlab线性规划练习

第11次课 (1) 某机床厂生产甲、乙两种机床,每台销售后的利润分别为 4000 元与 3000 元 。 生产甲机床需用A 、B 机器加工,加工时间分别为每台 2 小时和 1 小时; 生产乙机床 需用A 、B 、C 三种机器加工,加工时间为每台各一小时。 若每天可用于加工的机器 时数分别为A 机器 10 小时、 B 机器 8 小时和 C 机器 7 小时,问该厂应生产甲、乙机床 各 几台,才能使总利润最大? (2)有两种农作物(大米和小麦),可用轮船和飞机两种方式运输,每天每艘轮船和每架飞机运输效果 如下:在一天内如何安排才能合理完成运输2000吨小麦和1500吨大米的任务? (3)设422+-=x y z ,式中变量y x ,满足条件?????≥-≤≤≤≤12201 0x y y x ,求z 的最小值和最大值. (4)某家俱公司生产甲、乙两种型号的 组合柜,每种柜的制造白坯时间、油漆时间及有关数据如下: 问该公司如何安排甲、乙二种柜的日产量可获最大利润,并且最大利润是多少? (5) 某运输公司接受了向抗洪抢险地区每天至少送180t 支援物资的任务.该公司有8辆载重为6t 的A 型 卡车与4辆载重为10t 的B 型卡车,有10名驾驶员;每辆卡车每天往返的次数为A 型卡车4次,B 型 卡车3次;每辆卡车每天往返的成本费A 型车为320元,B 型车为504元.请你们为该公司安排一下应该如何调配车辆,才能使公司所花的成本费最低?若只调配A 型或B 型卡车,所花的成本费分别是多少?

(6)一家玩具公司制造三种桌上高尔夫玩具,每一种要求不同的制造技术。高级的一种需要17小时加工装配劳动力,8小时检验,每台利润300元。中级的需要10小时劳动力,4小时检验,利润200元。低级的需要2小时劳动力,2小时检验,利润100元。可供利用的加工劳动力为1000小时,检验500小时。其次,有市场预测表明,对高级的需求量不超过50台,中级的不超过80台,低级的不超过150台。 问制造商如何决策才能得出使总利润为最大的最优生产计划。 (7)(任务分配问题)某车间有甲、乙两台机床,可用于加工三种工件。 假定这两台车床的可用台时数分别为800和900,三种工件的数量分别为400、600和500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表。问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低 (8)

Matlab在线性规划中的使用

⒈ 优化问题及其数学模型 假设有一个问题,它有几个因素来决定,当这些因素处于某个状态时,可以使问题得到我们最想要的结果。优化问题就是寻求这个状态的过程。例如: 某工厂生产A ,B 两种产品,所用原料均为甲、乙、丙三种;生产一件产品所需原料和 问题:在该厂只有库存原料甲380单位,原料乙300单位,原料丙220单位的情况下如何安排A ,B 两种产品的生产数量可以获得最大的利润? 设生产A 中产品1x 件,生产B 中产品2x 件,z 为所获得的利润,于是有关系式: 我们称它为目标函数。生产的条件我们可以表示为: 我们把上面的不等式称为约束条件。 产品A 的产量1x 和B 的产量2x 是优化问题的变量。在满足约束条件的前提下使目标函数得到最优的值成为最优解。根据以上定义,也可以说优化运算是通过某种计算寻求最优解的过程。 以上这个用等式或不等式来表达我们要解决的问题的过程就是优化问题的建模过程。我们平时遇到的问题常常不是上面的这几个数学表达式就能表达得清清楚楚的,但是建立像上面类似的数学模型却是优化求解的第一步。优化问题常常表现为在多约束条件下求某一函数的极值问题,例如上面的这个例子。 Matlab 有一个优化工具箱,可以帮助我们方便的解决好这类问题。 ⒉ 优化工具箱 Matlab 的优化工具箱有一些对普通非线性函数求解最小化或最大化(求极值)的函数组成,另外还包括一些解决诸如线性规划等标准矩阵问题的函数。所有的优化函数都是用Matlab 语言编写的m 文件,我们可以通过在命令窗口里输入type function_name 来查看这些函数。 优化工具箱的优化功能包括: ⑴ 求无约束非线性最小化; ⑵ 求有约束非线性最小化; ⑶ 二次和线性规划问题; ⑷ 非线性最小二乘法和曲线拟合问题; ⑸ 非线性等式的求解; ⑹ 约束线性最小二乘法; ⑺ 稀疏和结构化大尺度问题。 工具箱中求非线性函数极小值的命令函数如下表所示:

多目标线性规划的若干解法及MATLAB实现

多目标线性规划的若干解法及MATLAB 实现 一.多目标线性规划模型 多目标线性规划有着两个和两个以上的目标函数,且目标函数和约束条件全是线性函 数,其数学模型表示为: 11111221221122221122max n n n n r r r rn n z c x c x c x z c x c x c x z c x c x c x =+++??=+++?? ??=+++? (1) 约束条件为: 1111221121122222112212,,,0 n n n n m m mn n m n a x a x a x b a x a x a x b a x a x a x b x x x +++≤??+++≤?? ??+++≤?≥?? (2) 若(1)式中只有一个1122i i i in n z c x c x c x =+++ ,则该问题为典型的单目标线性规划。我们记:()ij m n A a ?=,()ij r n C c ?=,12(,,,)T m b b b b = ,12(,,,)T n x x x x = , 12(,,,)T r Z Z Z Z = . 则上述多目标线性规划可用矩阵形式表示为: max Z Cx = 约束条件:0 Ax b x ≤?? ≥? (3) 二.MATLAB 优化工具箱常用函数[3] 在MA TLAB 软件中,有几个专门求解最优化问题的函数,如求线性规划问题的linprog 、求有约束非线性函数的fmincon 、求最大最小化问题的fminimax 、求多目标达到问题的fgoalattain 等,它们的调用形式分别为: ①.[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub) f 为目标函数系数,A,b 为不等式约束的系数, Aeq,beq 为等式约束系数, lb,ub 为x 的下 限和上限, fval 求解的x 所对应的值。 算法原理:单纯形法的改进方法投影法 ②.[x,fval ]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub ) fun 为目标函数的M 函数, x0为初值,A,b 为不等式约束的系数, Aeq,beq 为等式约束

用MATLAB求解规划问题

§15. 利用Matlab求解线性规划问题 线性规划是一种优化方法,Matlab优化工具箱中有现成函数linprog对如下式描述的LP问题求解: % min f'x % s.t .(约束条件):Ax<=b % (等式约束条件):Aeqx=beq % lb<=x<=ub linprog函数的调用格式如下: 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, exitflag, output, lambda]=linprog(…) 其中: x=linprog(f,A,b)返回值x为最优解向量。 x=linprog(f,A,b,Aeq,beq) 作有等式约束的问题。若没有不等式约束,则令 111

A=[ ]、b=[ ] 。 x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 中lb ,ub为变量x的下界和上界,x0为初值点,options为指定优化参数进行最小化。 Options的参数描述: Display显示水平。选择’off’ 不显示输出;选择’I ter’显示每一步迭代过程的输出;选择’final’ 显示最终结果。 MaxFunEvals 函数评价的最大允许次数 Maxiter 最大允许迭代次数 TolX x处的终止容限 [x,fval]=linprog(…) 左端fval 返回解x处的目标函数值。 [x,fval,exitflag,output,lambda]=linprog(f,A,b, Aeq,beq,lb,ub,x0) 的输出部分: exitflag描述函数计算的退出条件:若为正值,表示目标函数收敛于解x 处;若为负值,表示目标函数不收敛;若为零值,表示已经达到函数评价或迭代的最大次数。 output 返回优化信息:output.iterations表示迭代次数;output.algorithm表示所采用的算法;outprt.funcCount表示函数评价次数。 lambda返回x处的拉格朗日乘子。它有以下属性: lambda.lower-lambda的下界; lambda.upper-lambda的上界; lambda.ineqlin-lambda的线性不等式; lambda.eqlin-lambda的线性等式。 112

线性规划模型及matlab程序求解

§1 线性规划模型 一、线性规划课题: 实例1:生产计划问题 假设某厂计划生产甲、乙两种产品,现库存主要材料有A类3600公斤,B类2000公斤,C类3000公斤。每件甲产品需用材料A类9公斤,B类4公斤,C类3公斤。每件乙产品,需用材料A类4公斤,B类5公斤,C类10公斤。甲单位产品的利润70元,乙单位产品的利润120元。问如何安排生产,才能使该厂所获的利润最大。 建立数学模型: 设x1、x2分别为生产甲、乙产品的件数。f为该厂所获总润。 max f=70x1+120x2 s.t 9x1+4x2≤3600 4x1+5x2≤2000 3x1+10x2≤3000 x1,x2≥0 归结出规划问题:目标函数和约束条件都是变量x的线性函数。 形如: (1) min f T X s.t A X≤b Aeq X =beq lb≤X≤ub 其中X为n维未知向量,f T=[f1,f2,…f n]为目标函数系数向量,小于等于约束系数矩阵A为m×n矩阵,b为其右端m维列向量,Aeq为等式约束系数矩阵,beq为等式约束右端常数列向量。lb,ub为自变量取值上界与下界约束的n维常数向量。 二.线性规划问题求最优解函数: 调用格式: 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, outpu t]=linprog(…) [x, fval, exitflag, output, lambda]=linprog(…) 说明:x=linprog(f,A,b)返回值x为最优解向量。 x=linprog(f,A,b,Aeq,beq) 作有等式约束的问题。若没有不等式约束,则令A=[ ]、b=[ ] 。 x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 中lb ,ub为变量x的下界和上界,x0为初值点,options 为指定优化参数进行最小化。

一元线性规划matlab算例及解释

一元线性回归: x 含碳量 y合金强度建立y与x函数关系并检验可信度,检查数据有无异常点 clc close all x1=[0.1:0.01:0.18,0.20,0.21,0.23]'; x=[ones(size(x1)),x1]; y=[42 41.5 45 45.5 45 47.5 49 55 50 55 55.5 60.5]'; % 作数据的散点图 figure(1) plot(x1,y,'*') %回归分析 [b,bint,r,rint,stats]=regress(y,x) %alpha 缺省表示取值为0.05 %做残差图 figure(2) rcoplot(r,rint); %预测与回归图 figure(3) z=b(1)+b(2)*x1; plot(x1,y,'*',x1,z,'k-') legend('原始数据','回归曲线') 运行结果如下: b = 27.0269 140.6194 bint = 22.3226 31.7313 111.7842 169.4546 r = 0.9111 -0.9951

1.0987 0.1925 -1.7136 -0.6198 -0.5260 4.0678 -2.3384 -0.1508 -1.0570 1.1306 rint = -2.5705 4.3928 -4.6033 2.6131 -2.6026 4.8001 -3.6754 4.0605 -5.4276 2.0003 -4.5502 3.3105 -4.4717 3.4196 1.5241 6.6114 -5.8418 1.1649 -3.9067 3.6051 -4.6124 2.4984 -2.0746 4.3358 stats = 0.9219 118.0670 0.0000 3.1095 α= 27.0269 β= 140.6194 即y=α+βx

用matlab求解线性规划问题

1 实验四 用MATLAB 求解线性规划问题 一、实验目的: 了解Matlab 的优化工具箱,能利用Matlab 求解线性规划问题。 二、实验内容: 线性规划的数学模型有各种不同的形式,其一般形式可以写为: 目标函数: n n x f x f x f z +++= 2211m i n 约束条件: s n sn s s n n b x a x a x a b x a x a x a ≤+++≤+++ 22111 1212111 s n tn t t n n d x c x c x c d x c x c x c =+++=+++ 22111 1212111 ,,,21≥n x x x 这里n n x f x f x f z +++= 2211称为目标函数, j f 称为价值系数, T n f f f f ) ,,,(21 =称为价值向 量, j x 为求解的变量,由系数 ij a 组成的矩阵 ???? ? ?????=mn m n a a a a A 1 111 称为不等式约束矩阵,由系数ij c 组成的矩阵 ???? ? ?????=sn s n c c c c C 1 111 称为等式约束矩阵,列向量T n b b b b ) ,,,(21 =和 T n d d d d ) ,,,(21 =为右端向量,条件 ≥j x 称为 非负约束。一个向量 T n x x x x ) ,,,(21 =,满足约束条件,称为可行解或可行点,所有可行点的集合称为 可行区域,达到目标函数值最大的可行解称为该线性规划的最优解,相应的目标函数值称为最优目标函数 值,简称最优值。 我们这里介绍利用Matlab 来求解线性规划问题的求解。 在Matlab 中有一个专门的函数linprog()来解决这类问题,我们知道,极值有最大和最小两种,但求z 的极大就是求z -的极小,因此在Matlab 中以求极小为标准形式,函数linprog()的具体格式如下: X=linprog(f,A,b) [X,fval,exitflag,ouyput,lamnda]=linprog(f,A,b,Aeq,Beq,LB,UB,X0,options) 这里X 是问题的解向量,f 是由目标函数的系数构成的向量,A 是一个矩阵,b 是一个向量,A ,b 和变量x={x1,x2,…,xn}一起,表示了线性规划中不等式约束条件,A ,b 是系数矩阵和右端向量。Aeq 和Beq 表示了线性规划中等式约束条件中的系数矩阵和右端向量。LB 和UB 是约束变量的下界和上界向量,X0是给定的变量的初始值,options 为控制规划过程的参数系列。返回值中fval 是优化结束后得到的目标函数值。exitflag=0表示优化结果已经超过了函数的估计值或者已声明的最大迭代次数;exitflag>0表示优化过

用matlab解决线性规划问题的几道题

一、用MATLAB 求解线性规划问题 (1) 编写的M 文件为: f=[-1;-1] A=[1 -2;1 2] b=[4,8] [x,feval]=linprog(f,A,b,[],[],zeros(2,1)) 所求解为:x 1=6,x 2=1;min f=-7 (2) 编写的M 文件为: f=[-4;-3] A=[3 4;3 3;4 2] b=[12;10;8] [x,feval]=linprog(f,A,b,[],[],zeros(1,2)) 所求得的解为:x 1=,x 2=;max f= (3) (4) 编写的M 文件为: f=[-1;-3;3] Aeq=[1 1 2;-1 2 1] beq=[4;4] [x,feval]=linprog(f,[],[],Aeq,beq,zeros(3,1)) 所求得的结果为:x 1=4/3,x 2=8/3,x 3=0;max f=28/3。 12121212min 24s.t.28,0f x x x x x x x x ì=--????-?镲í?+????3??121212121243max 3412..3310428,0f x x x x s t x x x x x x ì=+????+????+?í???+????3?? 12312312313min 3s.t.211423210(1,2,3)j f x x x x x x x x x x x x j =--ì????-+?????-++?í??-+=????????123123123max 3s.t.24240(1,2,3) j f x x x x x x x x x x j =+-ì????++=??í-++=????????min s.t.123f x y z x y x z ì?=++???+?í???+=???

运用Matlab进行线性规划求解(实例)

8.2 线性规划 线性规划是处理线性目标函数和线性约束的一种较为成熟的方法,目前已经广泛应用于军事、经济、工业、农业、教育、商业和社会科学等许多方面。 8.2.1 基本数学原理 线性规划问题的标准形式是: ????? ??????≥=+++=+++=++++++=0,,,min 21221122222121112 121112211n m n mn m m n n n n n n x x x b x a x a x a b x a x a x a b x a x a x a x c x c x c z 或 ???? ?????=≥===∑∑==n j x m i b x a x c z j n j i j ij n j j j ,,2,1,0,,2,1,min 1 1 写成矩阵形式为: ?? ???≥==O X b AX CX z min 线性规划的标准形式要求使目标函数最小化,约束条件取等式,变量b 非负。不符合这几个条件的线性模型可以转化成标准形式。 MATLAB 采用投影法求解线性规划问题,该方法是单纯形法的变种。 8.2.2 有关函数介绍 在MA TLAB 工具箱中,可用linprog 函数求解线性规划问题。 linprog 函数的调用格式如下: ●x=linprog(f,A,b):求解问题minf'*x ,约束条件为A*x<=b 。 ●x=linprog(f,A,b,Aeq,beq):求解上面的问题,但增加等式约束,即Aeq*x=beq 。若没有不等式约束,则令A=[ ],b=[ ]。 ●x=linprog(f,A,b,Aeq,beq,lb,ub):定义设计x 的下界lb 和上界ub ,使得x 始终在该范围内。若没有等式约束,令Aeq=[ ],beq=[ ]。 ●x=linprog(f,A,b,Aeq,beq,lb,ub,x0):设置初值为x0。该选项只适用于中型问题,默认时大型算法将忽略初值。 ●x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options):用options 指定的优化参数进行最小化。 ●[x,fval]=linprog(…):返回解x 处的目标函数值fval 。 ●[x,lambda,exitflag]=li nprog(…):返回exitflag 值,描述函数计算的退出条件。 ●[x,lambda,exitflag,output]=linprog(…):返回包含优化信息的输出参数output 。 ●[x,fval,exitflag,output,lambda]=linprog(…):将解x 处的拉格朗日乘子返回到lambda 参数中。

(完整word版)用matlab解决线性规划问题的几道题

一、用MATLAB 求解线性规划问题 (1) 编写的M 文件为: f=[-1;-1] A=[1 -2;1 2] b=[4,8] [x,feval]=linprog(f,A,b,[],[],zeros(2,1)) 所求解为:x 1=6,x 2=1;min f=-7 (2) 编写的M 文件为: f=[-4;-3] A=[3 4;3 3;4 2] b=[12;10;8] [x,feval]=linprog(f,A,b,[],[],zeros(1,2)) 所求得的解为:x 1=0.8,x 2=2.4;max f=10.4 (3) (4) 编写的M 文件为: f=[-1;-3;3] Aeq=[1 1 2;-1 2 1] beq=[4;4] [x,feval]=linprog(f,[],[],Aeq,beq,zeros(3,1)) 所求得的结果为:x 1=4/3,x 2=8/3,x 3=0;max f=28/3。 12 121212min 24s.t.28 ,0f x x x x x x x x ì=--????-?镲í?+???? 3??12 1212121243max 3412 ..3310 428 ,0 f x x x x s t x x x x x x ì =+????+????+?í???+????3??123 12312313min 3s.t.211 423 21 0(1,2,3) j f x x x x x x x x x x x x j =--ì????-+?????-++?í??-+=?? ??? ???123 123123max 3s.t.24 24 0(1,2,3) j f x x x x x x x x x x j =+-ì????++=??í-++=???? ????

线性规划单纯形法matlab解法

%单纯形法matlab程序-ssimplex % 求解标准型线性规划:max c*x; . A*x=b; x>=0 % 本函数中的A是单纯初始表,包括:最后一行是初始的检验数,最后一列是资源向量b % N是初始的基变量的下标 % 输出变量sol是最优解, 其中松弛变量(或剩余变量)可能不为0 % 输出变量val是最优目标值,kk是迭代次数 % 例:max 2*x1+3*x2 % . x1+2*x2<=8 % 4*x1<=16 % 4*x2<=12 % x1,x2>=0 % 加入松驰变量,化为标准型,得到 % A=[1 2 1 0 0 8; % 4 0 0 1 0 16; % 0 4 0 0 1 12; % 2 3 0 0 0 0]; % N=[3 4 5]; % [sol,val,kk]=ssimplex(A,N) % 然后执行 [sol,val,kk]=ssimplex(A,N)就可以了。 function [sol,val,kk]=ssimplex(A,N) [mA,nA]=size(A); kk=0; % 迭代次数 flag=1;

while flag kk=kk+1; if A(mA,:)<=0 % 已找到最优解 flag=0; sol=zeros(1,nA-1); for i=1:mA-1 sol(N(i))=A(i,nA); end val=-A(mA,nA); else for i=1:nA-1 if A(mA,i)>0&A(1:mA-1,i)<=0 % 问题有无界解 disp('have infinite solution!'); flag=0; break; end end if flag % 还不是最优表,进行转轴运算 temp=0; for i=1:nA-1 if A(mA,i)>temp temp=A(mA,i); inb=i; % 进基变量的下标 end

线性规划问题Matlab求解

用MATLAB优化工具箱解线性规划 命令:x=linprog(c,A,b) 命令:x=linprog(c,A,b,Aeq,beq) 注意:若没有不等式:存在,则令A=[ ],b=[ ]. 若没有等式约束, 则令Aeq=[ ], beq=[ ].命令:[1] x=linprog(c,A,b,Aeq,beq, VLB,VUB) [2] x=linprog(c,A,b,Aeq,beq, VLB,VUB, X0) 注意:[1] 若没有等式约束, 则令Aeq=[ ], beq=[ ]. [2]其中X0表示初始点 4、命令:[x,fval]=linprog(…) 返回最优解x及x处的目标函数值fval. 例1 解编写M文件小如下: c=[ ]; A=[ ; 0 0 0 0;0 0 0 0;0 0 0 0 ]; b=[850;700;100;900]; Aeq=[]; beq=[]; vlb=[0;0;0;0;0;0]; vub=[]; [x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub) 例2 解: 编写M文件如下: c=[6 3 4]; A=[0 1 0]; b=[50]; Aeq=[1 1 1]; beq=[120]; vlb=[30,0,20]; vub=[]; [x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub 例3 (任务分配问题)某车间有甲、乙两台机床,可用于加工三种工件。 假定这两台车床的可用台时数分别为800和900,三种工件的数量分别为400、 600和500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工 费用如下表。问怎样分配车床的加工任务,才能既满足加工工件的要求,又使 加工费用最低 解设在甲车床上加工工件1、2、3的数量分别为x1、x2、x3,在乙车床上 加工工件1、2、3的数量分别为x4、x5、x6。可建立以下线性规划模型: 编写M文件如下: f = [13 9 10 11 12 8]; A = [ 1 0 0 0 0 0 0 ]; b = [800; 900]; Aeq=[1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1]; beq=[400 600 500]; vlb = zeros(6,1); vub=[];

matlab解非线性规划例题

关于非线性规划问题 背景: 线性规划问题,即目标函数和约束条件都是线性函数的规划问题,但在实际工作中,还常常会遇到另一类更一般的规划问题,即目标函数和约束条件中至少有一个是非线性函数问题,即非线性规划问题。 求解方法:Matlab 软件 问题: 某厂向用户提供发动机,合同规定,第一、二、三季度末分别交货50台、70台、90台。每季度的生产费用为()^2f x ax bx =+(元), 其中x 是该季度生产的台数,若交货有剩余可用于下季度交货,但需支付存储费,每季度每台c 元。已知工厂每季度最大生产能力为100台,第一季度开始时无存货,设a =50,b =0.2,c =4,问工厂如何安排每月生产计划,才能既满足合同又使总费用最低(包括生产费用和库存费用)。 问题分析与假设: 目标函数是总费用,记为()F x 。 约束条件是生产合同和生产能力的限制。 设第一季度生产1x 台,第二季度生产2x 台,则第三季度生产(21012)x x --台。则: 1201221 x x ≤+≤ 501100x ≤≤ 02100x ≤≤ 由a =50,b =0.2,c =4,

第一季度生产费用15010.21^2T x x =+, 剩余品存储到下一季度的费用14(150)k x =-, 同理可得:25020.22^2T x x =+ 24(12120)k x x =+- 350(2101 2)0.2(2101T x x x x =--+-- 建模 总费用 ()12312103000.2(1^22^2)0.2(21012)^24(212120)F x T T T k k x x x x x x =++++=+++--++-先建立M-文件: a=50;b=0.2;c=4; H=diag(2*b*ones(1,3));C=[a+2*c,a+c,a]; A1=[-1,0,0;-1,-1,0];b1=[-50,-120]'; A2=[1 1 1];b2=210; v1=[0 0 0]';v2=[100 100 100]'; [x,faval,exitflag,output,lambada]=quadprog(H,C,A1,b1,A2,b2,v1,v2, []) X2=x'*H*x/2+C*x-140*c 再建立主程序: a=50;b=0.2;c=4; H=diag(2*b*ones(1,3));C=[a+2*c,a+c,a]; A1=[-1,0,0;-1,-1,0];b1=[-50,-100]'; A2=[1 1 1];b2=210; v1=[0 0 0]';v2=[100 100 100]'; [x,faval,exitflag,output,lambada]=quadprog(H,C,A1,b1,A2,b2,v1,v2,[]) X2=x'*H*x/2+C*x-140*c 运算结果:

用MATLAB求解线性规划问题

用MATLAB 求解线性规划问题 这里X 是问题的解向量,f 是由目标函数的系数构成的向量,A 是一个矩阵,b 是一个向量,A ,b 和变量x={x 1,x 2,…,x n }一起,表示了线性规划中不等式约束条件,A ,b 是系数矩阵和右端向量。Aeq 和Beq 表示了线性规划中等式约束条件中的系数矩阵和右端向量。LB 和UB 是约束变量的下界和上界向量,X0是给定的变量的初始值,options 为控制规划过程的参数系列。返回值中fval 是优化结束后得到的目标函数值。exitflag=0表示优化结果已经超过了函数的估计值或者已声明的最大迭代次数;exitflag>0表示优化过程中变量收敛于解X ,exitflag<0表示不收敛。output 有3个分量,iterations 表示优化过程的迭代次数,cgiterations 表示PCG 迭代次数,algorithm 表示优化所采用的运算规则。lambda 有4个分量,ineqlin 是线性不等式约束条件,eqlin 是线性等式约束条件,upper 是变量的上界约束条件,lower 是变量的下界约束条件。它们的返回值分别表示相应的约束条件在约束条件在优化过程中是否有效。 例1:某工厂生产A ,B 两种产品,所用原料均为甲、乙、丙三种:生产一件产品所需原料和所获利 设生产A 产品1x 件,生产B 产品2x 件,z 为所获利润,我们将问题归结为如下的线性规划问题: 12min {(700010000)}x x -+ s.t. 1212128638048300 46220x x x x x x +≤??+≤??+≤? 接着写出Matlab 程序如下: clear f=-[7000,10000]; A=[8,6;4,8;4,6]; b=[380,300,220]; [X,fval]=linprog(f,A,b) 运行结果为: >> Optimization terminated successfully. X =40.0000 10.0000 fval = -3.8000e+005 例2:求解下面的线性规划问题: 123min {546}x x x --- s.t. 12320x x x -+≤ 12332442 x x x ++≤ 123230x x +≤ 10x ≤,20x ≤,30x ≤ 解决上述问题的Matlab 程序为: clear f=-[5,4,6]; A=[1,-2,1;3,2,4;3,2,0]; b=[20,42,30]; LB=[0;0;0]; [X,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],LB) 程序运行的结果为: Optimization terminated successfully. X = 0.0000

线性规划与MATLAB实现

例6-1用M函数文件形式求解第1章例1-2生产计划分配问题 A=[9 4 1 0 0;3 10 0 1 0;4 5 0 0 1]; c=[-7 -14 0 0 0]; b=[360;300 ;200]; [x,mf]=SimpleMthd(A,c,b,[3 4 5]) 单纯形法函数文件SimpleMthd如下 function [x,minf] = SimpleMthd(A,c,b,baseVector) %约束矩阵:A; %目标函数系数向量:c; %约束右端向量:b; %初始基向量:baseVector; %目标函数取最小值时的自变量值:x; %目标函数的最小值:minf sz = size(A); nVia = sz(2); n = sz(1); xx = 1:nVia; nobase = zeros(1,1); m = 1; for i=1:nVia %获取非基本变量下标if(isempty(find(baseVector == xx(i),1))) nobase(m) = i; m = m + 1; else ; end end bCon = 1; M = 0; while bCon nB = A(:,nobase); %非基本变量矩阵 ncb = c(nobase); %非基本变量系数 B = A(:,baseVector); %基本变量矩阵 cb = c(baseVector); %基本变量系数 xb = inv(B)*b; f = cb*xb; w = cb*inv(B); for i=1:length(nobase) sigma(i) = w*nB(:,i)-ncb(i); end [maxs,ind] = max(sigma); %ind为进基本变量下标 if maxs <= 0 %最大值小于零,输出最优解minf = cb*xb; vr = find(c~=0 ,1,'last');

Matlab求解线性规划和整数规划问题

1.线性规划问题:min f*x s.t. A*x<=b Aeq*x=beq lb<=x<=ub 其中:A为不等式约束的系数矩阵,Aeq表示等式约束的系数矩阵,b表示不等式约束的常向量,beq表示等式约束的常向量,lb和ub表示自变量的上下范围。 求解函数: linprog(f,A,b,Aeq,beq,lb,ub) 其中:f,A,b ,Aeq,beq,lb,ub的定义如上。 2.整数规划问题:利用函数(linprog) 先把BranchBound函数存在matlab的路径下,BranchBound函数的内容如下: function [y,fval]=BranchBound(c,A,b,Aeq,beq) NL=length(c); UB=inf; LB=-inf; FN=[0]; AA(1)={A}; BB(1)={b}; k=0; flag=0; while flag==0; [x,fval,exitFlag]=linprog(c,A,b,Aeq,beq); if (exitFlag == -2) | (fval >= UB) FN(1)=[]; if isempty(FN)==1 flag=1; else k=FN(1); A=AA{k}; b=BB{k}; end else for i=1:NL if abs(x(i)-round(x(i)))>1e-7 kk=FN(end); FN=[FN,kk+1,kk+2]; temp_A=zeros(1,NL); temp_A(i)=1; temp_A1=[A;temp_A]; AA(kk+1)={temp_A1}; b1=[b;fix(x(i))]; BB(kk+1)={b1};

相关文档
最新文档