n' @9 v! C3 a: N% m8 J " c H: ~- p" F' X# Z这样的一次操作叫做转动(pivot)3 f0 b! i- Y( _$ d+ V
! I/ `+ ?8 G) v! l5 E& X
& }% Y! h/ A) d* W+ s
(结合例子请思考:选择约束最紧的变量做互换的原因。提示:如果换的不是最紧的约束看看会违反什么性质) 7 [2 K9 m* q8 `) r" {+ f6 o8 ^& `: F% R! V8 @# n; V, V
: T7 D' S* \2 M2 h! ~ c* _
然后选择变量或者,不选是因为增大会导致目标z减小。0 s/ f; [$ `7 l2 G9 _8 z: ^
1 j3 w) c9 [: r: g' s 5 b4 g L/ D0 P w0 M1 {如果选择 ,同样的方法,互换与可以得到新的但等价的约束系统: : \7 D. k0 p" t) H+ H0 e$ N! i0 o! X3 t3 E% X% h/ r0 |/ c0 ^* M
/ ]9 f6 H1 {7 Z最大化 ; E8 e/ D, c4 L. g* e+ t9 ?
2 W/ V. R/ P4 I! ^满足约束条件 4 y3 a N" ~* M4 N5 |) e$ \ # C6 H) v0 o k+ |4 f+ Q" V/ l6 J ) d' l5 {* g" m5 M% h8 W% d a. e! J * V4 H, O6 _- U4 |
- N$ z, d% k; A' I 3 `% t3 V+ h, e7 l+ R: K% p' K8 [9 {: g
% B7 c6 F' O. i4 ] F ; m4 n e! d ^# b6 ?1 w* G接下来也只剩下这个变量可选了,与互换,得到 - M# r& r. r4 O) d+ ]9 i: a 3 s, A2 c8 @* L! X+ E, V. u7 q8 b/ @ L; ?1 Q
最大化 * w- e# Y6 K. o, {! n) ]
/ L1 T" J+ k/ \; S$ F9 L 9 L/ x) d, k6 D- |2 |; _+ N满足约束条件 0 w: z r& a( A 4 x: d/ h3 h# P$ v# J! r. B; W0 a; x$ X/ d
5 j' [4 z3 W" L* H9 r" C5 F3 E0 {& x8 s* l
! ]. x; ^* Y4 ? t8 P* K( U. I! W
& h, `0 f4 B- l9 F( ~此时目标函数右边变量系数全部为负数,且变量具有非负约束,显然这时候能得到的z的最大值为28。当且仅当。带入解得。除去附加的松弛变量,最终这个线性规划最优解为 4 d" `1 L# d& P' W 4 j. i: G; X: f0 l+ Z1 i& k- U L( J& b4 m. Z% O! g! O 6 }* ~) y/ g% {5 l6 W5 p; ]思考:每次转动操作交换的两个变量对单纯形法的运行时间有着怎样的影响?如何选择可以使单纯形法尽快结束?(提示:每次pivot尽可能让目标函数增大得多)' Z6 H* @( Q8 L/ x8 Z9 t; E
/ b8 j3 n1 i+ k+ ^4 s! V" C; n! l+ \9 I" W6 ^7 \0 U q) h
单纯形算法代码实现% j$ } ?# T- `6 n" P
Q( u* F3 r- w& H5 D* e6 G. B$ ^ . }- L" p' y- i9 D% |: p伪代码: ( t% M/ G. E7 B+ Q$ y : L7 j3 t: F: F5 y$ w- Y1 b0 q5 R0 n5 c3 Z 2 f8 t1 }7 \8 b0 M, P! V& c4 asimplex: R8 E2 K% b; N8 o+ v# O3 i
检查是否无解 , g$ u5 X. h' w6 R, J loop: 5 y. c- N2 _6 S 找出目标函数中前面系数为正数的一个变量x% g2 b; Z7 ?2 Y8 U7 j% a
如果找不到x 3 v2 s6 p9 \/ a! y: S 返回目标函数的常数项(已找到目标函数最大值) ( d& S3 Q& {' n8 A 找到对x的增长约束最紧的变量y ' q6 H( B$ V, R4 X% y- D 如果找不到y 7 W0 z3 }3 [' e) J 返回Inf- E0 q ?' | @% s6 M7 l
互换变量x,y(pivot(x,y),操作后问题与原来等价) 4 m6 `1 ^; t6 O! P Y & o, J2 V- O g& G2 D; v + Z# j. S+ l) E: Z) `% G s - y& E/ [4 |& D8 [ * Y+ h4 d$ [5 A% w9 J非标准型转换为标准型魔法码(github上给出的参考代码要求输入的是标准型)& u( e2 Q# `! Q
: I r2 n$ b, L) x7 @ h. \+ d- ?3 @
A, p+ L& f2 d4 N" c; m) n! _
输出目标函数达到最大值时自变量的取值: R; I6 [1 l3 o- {
% A6 D! G% X" a
. d. F$ B1 B1 F$ Y思考:会不会存在一种情况:虽然一个线性规划问题有解,但是单纯形算法仍会无休止迭代下去。 9 K* X; Q/ a2 I8 T3 {- q: h: F) V" F; o" t/ i
/ E; M' j1 q2 {" h! A
思考:如果判断出这样一种无解的情况: $ d$ q- x# [% A# J3 j) d' ^! D
. o$ ?8 d' r1 z" f# A, Y+ E- K% w, q# H
G/ e& l; g7 L2 q; @5 R, j+ m X1 E _$ v" S9 K- K
( B% @( O% F5 u- `: x 6 s7 E* u2 c3 X/ l' f6 J: d, A
请关注数学中国微信公众号和数学中国网微博号 联系QQ数学中国浅夏3243710560 1 z5 o6 z4 d2 u: P, h* O' |4 Z _3 ^+ \1 Y9 C$ Q) g$ D/ k
o9 D' h$ `0 Q/ y" Q. x