随便发一个sudoku的gams代码。最主要的是请大家理解set 里面mapping 的写法。% ^1 g; u" M% v! h( x
Sets r rows / r1*r9 /3 W( a4 h2 N; z
c columns / c1*c9 /" P8 O/ `+ y% T' t
b blocks / b1*b9 /$ o6 ~( }- B1 Q4 g% M( ?; h
v values / v1*v9 / 1 D0 L+ K; D5 E5 I br(b,r) / b1*b3 .r1*r3, b4*b6 .r4*r6, b7*b9 .r7*r9 / ! _: D6 ?* ?, @2 @ bc(b,c) / (b1,b4,b7).c1*c3, (b2,b5,b8).c4*c6, (b3,b6,b9).c7*c9 /; E& q6 I, y: P1 [: K! A
brc(b,r,c) block definitions ;; w. K/ ?+ f0 N; {4 k* U' T
' q5 o0 K" K/ X( U! P
brc(b,r,c) = br(b,r)*bc(b,c);! i# o! t7 c$ T1 O, ]8 d" B
# \- h# R' W( d( P1 b3 A& GTable problem(r,c) Hard problem with non-unique solution! a0 y; w* D2 L5 ? J# I
c1 c2 c3 c4 c5 c6 c7 c8 c9& X2 f" k- E" w
r1 2 6 7 * P0 i% p+ T% E; L( I2 M. N fr2 6 22 g9 K1 X+ i' ?+ b6 w; s8 v
r3 4 8 17 c- S4 V0 I% a3 L% v' i! g; G
r4 5 9 3* ~' _$ t9 I" ]; A7 i
r5 3 5$ c$ m; h; {% a4 a, H
r6 2 8 77 I! k# ]% o" d3 c2 s
r7 1 k/ `5 V y+ ^4 Mr8 7 8 64 H- \* W5 a1 C# B0 L7 j8 W- V1 I) d
r9 5 3 8 ; 0 |, f/ n/ \' E A7 `1 m4 b' ?. [4 ?4 W5 ], V6 X- s2 ?1 {
; M* _0 A4 D6 S
Binary Variable X(r,c,v) assign value to cell (defined by row and column); - L# W* H6 v/ h, @Variable W objectiv value - anything;: u/ \4 Z" R6 H* Q; P
' {) U4 A, F' B1 f/ u! Uequations eq1(r,c) exactly one value for each cell* R$ `, D u2 z0 u R
eq2(c,v) column entries have to be unique* B( r# w* G; H4 \0 b% p/ ]
eq3(r,v) row entries have to be unique 8 p, Q2 _. f- w eq4(b,v) block entries have to be unique ) X. q [' @5 J nobj definition of objective - anything; ( l e; k' A/ K3 t. w: g- D' E+ K
X.fx(r,c,v)$(problem(r,c)=ord(v)) = 1;+ f* P4 H9 u/ Q) y& Z5 ^0 H