数学建模社区-数学中国

标题: 数学建模(11)——Lingo使用&数学规划 [打印本页]

作者: 佛自业障    时间: 2018-10-29 11:14
标题: 数学建模(11)——Lingo使用&数学规划
注意事项Lingo中默认所有的变量都是非负的,在程序中不需要写出相应的约束
: F: C6 K2 Y9 \. P; H$ @$ p. }0 a) Q% K使用集合的方式定义向量,必须先定义,而标量不需要定义,直接使用即可5 w0 M/ h. m) D
三个要素条件:目标函数、决策变量、约束条件2 ~$ y4 f/ U3 _4 x# E
一个语句可以分几行输入,但必须使用英文分号结束' ]2 W! g' f: @" O7 L3 P
注释使用!开始,英文分号结束5 K. o7 f5 n$ Q- a/ Y: A' h
变量不区分大小写5 U0 m3 ^1 H  L8 _
所有函数以@开头/ M7 g: P( M, y5 A
函数与运算符Lingo具有9种逻辑运算符0 b+ ]  H  {5 Z+ f( @5 l6 M; m" c

- f9 y/ \+ V' [& N+ a1 |. l‘#not#’ 否定该操作数的逻辑值,’#not#’是一个一元运算符。 4 G5 i$ o* r1 A* ~1 d" N3 V$ s
‘#eq# ’ 若两个运算数相等,则为 true;否则为 false。 0 Y. k! z( G  E
‘#ne#’ 若两个运算符不相等,则为 true;否则为 false。 ' V: Z* I- ]8 W0 k( I. T2 X( u
‘#gt#’ 若左边的运算符严格大于右边的运算符,则为 true;否则为 false。
8 _0 ]/ H# {  a( W5 }7 S‘#ge#’ 若左边的运算符大于或等于右边的运算符,则为 true;否则为 false。
# m/ N% z, N' w& H+ v‘#lt#’ 若左边的运算符严格小于右边的运算符,则为 true;否则为 false。 $ k7 Z, f5 G/ y8 Y# o5 I
‘#le#’ 若左边的运算符小于或等于右边的运算符,则为 true;否则为 false。
" j) k# t9 A2 o( S‘#and# ’ 仅当两个参数都为 true 时,结果为 true;否则为 false。
- S/ n3 k" t- x3 m# h, o‘#or#’ 仅当两个参数都为 false 时,结果为 false;否则为 true。( O) y2 c3 s: p
  b/ u' P7 s, g" P
集循环函数. a) Z& B; C, E7 B# [6 i

: ~" t3 }# g( o# w@for:该函数用来产生对集成员的约束。 & i4 m% O; A" F- M# v( ?  Y7 W% F
@sum:该函数返回遍历指定的集成员的一个表达式的和。 ! J% [. q' X: o" v  p
@min和@max:返回指定的集成员的一个表达式的最小值或最大值。6 |% f4 s, m' c% y3 m% J& d
' j4 p* K5 l+ j& U- w( \& b
Lingo提供了大量的标准数学函数9 y' F+ A7 F) e8 f: P  F7 q- Q

! h) n& x) i6 z2 t: c@abs(x)返回 x 的绝对值。
! o; D  ~8 ^% x# T2 Q* X1 O! S@sin(x)返回 x 的正弦值,x 采用弧度制。
! l# q4 p: S1 R' P@cos(x)返回 x 的余弦值。 1 p  I% A1 k& c2 X* P
@tan(x)返回 x 的正切值。 % e$ }+ W% Z! A& y) U' F
@exp(x)返回常数 e 的 x 次方。
, A$ q5 z4 ?; w" B@log(x)返回 x 的自然对数。
& J: E4 I& G8 e  z- Y" K@lgm(x)返回 x 的 gamma 函数的自然对数。 & C; k: B7 |/ H0 |8 ?) f
@mod(x,y)返回 x 除以 y的余数。
6 t3 H( l* T# w0 E/ T6 i@sign(x)如果 x<0 返回-1;否则,返回 1。
$ e9 ]' E3 Y! R3 k/ n@floor(x)返回 x的整数部分。当 x>=0 时,返回不超过 x 的最大整数;当 x<0 时,返回 不低于 x 的最大整数。
1 `- J1 K* p$ x! o! M/ m@smax(x1,x2,…,xn)返回 x1,x2,…,xn中的最大值。 5 v+ T0 {! _" s9 [* y
@smin(x1,x2,…,xn)返回 x1,x2,…,xn中的最小值。# l+ i1 M4 Z( i! _
2 H# a! J5 @: P9 [
变量界定函数实现对变量取值范围的附加限制,共 4种
( H4 h2 H; u- M" B" l' Q5 r( D* O6 n. e. m6 ^& }  [
@bin(x)限制 x 为 0 或1; ' i: n  m" r7 y0 I
@bnd(L,x,U)限制 L≤x≤U;
3 J$ ~1 m, d2 I9 h$ R@free(x)取消对变量 x的默认下界为 0 的限制,即x可以取任意实数;
" i7 n) V4 b6 g  r+ k. Y@gin(x)限制 x 为整数。3 f2 u* L5 }0 [9 l
7 A6 e! {4 S2 p! O
代码格式model:
3 w' A7 }/ q0 W6 z7 g
. O' M/ m; @+ Ssets:
% {; R1 q3 f" O$ \. \  ~!此处为集合定义;: C, c8 `& f" ~0 h6 A: L
endsets
+ ~9 R. z8 p- v. l* `$ B7 Y; Q. S# |- p, R" Y6 R5 m0 U7 x% s
data:
7 N+ N; C% O- w( x8 c!此处为数据导入;: X; {5 @, V8 I# i. n
enddata4 I/ p0 w7 X; O( f; V. |
% s: k5 W  S8 i" H$ p
calc:& T% \6 N, p. T) p( H: |; j" L
!此处为计算段,专职已知数据的计算处理,不能含有变量;9 G+ b% l! `+ P+ i: A. c2 B4 P) t) W2 {& s
endcalc
; ?8 Q0 g! `0 X  M4 z- W: i" E% n: U+ Q
min\max=....;  !目标函数;
6 [0 K$ G& N# b) A2 I' I2 r3 D. b@for(....);   !约束条件;7 M; q1 _& Z" Z3 b3 d* D
...
& n  v( P& k2 K& n+ z, \3 L% v' g4 |  q
end
0 k5 r- e7 i3 p! K, K3 ~* v4 W% [) w& W' s+ k7 H
实例线性规划 1.jpg 6 x- w" p8 A( k# h0 C/ Q+ z6 h
8 w. d2 S& a' J" M8 j5 ]
2.jpg 4 s# _, b9 m9 o8 V/ n( ~
model:% J+ O2 J/ n9 [  d% J
sets:
. N9 X7 K1 k7 k. |( I; Q1 }!集合名称/成员变量/属性;
3 ^2 b; n9 ]: l# l6 f$ E9 v% a+ h    warehouse/1..6/:e; ( N+ x% G  u5 Z5 y/ m4 P
    vendors/1..8/:d;4 T" T' q, h: J% O& e4 X
!派生集合名称(集合名称1、2):属性;) s: M/ R: T. l/ J: }
    links(warehouse,vendors):c,x;1 X5 o. n1 f6 r% c$ Z4 T/ b
endsets- X5 b0 a: h: x* x1 V

9 Q# ~2 U' ?6 ^data:
0 O, U0 w8 e+ O* I1 N- H2 z$ @  g!属性=数据列表;
0 F6 ]8 a6 O8 `3 J  ~!程序与数据在同一文件 7 P4 V4 |7 t, n4 d8 R6 u
    e=60 55 51 43 41 52
5 u6 @- u# v! \$ v/ q    d=35 37 22 32 41 32 43 38
( @( Y. G5 k8 k& y# m    c=6 2 6 7 4 2 9 5
9 u" Q. R; r+ t  j* n" ^3 s      4 9 5 3 8 5 8 26 L# D; D& @; c& E% x7 \
      5 2 1 9 7 4 3 35 I" {8 p' [: B0 x- k$ X
      7 6 7 3 9 2 7 1% ~4 {* P/ \2 r+ F! M. g
      2 3 9 5 7 2 6 5
; f. ~0 R/ H$ F( G& U      5 5 2 2 8 1 4 3;* R  i' d* G$ x# s% h
' ~3 l: ]' e0 ?# q7 }
!通过纯文本文件传递数据;
! W' I) ^* Q, W5 Pe=@file(sdata.txt);) o8 W+ ^: [' i2 }( H" r. w
e=@file(sdata.txt);
" I" Y+ P: O. ?e=@file(sdata.txt);2 _+ N" h) o2 t( d
@text(sdata2.txt)=@table(x);!将计算结果以表格形式输出文本文件;
: R' e  x- \. D1 G4 `!sdata.txt文本文件内容
8 s5 D6 O1 _) [2 r% u 60 55 51 43 41 52~   
$ s$ m/ n9 f' Y 35 37 22 32 41 32 43 38~
: E- j1 r' }- y2 e 6 2 6 7 4 2 9 5& J. e5 W3 R4 Y! m, m
4 9 5 3 8 5 8 2
1 t0 b+ _- O0 O 5 2 1 9 7 4 3 3, H: G2 j3 a4 `4 S
7 6 7 3 9 2 7 1
/ J  P' [, K0 L$ W% x. q 2 3 9 5 7 2 6 5$ P6 M" V1 \* M
5 5 2 2 8 1 4 3;!~是记录分隔符;5 \* `5 t6 r, W. r# ~. v: Z
enddata% ?3 I1 h$ F3 H; o7 P3 ~& Q2 j# L
9 z/ Z2 B9 x' O9 \  X6 s# f
!目标函数;9 g8 L) t( X& H- {6 o/ _6 h4 a, L
    min=@sum(links:c*x);
% O4 T4 O! @" ]6 r& C" Z!需求约束;! w8 f2 h4 g- F6 C* ]1 H
    @for(vendors(J)sum(warehouse(I):x(I,J))=d(J));! \( p. b" {, D' \
!产量约束;
' s1 X$ |& e: W0 C    @for(warehouse(I)sum(vendors(J):x(I,J))<=e(I));
# h* Q1 \) D* t7 f& Y!数据;% ~7 R6 S+ @7 i

+ S; r" [0 T! m4 |& q' fend
; A4 B8 q$ |* M$ x: [0-1整数规划( u$ b6 ]! `' k. z2 d% L
11.jpg
: P. t4 e+ ^. R( M$ B" x! C5 ]6 y. ?, J/ F
22.jpg 9 N$ Z3 W. Z& Q  S/ O5 E
model: . U) b+ w+ G4 y5 o8 [7 c7 S
sets:
/ I1 ~+ S0 i5 A. n8 xnum/1..10/:x0,y0,x;
6 [4 `& {0 a3 L9 x  w5 ~link(num,num):y,d;0 Y) w% U! ?1 W9 c+ {; l/ v
endsets * _4 k- f) ]7 {1 w3 F4 C9 F
data:
/ B, C' U5 y1 u* Dx0=9.4888 8.7928 11.5960 11.5643 5.6756 9.8497 9.1756 13.1385 15.4663 15.5464;
3 {; u1 z9 @1 ]/ _* m! Hy0=5.6817 10.3868 3.9294 4.4325 9.9658 17.6632 6.1517 11.8569 8.8721 15.5868;
& Z! x1 _/ z8 d  ~enddata # ]8 J& o+ C, J3 N
, @  Q* Z4 y9 D
calc:
: r" c; P8 i4 J# z7 ~  t@for(link(i,j):d(i,j)=@sqrt((x0(i)-x0(j))^2+(y0(i)-y0(j))^2));
8 w+ E/ T( B; D' t  Hendcalc7 s( U% V9 i# Z1 B8 c7 D

8 O- V" _/ n( hmin=@sum(num:x);& W" t8 h* }' s0 N7 J) x
@for(num(j)sum(num(i):y(i,j))>=1);. E/ R5 m0 p/ b7 O- h0 ^% `
@for(link(i,j):d(i,j)*y(i,j)<=10*x(i));
5 q! w9 m/ B/ `, z@for(link(i,j):x(i)>=y(i,j));
; x. d/ m& S5 d7 V; a& t' q! Q6 x@for(num(i)sum(num(j):y(i,j))<=5);
- Q! v( ^3 h# z  L+ \6 _@for(link(i,j)bin(y(i,j)));; C. y, L: n. m/ h' i
@for(num(i)bin(x(i)));
# a' W4 y: K* ?: N5 `end 2 L$ N; [5 c, d) ~& ?
非线性拟合(最小二乘法)" Y# Q) |. T  O" t. k) N2 F
* l. f+ [5 S* I1 T$ U

" J: f8 X  d. P( w; e* kmodel:
8 k+ d/ s8 i+ @% A6 s* csets:
/ A5 i( m0 I, G+ A1 i4 q7 }: Jnum/1..8/:x0,y0;
& s& u4 M4 {( `: A1 V: Z. |3 @" M" a+ H, P
endsets 2 ^8 f% e9 n! N6 s
data:
  F' g5 Z8 D6 H( mx0=6 2 6 7 4 2 5 9; 0 K% \7 V% ?2 J1 d% h+ f0 e4 ]
y0=4 9 5 3 8 5 8 2;
$ h' F2 S3 V* g) w/ p, R0 J2 N/ _* }" zenddata * L! W& m) J$ l+ Z) o) j

& |+ m& D. t" I0 U# \3 mmin=@sum(numy0-a/(@exp(b*x0)+c))^2);, W( Y2 H: W$ K9 {6 [' o
@free(a);@free(b);@free(c);( U0 \9 {6 [1 Q0 x
end
+ b& i2 q2 i& J7 }# A1 YLingo基本使用方法2 Z- w  h, ^9 B6 u+ G4 {' {$ _
LP模型在Lingo中的一个典型输入方式:   A2 r% C5 c, _" q" U% {4 I! Y' r
1.以“MODEL:”开。
9 C9 ]  d! L: ?, c  U2.集合定义部分从(“SETS:”到”ENDSETS”)定义集合及其属性。
- k/ J' T/ h4 @& e3.给出优化目标和约束。 3 y8 ?4 u% L/ O: l+ D& Y; I" `
4.集合定义部分从(“DATA:”到”ENDDATA”)。 7 j* ?# [; D# C& L8 G
5.以”END”结束。2 N2 H. N0 Q% ~( w& G$ d( {

. n3 G4 |  [& l) l! g8 Q0 e目标函数的定义方法
6 O) e3 R9 u0 c( y7 n5 E@SUM(集合(下标):关于集合的属性的表达式)4 I: V+ I7 N6 z6 A- e

  I% {7 k9 y+ c( j7 [约束的定义方法 % ?0 _- d% n% t3 W2 u8 z2 i
循环函数:@FOR(集合(下标):关于集合属性的约数关系式) 6 B5 o) X4 H" r
如果有对集合下标有限制,需加一个”|”分开
: k+ I' V4 n  _
. M7 _7 f- y6 M. X0 ~' {2 D/ l逻辑运算符( `+ ~' O! c9 X& [9 a4 i4 R. a0 p8 q
1为TRUE, 0为FALSE
! E0 n. [2 o8 v+ E" C#AND#(与) 、#OR#(或) 、#NOT#(非):逻辑值之间的运算,它们操作的对象本身已经是逻辑值或逻辑表达式,计算结果也是逻辑值。   K7 h* h* T( y; i
#EQ#(等于) 、#NE#(不等于) 、#GT#(大于) 、#GE#(大于等于) 、#LT#(小于) 、#LE#(小于等于):是“数与数之间”比较,也就是它们操作的对象本身必须是两个数,计算得到的结果是逻辑值。% W) Q" x4 n2 ]- F" S
/ _, w) b, A! ^, S+ e- t. W. [5 E
集合循环函数
- y8 C/ A- O- a6 _8 L@FOR(集合元素的循环函数)
+ I  m2 L! W4 w, Q$ x@MAX(集合属性的最大值函数)
) ~/ A* f7 ]* V; R@MIN(集合属性的最小值函数)
% s# l3 \2 v5 X. S$ P' U# }$ E9 F@PROD(集合属性的乘积函数)8 [/ X0 J; T4 p( X# B1 k
@SUM(集合属性的求和函数)
; \, D  W  }1 Q; h$ I, ~" p变量定界函数
7 ?# \# x4 z9 _$ O  T1 u/ O@BND(L, X, U):限制L<=x<=U。
% V0 Y  P% `1 W, P' ?@BIN(X):限制为X为0或1。' f/ `* P3 X4 Y* [
@FREE(X):取消对X的符号限制。5 I3 S( }! _' O2 P
@GIN(X):限制X为整数。7 k/ Z' ]: [* P7 |0 l% ^# A
文件输入函数
. M; {5 I3 E# Q) m6 g; d@FILE(filename):当前模型引用其他ASCII码文件中的数据或文本时可以采用此函数。用 ‘~’来隔开数据。
9 U1 U( O9 B0 ~# s. z" p@OLE(filename,区间):打开excel,输入数据
2 c4 z, U/ x* ?) K& M1 B' |3 }% h5 x8 [. p- Z
. H9 g( B' A6 O8 V3 \

! ?% w( j; b. K& Y, X+ q
0 @0 y- X( h3 k7 O& Q, c




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5