Tuesday, July 28, 2009

An Application of a Computer Program for Integer Programming

Jsun Yui Wong

The computer program listed below seeks to solve the formulation on page 138 of Heragu (1997). In order to have integer locations, the office lengths and widths used in the following computer program have been made twice as long as the given office lengths and widths, respectively.

0 DEFDBL A-Z
1 REM
3 DEFINT I,J,K
4 DIM X(166),A(166),L(166),K(166),P(166),B(166),S(166)
5 FOR JJJJ=-32000 TO 32000
14 RANDOMIZE JJJJ
16 M=-1D+17
111 FOR K=1 TO 10
113 A(K)=FIX(RND*699)
115 NEXT K
121 FOR KF=11 TO 20
123 A(KF)=FIX(RND*2)
125 NEXT KF
126 IMAR=10+FIX(RND*2000)
128 FOR I=1 TO IMAR
129 FOR KK=1 TO 20
131 X(KK)=A(KK)
132 NEXT KK
151 IF RND<.7 GOTO 222 ELSE IF RND<.5 GOTO 236 ELSE GOTO 241
222 IJL=1+FIX(RND*10)
233 IF RND<.95 THEN X(IJL)=FIX(RND*699) ELSE X(IJL)=A(IJL)-1
235 GOTO 501
236 IJR=11+FIX(RND*10)
238 X(IJR)=FIX(RND*2)
239 GOTO 501
241 IF RND<.5 THEN 243 ELSE 248
243 IJU=1+FIX(RND*10):IJV=1+FIX(RND*10)
244 X(IJU)=A(IJV):X(IJV)=A(IJU)
245 GOTO 501
248 IJW=11+FIX(RND*10):IJX=11+FIX(RND*10)
249 X(IJW)=A(IJX):X(IJX)=A(IJW)
501 B(1)=ABS(X(1)-X(2))
502 B(2)=ABS(X(1)-X(3))
503 B(3)=ABS(X(1)-X(4))
504 B(4)=ABS(X(1)-X(5))
505 B(5)=ABS(X(2)-X(3))
506 B(6)=ABS(X(2)-X(4))
507 B(7)=ABS(X(2)-X(5))
508 B(8)=ABS(X(3)-X(4))
509 B(9)=ABS(X(3)-X(5))
510 B(10)=ABS(X(4)-X(5))
511 B(11)=ABS(X(6)-X(7))
512 B(12)=ABS(X(6)-X(8))
513 B(13)=ABS(X(6)-X(9))
514 B(14)=ABS(X(6)-X(10))
515 B(15)=ABS(X(7)-X(8))
516 B(16)=ABS(X(7)-X(9))
517 B(17)=ABS(X(7)-X(10))
518 B(18)=ABS(X(8)-X(9))
519 B(19)=ABS(X(8)-X(10))
520 B(20)=ABS(X(9)-X(10))
901 S(1)=B(1)-50+999*X(11)
902 S(2)=B(11)-40+999*(1-X(11))
903 S(3)=B(2)-60+999*X(12)
904 S(4)=B(12)-50+999*(1-X(12))
905 S(5)=B(3)-55+999*X(13)
906 S(6)=B(13)-40+999*(1-X(13))
907 S(7)=B(4)-60+999*X(14)
908 S(8)=B(14)-40+999*(1-X(14))
909 S(9)=B(5)-60+999*X(15)
910 S(10)=B(15)-50+999*(1-X(15))
911 S(11)=B(6)-55+999*X(16)
912 S(12)=B(16)-40+999*(1-X(16))
913 S(13)=B(7)-60+999*X(17)
914 S(14)=B(17)-40+999*(1-X(17))
915 S(15)=B(8)-65+999*X(18)
916 S(16)=B(18)-50+999*(1-X(18))
917 S(17)=B(9)-70+999*X(19)
918 S(18)=B(19)-50+999*(1-X(19))
919 S(19)=B(10)-65+999*X(20)
920 S(20)=B(20)-40+999*(1-X(20))
1107 FOR IJUL=1 TO 20
1111 IF S(IJUL)<0 THEN S(IJUL)=ABS(S(IJUL)) ELSE S(IJUL)=0
1115 NEXT IJUL
1285 PL11=-333333!*(S(1)+S(2)+S(3)+S(4)+S(5)+S(6)+S(7)+S(8)+S(9)+S(10)+S(11))
1286 PL12=-333333!*(S(12)+S(13)+S(14)+S(15)+S(16)+S(17)+S(18)+S(19)+S(20))
1380 PH=-10*(B(1)+B(11))-15*(B(2)+B(12))-20*(B(3)+B(13))
1381 PI=-30*(B(5)+B(15))-35*(B(6)+B(16))-10*(B(7)+B(17))
1384 PJ=-10*(B(8)+B(18))-20*(B(9)+B(19))-15*(B(10)+B(20))
1587 PK=PH+PI+PJ
1588 P=PK+PL11+PL12
1599 PR=PK
1651 IF P<=M THEN 1670
1657 FOR KEW=1 TO 20
1658 A(KEW)=X(KEW)
1659 NEXT KEW
1661 M=P
1663 MM=PR
1665 REM PRINT M,MM
1666 GOTO 128
1670 NEXT I
1890 IF M>-11111 THEN 1912 ELSE 1999
1912 PRINT A(1),A(2),A(3),A(4),A(5)
1913 PRINT A(6),A(7),A(8),A(9),A(10)
1914 PRINT A(11),A(12),A(13),A(14),A(15)
1915 PRINT A(16),A(17),A(18),A(19),A(20)
1917 PRINT M,MM,JJJJ
1999 NEXT JJJJ

This BASIC computer program was run with the IBM basica/D interpreter, and the best candidate solutions produced in the first 5.2 hours of running are presented below. (What immediately follows is a manual copy from the computer screen.)

271 331 331 276 331
417 377 427 377 337
1 0 1 1 1
0 1 1 1 1
-11015 -11015 -14353

233 173 173 228 173
166 126 176 126 86
0 0 1 1 1
0 1 1 1 1
-11015 -11015 -10126

370 310 310 365 310
154 114 164 114 74
0 0 1 1 1
0 1 1 1 1
-11015 -11015 -9629

Interpreted in accordance with line 1912 through line 1917, the best candidate solutions through JJJJ=-9629 were produced in the first 5.2 hours of running on a personal computer with an Intel 2.66 GHz. chip and the IBM basica/D interpreter.

Reference

Heragu, S. S.: "Facilities Design," PWS Publishing Co., Boston, 1997.