司守奎<数学建模算法应用>第二版----第一章习题解答
- 1.1
- 题目
- 代码
- 1.2
- 题目
- 1.3
- 题目
- 代码
- 1.4
- 题目
- 分析
- 代码
1.1
题目
这道题就是简单的一个线性规划模型,不要求我们自行建立,所以就按照书本上的例题去写就行
代码
% 例题1
%使用matlab解决线性规划问题
%目标函数:z=3x1-x2-x3
% 要求x1,x2,x3都是下限大于0
c=[-3,1,1]';
A=[1,-2,1;
4,-1,-2];
b=[11,-3]';
Aeq=[-2,0,1];
beq=1;
lb=zeros(3,1);
ub=[];%对上限没有要求
[x,fval]=linprog(c,A,b,Aeq,beq,lb,ub)
运行结果如图所示
1.2
题目
分别用
M
a
t
l
a
b
和
L
i
n
g
o
求解下列规划问题
:
分别用 Matlab 和 Lingo 求解下列规划问题:
分别用Matlab和Lingo求解下列规划问题:
min
z
=
∣
x
1
∣
+
2
∣
x
2
∣
+
3
∣
x
3
∣
+
4
∣
x
4
∣
,
\min z=\left|x_{1}\right|+2\left|x_{2}\right|+3\left|x_{3}\right|+4\left|x_{4}\right|,
minz=∣x1∣+2∣x2∣+3∣x3∣+4∣x4∣,
s. t.
{
x
1
−
x
2
−
x
3
+
x
4
=
0
x
1
−
x
2
+
x
3
−
3
x
4
=
1
,
x
1
−
x
2
−
2
x
3
+
3
x
4
=
−
1
2
\text { s. t. }\left\{\begin{array}{l} x_{1}-x_{2}-x_{3}+x_{4}=0 \\ x_{1}-x_{2}+x_{3}-3 x_{4}=1, \\ x_{1}-x_{2}-2 x_{3}+3 x_{4}=-\frac{1}{2} \end{array}\right.
s. t. ⎩
⎨
⎧x1−x2−x3+x4=0x1−x2+x3−3x4=1,x1−x2−2x3+3x4=−21
书上例题的解释
% 例题2
clear;clc
% 由于有绝对值的问题,所以需要将变量进行代换
c=[1:4,1:4]';
%令ui=(xi+|xi|)/2,vi=(|xi|-xi)/2
Aeq=[1,-1,-1,1;
1,-1,1,-3;
1,-1,-2,3];
Aeq=[Aeq,-Aeq]
beq=[0,1,-0.5];
[y,z]=linprog(c,[],[],Aeq,beq,zeros(8,1));
x=y(1:4)-y(5:end)
z
运行结果如下:
1.3
题目
根据题目要求建立以下规划方程
对于完成产品
I
I
I来说,设以
A
1
,
A
2
A_1,A_2
A1,A2完成
A
A
A工序的产品分别为
x
1
,
x
2
x_1,x_2
x1,x2件,完成
A
A
A转入
B
B
B的三道工序
B
1
B
2
B
3
B_1B_2B_3
B1B2B3分别为
x
3
,
x
4
,
x
5
x_3,x_4,x_5
x3,x4,x5
以此类推,然后建立如下方程
max
z
=
(
1.25
−
0.25
)
(
x
1
+
x
2
)
+
(
2
−
0.35
)
x
8
+
(
2.8
−
0.5
)
x
9
−
300
6000
(
5
x
1
+
10
x
6
)
−
321
10000
(
7
x
2
+
9
x
7
+
12
x
9
)
−
250
4000
(
6
x
3
+
8
x
3
)
−
783
7000
(
4
x
4
+
11
x
9
)
−
200
4000
∗
7
x
5
\max z=(1.25-0.25)(x_1+x_2)+(2-0.35)x_8+(2.8-0.5)x_9-\frac{300}{6000}(5x_1+10x_6)\\-\frac{321}{10000}(7x_2+9x_7+12x_9)-\frac{250}{4000}(6x_3+8x_3)-\frac{783}{7000}(4x_4+11x_9)-\frac{200}{4000}*7x_5\\
maxz=(1.25−0.25)(x1+x2)+(2−0.35)x8+(2.8−0.5)x9−6000300(5x1+10x6)−10000321(7x2+9x7+12x9)−4000250(6x3+8x3)−7000783(4x4+11x9)−4000200∗7x5
s. t.
{
5
x
1
+
10
x
6
≤
6000
,
7
x
2
+
9
x
7
+
12
x
9
≤
10000
,
6
x
3
+
8
x
8
≤
4000
4
x
4
+
11
x
9
≤
7000
7
x
5
≤
4000
,
x
1
+
x
2
=
x
3
+
x
4
+
x
5
,
x
6
+
x
7
=
x
8
,
x
i
≥
0
,
i
=
1
,
2
,
…
,
9.
\text { s. t. }\left\{\begin{array}{l} 5x_{1}+10x_{6}\le6000, \\ 7x_{2}+9x_{7}+12x_{9}\le10000, \\ 6x_{3}+8x_{8}\le 4000\\ 4x_{4}+11x_{9}\le 7000\\ 7x_5\le 4000,\\ x_1+x_2=x_3+x_4+x_5,\\ x_6+x_7=x_8,\\ x_i\ge0,i=1,2,\dots,9. \end{array}\right.
s. t. ⎩
⎨
⎧5x1+10x6≤6000,7x2+9x7+12x9≤10000,6x3+8x8≤40004x4+11x9≤70007x5≤4000,x1+x2=x3+x4+x5,x6+x7=x8,xi≥0,i=1,2,…,9.
代码
% 例3
%这道题是实际应用题
%完成工序一共为8个
clear;clc
c = zeros(9,1); % 初始化目标函数的系数向量全为0
c(1) = 1.25 -0.25 -300/6000*5; % x1前面的系数是c1
c(2) = 1.25 -0.25 -321/10000*7;
c(3) = -250 / 4000 * 6;
c(4) = -783/7000*4;
c(5) = -200/4000 * 7;
c(6) = -300/6000*10;
c(7) = -321 / 10000 * 9;
c(8) = 2-0.35-250/4000*8;
c(9) = 2.8-0.5-321/10000*12-783/7000*11;% 我们求的是最大值,所以这里需要改变符号
A=[5,zeros(1,4),10,zeros(1,3);
0,7,zeros(1,4),9,0,12;
zeros(1,2),6,zeros(1,4),8,0;
zeros(1,3),4,zeros(1,4),11;
zeros(1,4),7,zeros(1,4)];
b=[6000,10000,4000,7000,4000]';
aeq=ones(2,9);
aeq(1,3:5)=-aeq(1,3:5);
aeq(2,8)=-aeq(2,8);
aeq(1,6:8)=0;
aeq(2,1:5)=0;
%aeq(6:9)=zeros(1,4)
%aeq=[aeq;aeq];
aeq(:,9)=0
beq=zeros(1,2);
beq=beq';
lb=zeros(9,1);
[x,z]=linprog(-c,A,b,aeq,beq,lb,[]);
%整数规划
intcon=1:9;
[x2,z2]=intlinprog(-c,intcon,A,b,aeq,beq,lb,[])
z2=-z2
1.4
题目
一架货机有三个货舱:前舱、中舱和后舱。三个货舱所能装载的
货物的最大重量和体积有限制(如表 3 所示)。现有四类货物用该货机进行装运,
货物的规格以及装运后获得的利润如表 4 所示。并且为了飞机的平衡,三个货
舱装载的货物重量必须与其最大的容许量成比例。问应如何装运,使货机飞行利
润最大?
假设:
每种货物可以无限细分;
每种货物可以分布在一个或者多个货舱内;
不同的货物可以放在同一个货舱内,并且可以保证不留空隙。
分析
这道题的目标函数还是比较好写的,包括其约束条件也是比较好写,但是货物重量必须与其最大的容许量成比例这个约束条件还是要好好琢磨的
代码
%例题1.4
%本题要求使得飞机利润最大,则目标函数与利润挂钩
clear;clc;
c=zeros(12,1);
c(1)=3100;
c(5)=3100;
c(9)=3100;
c(2)=3800;
c(6)=3800;
c(10)=3800;
c(3)=3500;
c(7)=3500;
c(11)=3500;
c(4)=2850;
c(8)=2850;
c(12)=2850;
A=zeros(10,12);
A(1,1:4)=1;A(2,5:8)=1;A(3,9:12)=1;
A(4,1:4:9)=1;
A(5,2:4:10)=1;
A(6,3:4:11)=1;
A(7,4:4:12)=1;
value=[480,650,580,390];
for i=1:length(value)
A(8,i)=value(i);
A(9,i+4)=value(i);
a(10,i+8)=value(i);
end
A
b=[10,16,8,18,15,23,12,6800,8700,5300]';
Aeq=zeros(3,12);
Aeq(1,1:4)=16;
Aeq(1,4:8)=-10;
Aeq(2,1:4)=8;
Aeq(2,9:12)=-10;
Aeq(3,5:8)=8;
Aeq(3,9:12)=-16;
Aeq
beq=zeros(3,1);
lb=zeros(12,1);
[x,z]=linprog(-c,A,b,Aeq,beq,lb,[]);
x
z=-z
运行结果如下: