线性规划问题
线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题,一般用于求解最优化问题。因为其目标函数及约束条件均为线性函数,所以被称为线性规划问题。线性规划所研究的对象属于最优化的范畴,本质上是一个极值问题。
基本要素:1.决策变量:线性规划问题中要确定的未知量,可有决策者决定和控制。
2.目标函数:是决策变量的函数,反应决策者对于线性规划问题结果的要求。
3.约束条件:指决策变量取值时受到的各种资源条件的限制,通常表达为含决策变量的等式或不等式。
特征:目标函数和约束条件中的函数都是决策变量的线性函数,并且约束条件是必不可少的。
线性规划问题的模型建立
数学模型的一般形式:1.列出约束条件及目标函数;
2.画出约束条件所表示的可行域;
3.在可行域内求目标函数的最优解及最优值。
数学模型的建立:从实际问题中建立数学模型一般有以下三个步骤:
1.根据影响所要达到目的的因素找到决策变量;
2.由决策变量和所在达到目的之间的函数关系确定目标函数;
3.由决策变量所受的限制条件确定决策变量所要满足的约束条件。
标准形式:
线性规划问题的模型求解
1.Lingo求解
Lingo是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”,可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等,功能十分强大,是求解优化模型的最佳选择。Lingo 是使建立和求解线性、非线性和整数最佳化模型更快更简单更有效率的综合工具,它提供强大的语言和快速的求解引擎来阐述和求解最佳化模型。
一般地,使用Lingo求解运筹学问题可以分为以下两个步骤来完成:
1)根据实际问题,建立数学模型,即使用数学建模的方法建立优化模型;
2)根据优化模型,利用Lingo 来求解模型。主要是根据Lingo软件,把数学模型转译成计算机语言,借助于计算机来求解。
例如:求解下列线性规划问题 应用Lingo来求解该模型,只需要在Lingo窗口中输入以下信息:
m
a
x
=
5
∗
x
1
+
3
∗
x
2
+
6
∗
x
3
;
max=5*x1 +3*x2 +6*x3;
max=5∗x1+3∗x2+6∗x3;
x
1
+
2
∗
x
2
+
x
3
<
=
18
;
x1 +2*x2 + x3 <=18 ;
x1+2∗x2+x3<=18;
2
∗
x
1
+
x
2
+
3
∗
x
3
=
16
;
2*x1 + x2+3*x3 =16 ;
2∗x1+x2+3∗x3=16;
x
1
+
x
2
+
x
3
=
10
;
x1 + x2 + x3 =10 ;
x1+x2+x3=10;
@
f
r
e
e
(
x
3
)
;
@free(x3);
@free(x3);
然后按运行按钮,得到模型最优解,具体如下:
O
b
j
e
c
t
i
v
e
v
a
l
u
e
:
46.00000
Objective\ _{}\ _{}value: 46.00000
Objective value:46.00000
V
a
r
i
a
b
l
e
V
a
l
u
e
R
e
d
u
c
e
d
C
o
s
t
Variable\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}Value\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}Reduced\ _{}\ _{}Cost
Variable Value Reduced Cost
x
1
14.00000
0.000000
\ _{}x1\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}14.00000\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}0.000000
x1 14.00000 0.000000
x
2
0.000000
1.000000
\ _{}x2\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}0.000000\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}1.000000
x2 0.000000 1.000000
x
3
−
4.000000
0.000000
\ _{}x3\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{} -4 .000000\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}0.000000
x3 −4.000000 0.000000
由此可知,当
x
1
=
14
,
x
2
=
0
,
x
3
=
−
4
x1 =14,x2 =0,x3 =-4
x1=14,x2=0,x3=−4 时,模型得到最优值,最优值为
46
46
46。
2.MATLAB求解
使用Matlab进行模型求解时需调用linporg()函数,linprog函数是用来求解线性规划问题的。
在 MATLAB中线性规划问题的标准格式:若是目标函数是求解最大值的话,则取-C形式:
MATLAB语句:
[
X
,
f
v
a
l
1
]
=
l
i
n
p
r
o
g
(
f
,
A
,
b
,
A
e
q
,
b
e
q
)
;
[X,fval1] = linprog(f,A,b,Aeq,beq);
[X,fval1]=linprog(f,A,b,Aeq,beq);则可以得到最优解
f
v
a
l
1
=
f
′
∗
X
fval1 = f '*X
fval1=f′∗X。
例如:求解下列线性规划问题 程序:
c
=
[
2
;
3
;
−
5
]
;
c = [2;3;-5];
c=[2;3;−5];
a
=
[
−
2
,
5
,
−
1
;
1
,
3
,
1
]
;
a = [-2,5,-1;1,3,1];
a=[−2,5,−1;1,3,1];
b
=
[
−
10
,
12
]
;
b = [-10,12];
b=[−10,12];
a
e
q
=
[
1
,
1
,
1
]
;
aeq = [1,1,1];
aeq=[1,1,1];
b
e
q
=
7
;
beq = 7;
beq=7;
[
x
,
f
v
a
l
1
]
=
l
i
n
p
r
o
g
(
−
c
,
a
,
b
,
a
e
q
,
b
e
q
,
z
e
r
o
s
(
3
,
1
)
)
[x,fval1 ]= linprog(-c,a,b,aeq,beq,zeros(3,1))
[x,fval1]=linprog(−c,a,b,aeq,beq,zeros(3,1))
结果:
x
=
x =
x=
6.428571428255824
6.428571428255824
6.428571428255824
0.571428570655132
0.571428570655132
0.571428570655132
0.000000001089048
0.000000001089048
0.000000001089048
f
v
a
l
1
=
fval1 =
fval1=
−
14.571428563031805
-14.571428563031805
−14.571428563031805
由此可知,当
x
1
=
6.428571428255824
,
x
2
=
0.571428570655132
,
x
3
=
0.000000001089048
x1 =6.428571428255824,x2 =0.571428570655132,x3 =0.000000001089048
x1=6.428571428255824,x2=0.571428570655132,x3=0.000000001089048 时,模型得到最优值,最优值为
−
14.571428563031805
-14.571428563031805
−14.571428563031805。