0%

lingo线性规划

一、背景与问题

一位农民承包了 6 块耕地共 300 亩,准备播种小麦、玉米、水果和蔬菜四种农产品,各种农产品的计划播种面积、每块土地种植不同农产品的单产收益如下表所示

单产收益(元/亩)计划播种面积(亩)
地块 1地块 2地块 3地块 4地块 5地块 6
小麦500550630100080070076
玉米80070060095090093088
水果100096084065060070096
蔬菜1200104098086088078040
地块面积(亩)425644396059

问如何安排种植计划,可得到最大的总收益.

二、问题分析

由题意,不难看出优化模型的决策变量是每种作物在每个地块种植的面积。决策变量受到计划播种面积和地块面积的约束。

三、模型建立:

决策变量:用 $ x_{i, j} $ 表示将第 $ i $ 种作物种植到第 $ j $ 块地的亩数

已知参数:作物 $ i $ 的种植面积限制 $ plan_i $ ,地块 $ j $ 的面积限制 $ tot_j $ ,第 $ i $ 种作物种植到第 $ j $ 块地的单产收益 $ a_{i, j} $

决策目标:

约束条件:

四、模型求解

将以上模型输入 $ LINGO $ :

源代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sets:
plan/1..4/: x;
tot/1..6/: y;
link(plan, tot): p, t;
endsets

data:
x = 76 88 96 40;
y = 42 56 44 39 60 59;

p = 500 550 630 1000 800 700
800 700 600 950 900 930
1000 960 840 650 600 700
1200 1040 980 860 880 780;
enddata

max = @sum(link(i, j) : p(i, j) * t(i, j));
@for(plan(i) : @sum(tot(j) : t(i, j)) = x(i));
@for(tot(j) : @sum(plan(i) : t(i, j)) <= y(j));

求解可以得到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
Global optimal solution found.
Objective value: 284230.0
Infeasibilities: 0.000000
Total solver iterations: 10
Elapsed runtime seconds: 0.07

Model Class: LP

Total variables: 24
Nonlinear variables: 0
Integer variables: 0

Total constraints: 11
Nonlinear constraints: 0

Total nonzeros: 72
Nonlinear nonzeros: 0

Variable Value Reduced Cost
X( 1) 76.00000 0.000000
X( 2) 88.00000 0.000000
X( 3) 96.00000 0.000000
X( 4) 40.00000 0.000000
Y( 1) 42.00000 0.000000
Y( 2) 56.00000 0.000000
Y( 3) 44.00000 0.000000
Y( 4) 39.00000 0.000000
Y( 5) 60.00000 0.000000
Y( 6) 59.00000 0.000000
P( 1, 1) 500.0000 0.000000
P( 1, 2) 550.0000 0.000000
P( 1, 3) 630.0000 0.000000
P( 1, 4) 1000.000 0.000000
P( 1, 5) 800.0000 0.000000
P( 1, 6) 700.0000 0.000000
P( 2, 1) 800.0000 0.000000
P( 2, 2) 700.0000 0.000000
P( 2, 3) 600.0000 0.000000
P( 2, 4) 950.0000 0.000000
P( 2, 5) 900.0000 0.000000
P( 2, 6) 930.0000 0.000000
P( 3, 1) 1000.000 0.000000
P( 3, 2) 960.0000 0.000000
P( 3, 3) 840.0000 0.000000
P( 3, 4) 650.0000 0.000000
P( 3, 5) 600.0000 0.000000
P( 3, 6) 700.0000 0.000000
P( 4, 1) 1200.000 0.000000
P( 4, 2) 1040.000 0.000000
P( 4, 3) 980.0000 0.000000
P( 4, 4) 860.0000 0.000000
P( 4, 5) 880.0000 0.000000
P( 4, 6) 780.0000 0.000000
T( 1, 1) 0.000000 290.0000
T( 1, 2) 0.000000 200.0000
T( 1, 3) 6.000000 0.000000
T( 1, 4) 39.00000 0.000000
T( 1, 5) 31.00000 0.000000
T( 1, 6) 0.000000 130.0000
T( 2, 1) 0.000000 90.00000
T( 2, 2) 0.000000 150.0000
T( 2, 3) 0.000000 130.0000
T( 2, 4) 0.000000 150.0000
T( 2, 5) 29.00000 0.000000
T( 2, 6) 59.00000 0.000000
T( 3, 1) 2.000000 0.000000
T( 3, 2) 56.00000 0.000000
T( 3, 3) 38.00000 0.000000
T( 3, 4) 0.000000 560.0000
T( 3, 5) 0.000000 410.0000
T( 3, 6) 0.000000 340.0000
T( 4, 1) 40.00000 0.000000
T( 4, 2) 0.000000 120.0000
T( 4, 3) 0.000000 60.00000
T( 4, 4) 0.000000 550.0000
T( 4, 5) 0.000000 330.0000
T( 4, 6) 0.000000 460.0000

Row Slack or Surplus Dual Price
1 284230.0 1.000000
2 0.000000 630.0000
3 0.000000 730.0000
4 0.000000 840.0000
5 0.000000 1040.000
6 0.000000 160.0000
7 0.000000 120.0000
8 0.000000 0.000000
9 0.000000 370.0000
10 0.000000 170.0000
11 0.000000 200.0000

结果为:

image-20201029201932475

最大收益为: $ 284230.0 $ 30.0 $ 230.0 $ 30.0 $$