数学实验作业8月12日第五组

更新时间:2024-01-19 16:16:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验九T1(2):

用分枝定界算法求解(略),并用 LINDO 或LINGO 验证你的结果是否正确: Max z?40x1?90x

s.. 9tx1?7x2?56 x1,x2?z? 7x1?20x2?70

解:在LINGO中输入以下程序(LINGO0901): max=40*x1+90*x2;

9*x1+7*x2<56; 7*x1+20*x2<70; @gin(x1); @gin(x2);

则输出:

Global optimal solution found.

Objective value: 340.0000 Extended solver steps: 0 Total solver iterations: 3

Variable Value Reduced Cost X1 4.000000 -40.00000 X2 2.000000 -90.00000

Row Slack or Surplus Dual Price 1 340.0000 1.000000 2 6.000000 0.000000 3 2.000000 0.000000

易得x1=4,x2=2时,得到全局最优解340.

实验九T2(1):

用动态规划方法求解(略),并用LINDO 或LINGO 验证你的结果是否正确:

minz?x12?x22?x32?x42?x1?2x2?3x3?4x4

s.t. x ?x2?x3?x?1 4 x1,x2,x,3x?4Z.?10,

解:在LINGO中输入以下程序(LINGO0902):

min=x1^2+x2^2+x3^2+x4^2-x1-2*x2-3*x3-4*x4;

x1+x2+x3+x4>=10; @gin(x1);

@gin(x2); @gin(x3); @gin(x4);

则输出:

Global optimal solution found.

Objective value: -1.000000 Objective bound: -1.000000 Infeasibilities: 0.000000 Extended solver steps: 1 Total solver iterations: 152

Model Class: PINLP

Total variables: 4 Nonlinear variables: 4 Integer variables: 4

Total constraints: 2 Nonlinear constraints: 1

Total nonzeros: 8 Nonlinear nonzeros: 4

Variable Value Reduced Cost

X1 2.000000 0.000000

X2 2.000000 -0.9999960

X3 3.000000 0.000000

X4 3.000000 -0.9999960

Row Slack or Surplus Dual Price

1 -1.000000 -1.000000

2 0.000000 -2.999998

易得x1=x2=2,x3=x4=3时,得到全局最优解-1.

实验9 T2(4):

取不同的初值计算下列非线性规划,尽可能求出所有局部极小点,进而找出全局极小点。minz??x1?x2

s..tx?1x2?x1*?5?x22?x32?x5?xi?x33?32?2,x4?2,5,i?1,2,3,4,5,22?2,

解:利用matlab求局部解 function [f,g]=examfeifun(x) f=-x(1)-x(2);

if nargout >2 g(1)=-1; g(2)=-1; end

if nargout > 2 H=[0,0;0,0] end end

function [c,ceq,g,geq]=examfeicon(x) c=[];

ceq=[x(1)+x(2)^2+x(3)^3-3*sqrt(2)-2;x(2)-x(3)^2+x(4)-2*sqrt(2)+2;x(1)*x(5)-2]; if nargout > 2 g=[];

geq=[1,0,x(5);2*x(2),1,0;3*x(3),2*x(3),0;0,1,0;0,0,x(1)]; end

clear all;clc x0=[5 0 0 0 0 ];

opt1=optimset('largescale','off','MaxIter',3000,'MaxFun',20000);

[x,fv,ef,out,lag,grad,hess]=fmincon(@examfeifun,x0,[],[],[],[],-5,5,@examfeicon,opt1),

则输出的结果为 x =

Columns 1 through 3

5.0000 1.1147 0.0000

Columns 4 through 5

-0.2863 0.4000 fv =

-6.1147

ef =

1

然后改变初值,观察结果,会得到不同的局部最优解。

求解全局最优解利用LINGO软件,则编程如下: min=-x1-x2;

x1+x2^2+x3^3=3*2^(1/2)+2; x2-x3^2+x4=2*2^(1/2)-2; x1*x5=2; -5<=x1; -5<=x2; -5<=x3; -5<=x4; -5<=x5; x1<=5; x2<=5; x3<=5; x4<=5; x5<=5;

输出的结果为:

x1 5.000000 x2 1.062671 x3 0.4839874 x4 0.000000 x5 0.4000000 z=-6.06267

即上述目标函数的全局最优解为z??6.06267

实验九T4:

某公司将3种不同含硫量的液体原料(分别为甲、乙、丙)混合生产两种产品(分别记为A,B)。按照生产工艺的要求,原料甲、乙必须首先倒入混合池中混合,混合后的液体在分别与原料丙混合生产A,B。已知原料甲、乙、丙的含硫量分别是3%,1%,2%,进货价格分别为6千元/t,16千元/t,10千元/t;产品A,B的含硫量分别不能超过2.5%,1.5%,售价分别为9千元/t,15千元/t。根据市场信息,原料甲、乙、丙的供应量都不能超过500t;产品A,B的最大市场需求量分别为100t,200t。试问:

(1) 应如何安排生产?

(2) 如果产品A的最大市场需求量增长为600t,应如何安排生产?

(3) 如果乙的进货价格下降为13千元/t,应如何安排生产?分别对(1)、(2)两种情况进行讨论。

解:

模型的假设与简化:

(1)设甲、乙、丙的进货量为x(1),x(2),x(3)(单位为t);A、B的产量为x(4),x(5)(单位为t);甲、乙混合物分为两部分,设生产A、B的部分分别为x(6),x(7);丙分为两部分,生产A、B的部分分别为x(8),x(9)。公司的利润为z(单位为千元),可列出相关式如下:

z=9*x(4)+15*x(5)-6*x(1)-16*x(2)-10*x(3)

约束条件为:

(0.03*x(1)+0.01*x(2))/(x(1)+x(2))*x(6)+0.02*x(8)≤0.025*x(4)

?(3*x(1)+x(2) )*x(6)+(2*x(8)-2.5*x(4) )*(x(1)+x(2))≤0 (1)

(0.03*x(1)+0.01*x(2))/(x(1)+x(2))*x(7)+0.02*x(9)≤0.015*x(5)

?(3*x(1)+x(2) )*x(7)+(2*x(9)-1.5*x(5) )*(x(1)+x(2))≤0 (2)

x(1)+x(2)-x(6)-x(7)=0 (3) x(3)-x(8)-x(9)=0 (4) -x(4)+x(6)+x(8)=0 (5) -x(5)+x(7)+x(9)=0 (6)

x(i)≥0, i=1,2,3,4,5,6,7,8,9 (7)

x(j)≤500, j=1,2,3

x(4),x(6),x(8)≤100, x(5),x(7),x(9)≤200 (8)

本题要求解z的最大值,即求解(-z)的最小值。这是一个带约束非线性规划的问题。利用MATLAB求解,编写的相关程序如下:

function [f,g,H]=ex10fun(x) %编写目标函数的 M 文件; f=6*x(1)+16*x(2)+10*x(3)-9*x(4)-15*x(5);

if nargout>1 %梯度 g=[6;16;10;-9;-15;0;0;0;0]; end

if nargout>2 H=zeros(9,9); End

function [c,ceq,g,geq]=ex10con(x) % 编写非线性约束的 M 文件; c=[(3*x(1)+x(2))*x(6)+(2*x(8)-2.5*x(4))*(x(1)+x(2));(3*x(1)+x(2))*x(7)+(2*x(9)-1.

5*x(5))*(x(1)+x(2))]; %不等式约束 ceq=0; if nargout>2

d1=[3*x(5)+2*x(8)-2.5*x(4);x(6)+2*x(8)-2.5*x(4);0;-2.5*(x(1)+x(2));0;3*x(1)+x(2);0;2*(x(1)+x(2));0];

d2=[3*x(7)+2*x(9)-1.5*x(5);x(7)+2*x(9)-1.5*x(5);0;0;-1.5*(x(1)+x(2));0;3*x(1)+x(2);0;2+(x(1)+x(2))]; g=[d1,d2];

geq=zeros(1,9); end

A2=[1, 1, 0, 0, 0, -1, -1, 0, 0; 0, 0, 1, 0, 0, 0, 0, -1, -1; 0, 0, 0, -1, 0, 1, 0, 1, 0; 0, 0, 0, 0, -1, 0, 1, 0, 1 ]; b2=zeros(1,4); v1=zeros(1,9);

v2=[500,500,500,100,200,100,200,100,200]; x0=[200,200,200,100,200,200,200,100,100];

opt1=optimset('largescale','off','MaxIter',3000,'MaxFunEvals',5000);

[x1,fv1,ef1,outlag,grad,hess]=fmincon(@ex10fun,x0,[],[],A2,b2,v1,v2,@ex10con,opt1);

[x2,fv2,ef2,outlag,grad,hess]=fmincon(@ex10fun,x1,[],[],A2,b2,v1,v2,@ex10con,opt1);

[x3,fv3,ef3,outlag,grad,hess]=fmincon(@ex10fun,x2,[],[],A2,b2,v1,v2,@ex10con,opt1);

solutions=[x1;x2;x3]; funvalues=[fv1;fv2;fv3]; exitflag=[ef1;ef2;ef3];

[solutions,funvalues,exitflag]

计算结果如下: ans =

Columns 1 through 7

0.0000 100.0000 100.0000 0 200.0000 -0.0000 100.0000 0 100.0000 100.0000 0.0000 200.0000 0 100.0000 0 100.0000 100.0000 0.0000 200.0000 0 100.0000

Columns 8 through 11

0.0000 100.0000 -400.0000 1.0000 0.0000 100.0000 -400.0000 1.0000

0.0000 100.0000 -400.0000 1.0000

得到最优解为 x=[0,100,100,0,200,0,100,0,100],最优值f=-400(最大值z=-f=400),exitflag=1(收敛)。该公司应购进100t 乙,100t 丙,两者混合生产出200t B,此时公司利润最大,为400 千元,即40 万元。

(2) 如果产品A的最大市场需求量增长为600t,则目标函数不变,约束条件的(1)~(7)也不变,而(8)要变为:

x(j)≤500, j=1,2,3

x(4),x(6),x(8)≤600, x(5),x(7),x(9)≤200 (8)

用MATLAB求解,程序如下: A2=[1, 1, 0, 0, 0, -1, -1, 0, 0; 0, 0, 1, 0, 0, 0, 0, -1, -1; 0, 0, 0, -1, 0, 1, 0, 1, 0; 0, 0, 0, 0, -1, 0, 1, 0, 1 ]; b2=zeros(1,4); v1=zeros(1,9);

v2=[500,500,500,600,200,600,200,600,200]; x0=[200,200,200,100,200,200,200,100,100];

opt1=optimset('largescale','off','MaxIter',3000,'MaxFunEvals',5000);

[x1,fv1,ef1,outlag,grad,hess]=fmincon(@ex10fun,x0,[],[],A2,b2,v1,v2,@ex10con,opt1);

[x2,fv2,ef2,outlag,grad,hess]=fmincon(@ex10fun,x1,[],[],A2,b2,v1,v2,@ex10con,opt1);

[x3,fv3,ef3,outlag,grad,hess]=fmincon(@ex10fun,x2,[],[],A2,b2,v1,v2,@ex10con,opt1);

solutions=[x1;x2;x3]; funvalues=[fv1;fv2;fv3]; exitflag=[ef1;ef2;ef3];

[solutions,funvalues,exitflag]

ex10fun.m和ex10con.m 部分程序和(1)中一样。

求得结果为:最优解为 x=[0,100,100,0,200,0,100,0,100],最优值 f=-400(最大值z=-f=400),exitflag=1(收敛)。该公司应购进100t 乙,100t 丙,两者混合生产出200t B,此时公司利润最大,为400 千元,即40 万元。此时的生产安排与(1)中相同。

(3)如果乙的进货价格下降为13千元/t,则目标函数改变,而约束条件不变。 目标函数变为

-z=(9*x(4)+15*x(5)-6*x(1)-13*x(2)-10*x(3)) 用MATLAB求解,代码如下:

function [f,g,H]=ex10fun(x) %编写目标函数的 M 文件; f=6*x(1)+13*x(2)+10*x(3)-9*x(4)-15*x(5); if nargout>1 %梯度

g=[6;13;10;-9;-15;0;0;0;0]; end

if nargout>2 H=zeros(9,9); end

其余部分同(1),(2)。

综上所述,对(1)情况,经求解得:最优解为x = [50,150,0,0,200,0,200,0,0],最优值 f=-750(最大值z=-f=750),exitflag=1(收敛)。该公司应购进50t 甲,150t 乙,两者混合生产出200t B,此时公司利润最大,为750 千元,即75 万元。

对(2)情况,经求解得:最优解为x = [50,150,0,0,200,0,200,0,0],最优值 f=-750(最大值z=-f=750),exitflag=1(收敛)。该公司应购进50t 甲,150t 乙,两者混合生产出200t B,此时公司利润最大,为750 千元,即75 万元。

从结果来看,(2)的条件“产品A的最大市场需求量增长为600t”,在本题中这个约束是不起作用的。我们看到,当产品A的最大市场需求量增长为100t 时,最优解的生产安排中并不生产A产品,所以当产品A的最大市场需求量增长为600t时,最优解的生产安排不变,最大利润也不变。这就是(1)和(2)的生产安排、最大利润相同,(3)中两种情况的生产安排、最大利润也相同的原因。

数学实验作业第五组

侯永利(121170011) 吕菊香(121170012) 陈智杰(121170018) 2014年8月12日星期二

本文来源:https://www.bwwdw.com/article/68oo.html

Top