随便发一个sudoku的gams代码。最主要的是请大家理解set 里面mapping 的写法。 - Y0 N& ]- }" ]" H& r% XSets r rows / r1*r9 /$ n! |+ l9 p/ I3 r; f
c columns / c1*c9 / * u6 ~( b& K$ Q$ T6 s1 { b blocks / b1*b9 / 0 G f9 C& }6 Z' W% X. T v values / v1*v9 / / Z8 `8 h% D/ ?; p br(b,r) / b1*b3 .r1*r3, b4*b6 .r4*r6, b7*b9 .r7*r9 / ) o( a8 l5 ~. p bc(b,c) / (b1,b4,b7).c1*c3, (b2,b5,b8).c4*c6, (b3,b6,b9).c7*c9 / # q2 @7 Y2 X2 B x; ?7 P brc(b,r,c) block definitions ;" L$ V9 K: C( z6 K9 L/ F U' @6 P
# u1 M6 T$ Q: L! O" E
brc(b,r,c) = br(b,r)*bc(b,c);7 ^2 ~# `6 A4 x) ]! ]8 D7 m# h
6 g! b8 F6 _: Y, s
Table problem(r,c) Hard problem with non-unique solution , Q" G, z1 F" T/ _ c1 c2 c3 c4 c5 c6 c7 c8 c9 " N2 a* x. h3 [; t3 y/ Wr1 2 6 75 ]6 u+ ?6 Z' p# T- e9 K
r2 6 2 5 s- _& k- J$ or3 4 8 1 / n; x' f. O: }r4 5 9 3 % ^' U$ y/ \% R8 m- T* ~: A# `/ sr5 3 53 x0 j8 x v' k1 k3 T" K2 o3 f4 }
r6 2 8 7 ! q1 t0 D/ i6 ]! f$ I% {: t# c6 b4 d. Rr7 1 5 ?5 i: D' e& g4 y2 `; t. ~, X, }r8 7 8 65 [. ~; f1 d3 O! z2 M
r9 5 3 8 ;& I- d5 {" v" j4 I% ]4 G3 y
# }% o$ Z- ` J' D' Y8 [+ @
; Y: c. t( B+ n# H3 ~( c: K4 [
Binary Variable X(r,c,v) assign value to cell (defined by row and column); @6 ? s' E. I0 E5 d( ]
Variable W objectiv value - anything;- F: {2 y9 k; N* y
; ?$ ~1 O# C* `+ Nequations eq1(r,c) exactly one value for each cell0 L9 H5 ?' X: N7 E- s2 j
eq2(c,v) column entries have to be unique 6 x) M2 H) Q1 y1 N7 E. U2 z( ~- Y" R2 Z eq3(r,v) row entries have to be unique1 E2 R& R3 G' Y, p( w( E
eq4(b,v) block entries have to be unique% \% q; c! @# G# p
nobj definition of objective - anything; 3 v" Z! c) m: N1 p X \' ~9 I- K& A- o' _
X.fx(r,c,v)$(problem(r,c)=ord(v)) = 1;, T- [1 N/ _2 {6 W2 E2 g& `
7 d. C$ J% ^* y; q/ S' K% Geq1(r,c).. sum(v, X(r,c,v)) =E= 1;) m: z- J' H! \8 e. r! A- t
eq2(c,v).. sum(r, X(r,c,v)) =E= 1;9 T% ]! E0 s+ q: _
eq3(r,v).. sum(c, X(r,c,v)) =E= 1; 3 L8 h1 r1 N$ T8 c/ O) Meq4(b,v).. sum(brc(b,r,c), X(r,c,v)) =E= 1;" p' u; S' `# x9 j
nobj.. W =E= sum((r,c,v), X(r,c,v));. G1 @* U! }$ K. H2 F$ ~* w
4 i* m+ ?. n3 B9 P0 _) L
model sudoku / all /; # F3 f) Y3 m9 j3 b+ G, d9 s1 Y/ W, Q7 u/ h, d$ e3 g0 \# U
solve sudoku minimizing w using mip;$ C$ G: {7 P8 S, k& _) O7 s
最后说一句,其实这个模型不用求什么最大还是最小值,只要得到一个满足所有constraints的feasible solution 就可以了,所以nobj的注释写的"anything"。