Xpress-MP 1 Ver 1.1 2006. 2. 16 (Ver1.0) 2006. 3. 1 (Ver1.1) 1 2006 3 Xpress-MP Xpress-MP 2006
Xpress-MP,. Dash [1]. mosel,, mosel.,,?, shokosv Xpress-MP,., 2. Example. 1 Xpress-MP 2 mosel 3 mosel 4, shakosv Xpress-MP Hyper ( ), Xpress-IVE, 0.1. 0.1: Xpress-MP.,.,,,. i
1 Xpress-MP 1 1.1 (shakosv ) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1 1.2 Xpress-IVE : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4 2 Xpress-MP,! 6 2.1 (LP) (LPSimple.mos) : : : : : : : : : : : : : : : : : : 6 2.2 (IP) (IPwithData.mos) : : : : : : : : : : : : : : : : 8 2.3 (QP) (QPwithData.mos) : : : : : : : : : : : : : : : 11 2.4 0-1 (Knapsack.mos) : : : : : : : : : : : : : : : : : 14 2.5 (DEA) (DEA.mos) : : : : : : : : : : : : : : : : : : : : : : 17 3 mosel 22 3.1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 22 3.2 model uses : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 22 3.3! writeln() : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23 3.4 (declarations end-declarations) : : : : : : : : : : : : : : : : : : : 23 3.4.1 (real, integer, mpvar ) : : : : : : : : : : : : : : : : : : : : : : 23 3.4.2 (=) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 24 3.4.3 (set of, range) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 24 3.4.4 (array of) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 24 3.5 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 25 3.5.1 (+, -, *, / ) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 25 3.5.2 (:= ) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 26 3.6 (parameters end-parameters) : : : : : : : : : : : : : : : : : : 27 3.7 (>=, <>, and, or ) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29 3.8 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29 3.8.1 (if, case ) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29 3.8.2 (forall, while, repeat ) : : : : : : : : : : : : : : : : : : : : : : 30 3.9 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 31 3.9.1 (is free) : : : : : : : : : : : : : : : : : : : : : : : : : : 31 3.9.2 0-1 (is integer, is binary) : : : : : : : : : : : : : : : : : : : 32 3.10 (initializations from end-initializations) : : : : : : : : : : : : : : : : : : : : 32 3.11 (function, procedure) : : : : : : : : : : : : : : : : : : : : : : : : : : 33 3.12 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 33 3.12.1 (sum, prod, round, abs ) : : : : : : : : : : : : : : : : : : : 33 3.12.2 (minimize, maximize) : : : : : : : : : : : : : : : : : : : : : : : : : : : 34 3.12.3 (random) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 34 ii
4!? 35 4.1 (fopen ) : : : : : : : : : : : : : : : : : : : : : : 35 4.2 (gettime) : : : : : : : : : : : : : : : : : : : : : : : 35 4.3 (getprobstat) : : : : : : : : : : : : : : : : : 35 4.4 (,, ) : : : : : : : : : : : 36 4.5 (minimize, maximize) (setcallback) : : : : : : : : 37 4.6 (sethidden) : : : : : : : : : : : : : : : : : : : : : : : : 37 4.7 (create) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 37 38 38 iii
1 Xpress-MP Xpress-MP, (a) shakosv Xpress-MP. 2 (b) (c) Xpress-IVE. C Xpress-MP., (a), (b). 1.1 (shakosv ) shakosv Xpress-MP., shakosv Xpress-MP, (QP).,.. 1: mosel ( 1.1).,, ``mos''., ``Ex01.mos''. Ex01.mos model Ex01 uses "mmxprs" declarations a: mpvar b: mpvar end-declarations 3*a + 2*b <= 400 a + 3*b <= 200 profit := a + 2*b maximize(profit) 2: writeln("profit is ", getobjval) writeln(" a = ", getsol(a), "; b = ", getsol(b)) end-model. 3: ( 1.2). shakosv> mp-model > exec Ex01 > quit 2 18 Windows Xpress-MP, (b) 1
1.1: 1.2: Xpress 2
1.1: Xpress-MP mp-model exec (.mos) quit help compile (.mos) load (.mos) cload (.mos) run (.mos) list exportprob -m (.mat) Xpress-MP. mp-mosel. shokosv mp-.,. Xpress-MP.....,.. run,.,. MPS.. 3
1.2 Xpress-IVE Xpress-IVE. 1: Xpress-IVE ( 1.3). 2: mosel ( 1.4).,, ``mos''. 3: ( 1.4). 1.3: Xpress-IVE 4
1.4: 5
2 Xpress-MP,!,, mosel,., (LP) (IP). 3 (22 ), (LP), (IP). 2.1 (LP) (LPSimple.mos) : (LP) min s.t. cx Ax = b x = 0;., A b, c, A = 2 6 4 3 1 1 2 2 0 27 5 ; b = 2 1 3 2 3 6 4 4 57 5 h3 ; c = 2 4 ; 7 i. (LP) ``LPSimple.mos''. 6
LPSimple.mos 1 model LPSimple 2 uses "mmxprs" 3 4 writeln(" (LP):") 5 writeln(" min c x") 6 writeln(" s.t Ax >= b, x >= 0") 7 writeln(" ") 8 9!!! A, b, c, x 10 declarations 11 I = 1..3! I 12 J = 1..3! J 13 14 A: array(i, J) of real! A 15 b: array(i) of real! b 16 c: array(j) of real! c 17 18 x: array(j) of mpvar! x 19 end-declarations 20 21!!! 22 writeln(">.") 23 A := [1, 1, 2, 24 2, 0, 2, 25 2, 1, 3] 26 b := [4, 5, 7] 27 c := [3, 2, 4] 28 writeln(" A = ", A, " n b = ", b, " n c = ", c) 29 30!!! Ax >= b, x >= 0 31 writeln(">.") 32 forall (i in I) do 33 sum(j in J) A(i,j)*x(j) >= b(i) 34 end-do 35 36!!! ObjFunc := cx 37 writeln(">.") 38 ObjFunc := sum(j in J) c(j)*x(j) 39 40!!! 41 writeln("> ") 42 minimize(objfunc) 43 44!!! 45 writeln(" = ", getobjval) 46 forall (j in J) writeln(" x(", j, ") = ", getsol(x(j))) 47 end-model 7
. LPsimple.mos (LP): min c x s.t Ax >= b, x >= 0 >. A = [1,1,2,2,0,2,2,1,3] b = [4,5,7] c = [3,2,4] >. >. > = 9.5 x(1) = 0.5 x(2) = 0 x(3) = 2 (LPSimple.mos) 1 47 model.. 2 mmxprs. 4, wirte writeln. 9!,. 10 19. mpvar. 23 27 A b, c. 32 34. Ax = b, 33 sum(j in J) A(i,j)*x(j) = b(i). ( ). 38. 42 minimize( ) maximize( ). 45 getobjval. 46. getsol. 2.2 (IP) (IPwithData.mos), A; b; c, (IP) : (IP) min s.t. cx Ax = b x = 0 x ; 8
., LPSimple.mos forall (j in J) x(j) is integer,,. ffl A; b; c. ffl parameters. ffl procedure., ``Abc.dat''. Abc.dat!!! A, b, c A: [ 1 1 2 2 0 2 2 1 3 ] b: [ ] 4 5 7 c: [ 3 2 4 ], ``IPwithData.mos''. 9
IPwithData.mos 1 model IPwithData 2 uses "mmxprs" 3 4!!! 5 parameters 6 FName = "Abc.dat" 7 end-parameters 8 9 writeln(" (IP):") 10 writeln(" min c x") 11 writeln(" s.t Ax >= b, x >= 0, x is integer") 12 writeln(" ") 13 14!!! A, b, c, x 15 declarations 16 I = 1..3! I 17 J = 1..3! J 18 A: array(i, J) of real! A 19 b: array(i) of real! b 20 c: array(j) of real! c 21 22 x: array(j) of mpvar! 23 end-declarations 24 initializations from FName 25 A b c 26 end-initializations 27 writeln(" A = ", A, " n b = ", b, " n c = ", c) 28 29!!! 30 procedure PrintSol 31 writeln(" = ", getobjval) 32 forall (j in J) writeln(" x(", j, ") = ", getsol(x(j))) 33 end-procedure 34 35!!! Ax >= b, x >= 0 36 writeln(">.") 37 forall (i in I) do 38 sum(j in J) A(i,j)*x(j) >= b(i) 39 end-do 40 forall (j in J) x(j) is_integer 41 42!!! ObjFunc := cx 43 writeln(">.") 44 ObjFunc := sum(j in J) c(j)*x(j) 45 46!!! 47 writeln("> ") 48 minimize(objfunc) 49 50!!! ( ) 51 PrintSol 52 end-model 10
. IPwithData.mos (IP): min c x s.t Ax >= b, x >= 0, x is integer A = [1,1,2,2,0,2,2,1,3] b = [4,5,7] c = [3,2,4] >. >. > = 10 x(1) = 2 x(2) = 0 x(3) = 1 (IPwithData.mos) LPSimple.mos. 5 7 parameters. FName. 24 26 A b, c. FName. 30 33 PrintSol. 40. 51 PrintSol. 2.3 (QP) (QPwithData.mos) : (QP) min s.t. 1 2 x > Qx + cx Ax = b x = 0;., A; b; c, Q Q = 2 6 4 3 1 0 0 2 1 1 0 2 3 7 5., ``ABcQ.dat''. 11
AbcQ.dat!!! A, b, c, Q A: [ ] 1 1 2 2 0 2 2 1 3 b: [ ] 4 5 7 c: [ ] 3 2 4 Q: [ 3 1 0 0 2 1 1 0 2 ], ``QPwithData.mos''. 12
QPwithData.mos 1 model QPwithData 2 uses "mmxprs", "mmquad" 3 4 parameters 5 FName = "AbcQ.dat" 6 end-parameters 7 8 writeln(" 2 (QP):") 9 writeln(" min 1/2 x^t Q x + cx") 10 writeln(" s.t Ax >= b, x >= 0") 11 writeln(" ") 12 13!!! A, b, c, Q, x 14 declarations 15 I = 1..3! I 16 J = 1..3! J 17 A: array(i, J) of real! A 18 b: array(i) of real! b 19 c: array(j) of real! c 20 Q: array(j,j) of real! Q 21 22 x: array(j) of mpvar! x 23 end-declarations 24 initializations from FName 25 A b c Q 26 end-initializations 27 writeln(" A = ", A, " n b = ", b, " n c = ", c, " n Q = ", Q) 28 29!!! Ax >= b, x >= 0 30 writeln(">.") 31 forall (i in I) do 32 sum(j in J) A(i,j)*x(j) >= b(i) 33 end-do 34 35!!! 1/2 (x^t) Qx + cx 36 writeln(">.") 37 ObjFunc := 1/2*sum(j1 in J, j2 in J) x(j1)*q(j1,j2)*x(j2) + sum(j in J) c(j)*x(j) 38 39!!! 40 writeln("> ") 41 minimize(objfunc) 42 43!!! 44 writeln(" = ", getobjval) 45 forall (j in J) writeln(" x(", j, ") = ", getsol(x(j))) 46 end-model 13
. QPwithData.mos 2 (QP): min 1/2 x^t Q x + cx s.t Ax >= b, x >= 0 A = [1,1,2,2,0,2,2,1,3] b = [4,5,7] c = [3,2,4] Q = [3,1,0,0,2,1,1,0,2] >. >. > = 14.375 x(1) = 0.500587 x(2) = 3.59439e-008 x(3) = 1.99961 (QPwithData.mos) 2 mmquad. 37 2. 2.4 0-1 (Knapsack.mos),,.,.,.,. ( ),.., (Capacity) 100,. 2.1: 20 30 50 10 25 40 70 10 15 30 5 15 25 40, Item, i W eight(i), Value(i). x(i), (i 2 Item) x(i) = 8 < : 1 ( i ) 0 ( );, 14
., (KP). max (KP) s.t. X X i2item Value(i) x(i) W eight(i) x(i) 5 Capacity i2item x(i) 2f0; 1g (8i 2 Item): (KP) Xpress-MP, ``Knapsack.dat''. Knapsack.dat!!! Item, Weight, Value Item: [ " " " " " " " " " " " " " " ] Weight: [ 20 30 50 10 25 40 70 ] Value: [ 10 15 30 5 15 25 40 ] (KP) ``Knapsack.mos''. 15
Knapsack.mos 1 model Knapsack 2 uses "mmxprs" 3 4 parameters 5 FName = "Knapsack.dat"! 6 Capacity = 100! 7 end-parameters 8 9 writeln("0-1 ") 10 11!!! Capacity, Weight, Value, x 12 declarations 13 Item: set of string! Item 14 Value: array(item) of integer! Value 15 Weight: array(item) of integer! Weight 16 17 x: array(item) of mpvar! x 18 end-declarations 19 initializations from FName 20 Item Weight Value 21 end-initializations 22 23 writeln("----------------------") 24 writeln(" ") 25 writeln("======================") 26 forall (i in Item) do 27 writeln(strfmt(i,8), strfmt(weight(i),5), strfmt(value(i),5)) 28 end-do 29 writeln(" ", Capacity) 30 writeln("----------------------") 31 32!!! 33 forall (i in Item) create(x(i)) 34 35!!! Weight * x <= Capacity, x is binary 36 writeln(">.") 37 sum(i in Item) Weight(i)*x(i) <= Capacity 38 forall (i in Item) x(i) is_binary 39 40!!! ObjFunc := Value * x 41 writeln(">.") 42 ObjFunc := sum(i in Item) Value(i)*x(i) 43 44!!! 45 writeln("> ") 46 maximize(objfunc) 47 48!!! 49 writeln(" : ", getobjval) 50 write(" : ") 51 forall (i in Item round(getsol(x(i))) = 1) write(i, " ") 52 end-model 16
. Knapsack.mos 0-1 ---------------------- ====================== 20 10 30 15 50 30 10 5 25 15 40 25 70 40 100 ---------------------- >. >. > : 60 : (Knapsack.mos) 12 18 Item set of string., Item, Item. 27 strfmt(" ", ),. 33 Item,. 38 0-1. 51 x(i) 1. 2.5 (DEA) (DEA.mos),. (linctr ) (sethidden ). (Data Envelopment Analysis, DEA ), 1978 Charnes-Cooper., n (Decision Making Unit, DMU ), p, q., k DMU k (k =1;:::;n), k X ik (i =1;:::;p), Y jk (j =1;:::;q). DEA, DMU. DMU,,,., i v i, j 17
u j..,, DMU., DMU k (k =1;:::;n) : max k = (DEA(k)) s.t. qx Y jk u j j=1 px X ik v i i=1 qx Y jd u j j=1, : max k = s.t. (DEA(k)) qx px 5 1 (d =1;:::;n) i=1 u j = 0 (j =1;:::;q) v i = 0 (i =1;:::;p): Y jk u j j=1 px X ik v i = 1 i=1 qx X Y jd u j 5 p j=1 X id v i i=1 (d =1;:::;n) u j = 0 (j =1;:::;q) v i = 0 (i =1;:::;p):. (DEA(k)) k Λ DMU k, k Λ =1, DMU k, k Λ < 1, DMU k.,., 2.2: DMU ( 1) 8189 60469 82689 58093 16299 43064 9041 7252 128085 ( 2) 318 2216 2906 1836 629 1120 383 384 4799 ( ) 16 70 487 577 11 387 308 19 112, k 2f ;:::; g (DEA(k))., ``DEA.dat''. Xpress-MP 18
DEA.dat!!! In: [ ] " " " "!!! Out: [ " " ]!!! DMU: [ " " " " " " " " " " " " " " " " " " ]!!! (, ) X: [ 8189 60469 82689 58093 16299 43064 9041 7252 128085 318 2216 2906 1836 629 1120 383 384 4799 ]!!! (, ) Y: [16 70 487 577 11 387 308 19 112] (DEA(k)) ``DEA.mos''. 19
DEA.mos 1 model DEA 2 uses "mmxprs" 3 4 writeln("-----------------------------------------") 5 writeln(" (DEA) n coded at Feb.5.2006 by T. featuring D.Z ") 6 writeln("=========================================") 7 8!!!! 1 9 declarations 10 In: set of string! 11 Out: set of string! 12 DMU: set of string! (DEA) 13 X: array (In, DMU) of real! 14 Y: array (Out, DMU) of real! 15 v: array (In) of mpvar! 16 u: array (Out) of mpvar! 17 Const: array(dmu) of linctr! 18 end-declarations 19 20!!!! 1 21 initializations from "DEA.dat" 22 In Out DMU X Y 23 end-initializations 24 25!!!. 26 forall (i in In) create(v(i)) 27 forall (j in Out) create(u(j)) 28 29!!! Yu <= Xv, u >= 0, v >= 0 30 forall (d in DMU) do 31 sum (j in Out) Y(j,d)*u(j) <= sum(i in In) X(i,d)*v(i) 32 end-do 33 34!!! 35 forall (k in DMU) do 36!!! 37 Const(k) := sum (i in In) X(i,k)*v(i) = 1 38!!! 39 ObjFunc := sum(j in Out) Y(j,k)*u(j) 40!!! 41 maximize(objfunc) 42!!! 43 writeln(k, " n : ", getobjval) 44 forall (i in In) writeln(" ", i, " = ", getsol(v(i))) 45 forall (j in Out) writeln(" ", j, " = ", getsol(u(j))) 46 writeln("-----------------------------------------") 47!!! 48 sethidden(const(k), true) 49 end-do 50 end-model 20
. DEA.mos ----------------------------------------- (DEA) coded at Feb.5.2006 by T. featuring D.Z ========================================= : 0.0625664 = 0 = 0.00314465 = 0.0039104 ----------------------------------------- : 0.0392804 = 0 = 0.000451264 = 0.000561149 ----------------------------------------- (, ) ----------------------------------------- : 0.0769062 = 0.000137893 = 0 = 0.0040477 ----------------------------------------- : 0.0290212 = 0 = 0.000208377 = 0.000259118 ----------------------------------------- (DEA.mos) 17 linctr Const. 35 39. 37, 38 k. 48 sethidden k. 21
3 mosel, mosel. 3.1,. and, array, as, boolean, break, case, declarations, div, do, mpvar, dynamic, elif, else, end, false, forall, forward, from, function, if, in, include, initialisations, initializations, integer, inter, is binary, is continuous, is free, is partint, is semcont, is semint, is sos1, is sos2, linctr, max, min, mod, model, next, not, of, options, or, parameters, procedure, public, prod, range, real, repeat, set, string, sum, then, to, true, union, until, uses, while. 3.2 model uses model end-model ( ) model.. uses " " ( ). 3.1: mmxprs mmquad mmsystem mmodbc mmive,...,. Excel, SQL.. 22
3.3! writeln()!,, (!!) ( ).! (!,.!) write(),, writeln() ( ) write(" "),, writeln(" "). write(), writeln().,,,., writeln(" A = ", A), A = A., LPSimple.mos, A., write("nn"),, writeln. 3.4 (declarations end-declarations) declarations : 1, 2,... : = end-declarations!,. ( ). 3.4.1 (real, integer, mpvar ) mosel,. integer real string boolean mpvar linctr 3.2: -214783648 214783648-1.7e+308 1.7e+308, true false 23
3.4.2 (=). = ( ). ( ) STR = "My Const String"! MyVal = 5.0! S = f2, 0.1, "a", "e"g! Hanni = 1..4! Hanni =f1, 2, 3, 4g ( ), declarations,, parameters.., STR = "String", STR. 3.4.3 (set of, range) fa, b, cg., 2..7 f2, 3, 4, 5, 6, 7g., 3.4.1,, f1, 2, 3g, f"1", "2", "3"g.,,, set of range. set of ( ).. ( ) S1: set of integer S2: set of string range ( ).. ( ) R1: range 3.4.4 (array of), array. 24
array (,,...) of ( ). dynamic array. ( ) A1: array (1..2, 1..5) of integer A2: array (f1.5, 2.3g, 1..3, f" ", " ", " "g) of real A1 2 5 2,, A1(2,3). A2 2 3 3 3,, A2(1.5, 2, " "). ( 1) 3.4.3, S = f1, 2, 3g, 3.,, T = [1, 2, 3],, T := [1, 2, 3]., declarations T, T: array (1..3) of integer 3, T := [1, 2, 3] ( ). ( 2)., T, T(5) T(" ") 5 " " 1..3. 3.5 3.5.1 (+, -, *, / ) Xpress-MP,. 3.3: A, B A + B A B,,, A - B A B,,, A * B A B,, A / B A B, A ^ B A B, A mod B A B, ( ) f1, 2, 3g+f3, 4g = f1, 2, 3, 4g, f1, 2, 3g-f3, 4g = f1, 2g, f1, 2, 3g*f3, 4g = f3g., " "-" "+" " = " ". 25
3.5.2 (:= ). := ( ).,. ( ) B := 5! STR := "Hello"! V := [1, 2, 3]! Func := 5*x + 3!, ( 1) Xpress-MP,.,,. Const1 := 5*x + 3 = 0! Const2 := x >= 30! ( 2) delcarations,., B B := 2, B., 3.4.4,. ( 3)., declarations B C, B := 2 C := 2.0,.,., B := C. ( 3) (=),. declarations,, parameters :=.,. 3.4: A += B A -= B A := A + B A := A - B 26
3.6 (parameters end-parameters),. parameters = end-parameters ( ).,,. ( ) parameters M = 15! PI = 3.14! FName = "Abc.dat"! end-parameters. IPwithData.mos, > exec IPwithData FName="Abc2.dat",, "Abc2.dat"., ( 3.1, 3.2 ). Xpress-IVE ( 1) declarations,. S = f1, 2, 3g., parameters ( 2) declarations, model, parameters, model, uses., model DEMO uses "mmxprs" writeln(" ")! parameters parameters 1 = end-parameters parameters! paramters 2 2 = end-parameters 27
3.1: 3.2: 28
3.7 (>=, <>, and, or ) Xpress-MP., true false, boolean. 3.5: A < B A > B A >= B A <= B A = B A <> B 1 and 2 1 or 2 A < B true, false A > B true, false A = B true, false A 5 B true, false A = B true, false A 6= B true, false 1 2 true true, false 1 2 true true, false 3.8 Xpress-MP. 3.8.1 (if, case ) if ( ) then elif ( ) then else end-if ( ) if then,. if ( ), if ( ) then end-if 29
case of : : do end-do : do end-do else end-case ( ) case B of 1 : writeln(" 1")! B 1 2..5 : writeln(" 2")! B 2 5 6, 8 : do writeln(" 3") end-do! B 6 8 else writeln(" 4")! end-case 3.8.2 (forall, while, repeat ) Xpress-MP,. forall ( in ),,, forall ( in ) do end-do ( ),. forall ( in j ). while ( ),,, whilie ( ) do end-do ( ),.. repeat until ( ) ( ),.. break [n] ( ) [ n ]. 30
next [n] ( ) [ n ]. ( ) forall,.,. forall (i in 1..9) do if (i = 3) then i := 7! end-if end-do, i := 1 while (i < 10) do if (i = 3) then i := 7 end-if i += 1 end-do while. 3.9,. 3.9.1 (is free),.,, x(1) >= -1000, x(1).., is free ( ), 1. ( ) x(1) 1,. x(1) is free 31
3.9.2 0-1 (is integer, is binary),. is integer ( ). is binary ( ) 0-1. 3.10 (initializations from end-initializations),. initializations from " " end-initializations ( ),. ( ) r : 1.5! z : 2! M : [! 1 0 0 0 0 0 1 2 0 0 0 3 ] ( ) M. M : [! ] (1 1) 1! 1 1 1 (2 3) 1 2! 2 3 1, 2 (3 4) 3 (3 ) M. D : [! 2 2 3 3 (1 1 1) 1 2 3! (1,1,1) (1,1,3). ] 1 1 1! (1,2,1) (1,2,3). (2 1 1) 3 3 1! (2,1,1) (2,1,3) 5 2 7! (2,2,1) (2,2,3) 32
3.11 (function, procedure),. Xpress-MP, function procedure. procedure [( :, )] end-procedure ( ). function [( :, )] : returned :=!. end-function ( ).,.,. forward procedure [( :, )] forward function [( :, )] : ( ). 3.12, ( ).., 3.12.1 (sum, prod, round, abs ) sum ( in ) ( ). sum ( in j ). prod ( in ) ( ). prod ( in j ). round ( ) ( ). abs ( ) ( ). 33
3.12.2 (minimize, maximize) minimize( ),, maximize( ) ( ). getobjval. getsol( ) ( ). ( ) x, getsol(x).. forall (j in J) getsol(x(j)) 3.12.3 (random) random ( ) [0, 1). ( ) [1,Num] round(random*num + 0.5) setrandseed ( ) ( ). 34
4!? 4.1 (fopen ),, script typescript, Xpress-IVE,,.,,. fopen(" ", F OUTPUT)!. fclose(f OUTPUT)!. ( ) F OUTPUT. ( ) fopen("log.txt", F OUTPUT) writeln(" = ", getobjval) fclose(f OUTPUT) 4.2 (gettime)., gettime. gettime ( ). ( ) uses "mmxprs", "mmsystem", mmsystem. ( ) StartTime := gettime writeln(" = ", gettime - StartTime, " ") 4.3 (getprobstat) Xpress-MP,,,. getprobstat 35
getprobstat ( ),. getprobstat. 4.1: getprobstat getprobstat 2. 4. 6. 8. 4.4 (,, ) setparam,,. setparam(" ", ) ( ).,. ( ) setparam("xprs NODESELECTION", )!. 4.2. 4.2: 1 Local first,,. 2 Best first. 3 Local depth first,,. 4 Best first,, Best first, then local first "XPRS BREADTHFIRST", Local first.,, setparam("xprs BREADTHFIRST", 10). 5 Pure depth first. ( ) 36
setparam("xprs MAXNODE", 5000)! 5000. setparam("xprs MAXTIME", 100)! 100. setparam("xprs MIPABSSTOP", 0.99)! - <= 0.99. 4.5 (minimize, maximize) (setcallback) (IP) minimize( ), maxmize( ),,,.,.. setcallback setcallback(, " ") ( ),. ( ) setcallback(xprs CB INTSOL, "MyFunc")! MyFunc. ( ), XPRS CB INTSOL, Xpress-Mosel Language Reference Manual. 4.6 (sethidden),.,,., sethidden. sethidden(, 0)!. sethidden(, 1)!. ( ) /. ( ) Const := 3*a + b <= 3 forall (itr in 1..2) do minimize(objfunc)! 1 Const, 2 sethiden(const, 0) end-do 4.7 (create),.., create create( ) ( ). 37
,,,,., Dash Xpress-MP. [1] Dash Optimization Corp. URL: http://www.dashoptimization.com. 38