Wednesday, August 26, 2009

A Computer Program for Solving Integer Programs

Jsun Yui Wong

The computer program listed below seeks to solve the 20-department problem in Nugent, Vollmann, and Ruml (1968).

0 DEFSNG A-Z
3 DEFINT I,J,K
4 DIM X(466),A(466),L(466),K(466),P(466),B(466),S(466),T(466)
6 DIM TBM(33,33)
11 TBM(1,1)=999:TBM(1,2)=1:TBM(1,3)=2:TBM(1,4)=3:TBM(1,5)=4:TBM(1,6)=1:TBM(1,7)=2:TBM(1,8)=3:TBM(1,9)=4:TBM(1,10)=5
12 TBM(1,11)=2:TBM(1,12)=3:TBM(1,13)=4:TBM(1,14)=5:TBM(1,15)=6:TBM(1,16)=3:TBM(1,17)=4:TBM(1,18)=5:TBM(1,19)=6:TBM(1,20)=7
13 TBM(2,1)=1:TBM(2,2)=999:TBM(2,3)=1:TBM(2,4)=2:TBM(2,5)=3:TBM(2,6)=2:TBM(2,7)=1:TBM(2,8)=2:TBM(2,9)=3:TBM(2,10)=4
14 TBM(2,11)=3:TBM(2,12)=2:TBM(2,13)=3:TBM(2,14)=4:TBM(2,15)=5:TBM(2,16)=4:TBM(2,17)=3:TBM(2,18)=4:TBM(2,19)=5:TBM(2,20)=6
15 TBM(3,1)=2:TBM(3,2)=1:TBM(3,3)=999:TBM(3,4)=1:TBM(3,5)=2:TBM(3,6)=3:TBM(3,7)=2:TBM(3,8)=1:TBM(3,9)=2:TBM(3,10)=3
16 TBM(3,11)=4:TBM(3,12)=3:TBM(3,13)=2:TBM(3,14)=3:TBM(3,15)=4:TBM(3,16)=5:TBM(3,17)=4:TBM(3,18)=3:TBM(3,19)=4:TBM(3,20)=5
17 TBM(4,1)=3:TBM(4,2)=2:TBM(4,3)=1:TBM(4,4)=999:TBM(4,5)=1:TBM(4,6)=4:TBM(4,7)=3:TBM(4,8)=2:TBM(4,9)=1:TBM(4,10)=2
18 TBM(4,11)=5:TBM(4,12)=4:TBM(4,13)=3:TBM(4,14)=2:TBM(4,15)=3:TBM(4,16)=6:TBM(4,17)=5:TBM(4,18)=4:TBM(4,19)=3:TBM(4,20)=4
19 TBM(5,1)=4:TBM(5,2)=3:TBM(5,3)=2:TBM(5,4)=1:TBM(5,5)=999:TBM(5,6)=5:TBM(5,7)=4:TBM(5,8)=3:TBM(5,9)=2:TBM(5,10)=1
20 TBM(5,11)=6:TBM(5,12)=5:TBM(5,13)=4:TBM(5,14)=3:TBM(5,15)=2:TBM(5,16)=7:TBM(5,17)=6:TBM(5,18)=5:TBM(5,19)=4:TBM(5,20)=3
21 TBM(6,1)=1:TBM(6,2)=2:TBM(6,3)=3:TBM(6,4)=4:TBM(6,5)=5:TBM(6,6)=999:TBM(6,7)=1:TBM(6,8)=2:TBM(6,9)=3:TBM(6,10)=4
22 TBM(6,11)=1:TBM(6,12)=2:TBM(6,13)=3:TBM(6,14)=4:TBM(6,15)=5:TBM(6,16)=2:TBM(6,17)=3:TBM(6,18)=4:TBM(6,19)=5:TBM(6,20)=6
23 TBM(7,1)=2:TBM(7,2)=1:TBM(7,3)=2:TBM(7,4)=3:TBM(7,5)=4:TBM(7,6)=1:TBM(7,7)=999:TBM(7,8)=1:TBM(7,9)=2:TBM(7,10)=3
24 TBM(7,11)=2:TBM(7,12)=1:TBM(7,13)=2:TBM(7,14)=3:TBM(7,15)=4:TBM(7,16)=3:TBM(7,17)=2:TBM(7,18)=3:TBM(7,19)=4:TBM(7,20)=5
25 TBM(8,1)=3:TBM(8,2)=2:TBM(8,3)=1:TBM(8,4)=2:TBM(8,5)=3:TBM(8,6)=2:TBM(8,7)=1:TBM(8,8)=999:TBM(8,9)=1:TBM(8,10)=2
26 TBM(8,11)=3:TBM(8,12)=2:TBM(8,13)=1:TBM(8,14)=2:TBM(8,15)=3:TBM(8,16)=4:TBM(8,17)=3:TBM(8,18)=2:TBM(8,19)=3:TBM(8,20)=4
27 TBM(9,1)=4:TBM(9,2)=3:TBM(9,3)=2:TBM(9,4)=1:TBM(9,5)=2:TBM(9,6)=3:TBM(9,7)=2:TBM(9,8)=1:TBM(9,9)=999:TBM(9,10)=1
28 TBM(9,11)=4:TBM(9,12)=3:TBM(9,13)=2:TBM(9,14)=1:TBM(9,15)=2:TBM(9,16)=5:TBM(9,17)=4:TBM(9,18)=3:TBM(9,19)=2:TBM(9,20)=3
29 TBM(10,1)=5:TBM(10,2)=4:TBM(10,3)=3:TBM(10,4)=2:TBM(10,5)=1:TBM(10,6)=4:TBM(10,7)=3:TBM(10,8)=2:TBM(10,9)=1:TBM(10,10)=999
30 TBM(10,11)=5:TBM(10,12)=4:TBM(10,13)=3:TBM(10,14)=2:TBM(10,15)=1:TBM(10,16)=6:TBM(10,17)=5:TBM(10,18)=4:TBM(10,19)=3:TBM(10,20)=2
31 TBM(11,1)=2:TBM(11,2)=3:TBM(11,3)=4:TBM(11,4)=5:TBM(11,5)=6:TBM(11,6)=1:TBM(11,7)=2:TBM(11,8)=3:TBM(11,9)=4:TBM(11,10)=5
32 TBM(11,11)=999:TBM(11,12)=1:TBM(11,13)=2:TBM(11,14)=3:TBM(11,15)=4:TBM(11,16)=1:TBM(11,17)=2:TBM(11,18)=3:TBM(11,19)=4:TBM(11,20)=5
33 TBM(12,1)=3:TBM(12,2)=2:TBM(12,3)=3:TBM(12,4)=4:TBM(12,5)=5:TBM(12,6)=2:TBM(12,7)=1:TBM(12,8)=2:TBM(12,9)=3:TBM(12,10)=4
34 TBM(12,11)=1:TBM(12,12)=999:TBM(12,13)=1:TBM(12,14)=2:TBM(12,15)=3:TBM(12,16)=2:TBM(12,17)=1:TBM(12,18)=2:TBM(12,19)=3:TBM(12,20)=4
35 TBM(13,1)=4:TBM(13,2)=3:TBM(13,3)=2:TBM(13,4)=3:TBM(13,5)=4:TBM(13,6)=3:TBM(13,7)=2:TBM(13,8)=1:TBM(13,9)=2:TBM(13,10)=3
36 TBM(13,11)=2:TBM(13,12)=1:TBM(13,13)=999:TBM(13,14)=1:TBM(13,15)=2:TBM(13,16)=3:TBM(13,17)=2:TBM(13,18)=1:TBM(13,19)=2:TBM(13,20)=3
37 TBM(14,1)=5:TBM(14,2)=4:TBM(14,3)=3:TBM(14,4)=2:TBM(14,5)=3:TBM(14,6)=4:TBM(14,7)=3:TBM(14,8)=2:TBM(14,9)=1:TBM(14,10)=2
38 TBM(14,11)=3:TBM(14,12)=2:TBM(14,13)=1:TBM(14,14)=999:TBM(14,15)=1:TBM(14,16)=4:TBM(14,17)=3:TBM(14,18)=2:TBM(14,19)=1:TBM(14,20)=2
39 TBM(15,1)=6:TBM(15,2)=5:TBM(15,3)=4:TBM(15,4)=3:TBM(15,5)=2:TBM(15,6)=5:TBM(15,7)=4:TBM(15,8)=3:TBM(15,9)=2:TBM(15,10)=1
40 TBM(15,11)=4:TBM(15,12)=3:TBM(15,13)=2:TBM(15,14)=1:TBM(15,15)=999:TBM(15,16)=5:TBM(15,17)=4:TBM(15,18)=3:TBM(15,19)=2:TBM(15,20)=1
41 TBM(16,1)=3:TBM(16,2)=4:TBM(16,3)=5:TBM(16,4)=6:TBM(16,5)=7:TBM(16,6)=2:TBM(16,7)=3:TBM(16,8)=4:TBM(16,9)=5:TBM(16,10)=6
42 TBM(16,11)=1:TBM(16,12)=2:TBM(16,13)=3:TBM(16,14)=4:TBM(16,15)=5:TBM(16,16)=999:TBM(16,17)=1:TBM(16,18)=2:TBM(16,19)=3:TBM(16,20)=4
43 TBM(17,1)=4:TBM(17,2)=3:TBM(17,3)=4:TBM(17,4)=5:TBM(17,5)=6:TBM(17,6)=3:TBM(17,7)=2:TBM(17,8)=3:TBM(17,9)=4:TBM(17,10)=5
44 TBM(17,11)=2:TBM(17,12)=1:TBM(17,13)=2:TBM(17,14)=3:TBM(17,15)=4:TBM(17,16)=1:TBM(17,17)=999:TBM(17,18)=1:TBM(17,19)=2:TBM(17,20)=3
45 TBM(18,1)=5:TBM(18,2)=4:TBM(18,3)=3:TBM(18,4)=4:TBM(18,5)=5:TBM(18,6)=4:TBM(18,7)=3:TBM(18,8)=2:TBM(18,9)=3:TBM(18,10)=4
46 TBM(18,11)=3:TBM(18,12)=2:TBM(18,13)=1:TBM(18,14)=2:TBM(18,15)=3:TBM(18,16)=2:TBM(18,17)=1:TBM(18,18)=999:TBM(18,19)=1:TBM(18,20)=2
47 TBM(19,1)=6:TBM(19,2)=5:TBM(19,3)=4:TBM(19,4)=3:TBM(19,5)=4:TBM(19,6)=5:TBM(19,7)=4:TBM(19,8)=3:TBM(19,9)=2:TBM(19,10)=3
48 TBM(19,11)=4:TBM(19,12)=3:TBM(19,13)=2:TBM(19,14)=1:TBM(19,15)=2:TBM(19,16)=3:TBM(19,17)=2:TBM(19,18)=1:TBM(19,19)=999:TBM(19,20)=1
49 TBM(20,1)=7:TBM(20,2)=6:TBM(20,3)=5:TBM(20,4)=4:TBM(20,5)=3:TBM(20,6)=6:TBM(20,7)=5:TBM(20,8)=4:TBM(20,9)=3:TBM(20,10)=2
50 TBM(20,11)=5:TBM(20,12)=4:TBM(20,13)=3:TBM(20,14)=2:TBM(20,15)=1:TBM(20,16)=4:TBM(20,17)=3:TBM(20,18)=2:TBM(20,19)=1:TBM(20,20)=999
65 FOR JJJJ=-32000 TO 32000
74 RANDOMIZE JJJJ
76 M=-1D+17
81 A(1)=1:A(2)=2:A(3)=3:A(4)=4:A(5)=5:A(6)=6:A(7)=7:A(8)=8:A(9)=9:A(10)=10
82 A(11)=11:A(12)=12:A(13)=13:A(14)=14:A(15)=15:A(16)=16:A(17)=17:A(18)=18:A(19)=19:A(20)=20
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
330 IJM=1+FIX(RND*20)
331 IJN=1+FIX(RND*20)
333 X(IJM)=A(IJN):X(IJN)=A(IJM)
401 T(1)=0*TBM(X(1),X(2))
402 T(2)=5*TBM(X(1),X(3))
403 T(3)=0*TBM(X(1),X(4))
404 T(4)=5*TBM(X(1),X(5))
405 T(5)=2*TBM(X(1),X(6))
406 T(6)=10*TBM(X(1),X(7))
407 T(7)=3*TBM(X(1),X(8))
408 T(8)=1*TBM(X(1),X(9))
409 T(9)=5*TBM(X(1),X(10))
410 T(10)=5*TBM(X(1),X(11))
411 T(11)=5*TBM(X(1),X(12))
412 T(12)=0*TBM(X(1),X(13))
413 T(13)=0*TBM(X(1),X(14))
414 T(14)=5*TBM(X(1),X(15))
415 T(15)=4*TBM(X(1),X(16))
416 T(16)=4*TBM(X(1),X(17))
417 T(17)=0*TBM(X(1),X(18))
418 T(18)=0*TBM(X(1),X(19))
419 T(19)=1*TBM(X(1),X(20))
615 T(20)=3*TBM(X(2),X(3))
616 T(21)=10*TBM(X(2),X(4))
617 T(22)=5*TBM(X(2),X(5))
618 T(23)=1*TBM(X(2),X(6))
619 T(24)=5*TBM(X(2),X(7))
620 T(25)=1*TBM(X(2),X(8))
621 T(26)=2*TBM(X(2),X(9))
622 T(27)=4*TBM(X(2),X(10))
623 T(28)=2*TBM(X(2),X(11))
624 T(29)=5*TBM(X(2),X(12))
625 T(30)=0*TBM(X(2),X(13))
626 T(31)=10*TBM(X(2),X(14))
627 T(32)=10*TBM(X(2),X(15))
628 T(33)=3*TBM(X(2),X(16))
629 T(34)=0*TBM(X(2),X(17))
630 T(35)=5*TBM(X(2),X(18))
631 T(36)=10*TBM(X(2),X(19))
632 T(37)=5*TBM(X(2),X(20))
648 T(38)=2*TBM(X(3),X(4))
649 T(39)=0*TBM(X(3),X(5))
650 T(40)=5*TBM(X(3),X(6))
651 T(41)=2*TBM(X(3),X(7))
652 T(42)=4*TBM(X(3),X(8))
653 T(43)=4*TBM(X(3),X(9))
654 T(44)=5*TBM(X(3),X(10))
655 T(45)=0*TBM(X(3),X(11))
656 T(46)=0*TBM(X(3),X(12))
657 T(47)=0*TBM(X(3),X(13))
658 T(48)=5*TBM(X(3),X(14))
659 T(49)=1*TBM(X(3),X(15))
660 T(50)=0*TBM(X(3),X(16))
661 T(51)=0*TBM(X(3),X(17))
662 T(52)=5*TBM(X(3),X(18))
663 T(53)=0*TBM(X(3),X(19))
664 T(54)=0*TBM(X(3),X(20))
740 T(55)=1*TBM(X(4),X(5))
741 T(56)=0*TBM(X(4),X(6))
742 T(57)=5*TBM(X(4),X(7))
743 T(58)=2*TBM(X(4),X(8))
744 T(59)=1*TBM(X(4),X(9))
745 T(60)=0*TBM(X(4),X(10))
746 T(61)=10*TBM(X(4),X(11))
747 T(62)=2*TBM(X(4),X(12))
748 T(63)=2*TBM(X(4),X(13))
749 T(64)=0*TBM(X(4),X(14))
750 T(65)=2*TBM(X(4),X(15))
751 T(66)=1*TBM(X(4),X(16))
752 T(67)=5*TBM(X(4),X(17))
753 T(68)=2*TBM(X(4),X(18))
754 T(69)=5*TBM(X(4),X(19))
755 T(70)=5*TBM(X(4),X(20))
851 T(71)=5*TBM(X(5),X(6))
852 T(72)=6*TBM(X(5),X(7))
853 T(73)=5*TBM(X(5),X(8))
854 T(74)=2*TBM(X(5),X(9))
855 T(75)=5*TBM(X(5),X(10))
856 T(76)=2*TBM(X(5),X(11))
857 T(77)=0*TBM(X(5),X(12))
858 T(78)=5*TBM(X(5),X(13))
859 T(79)=1*TBM(X(5),X(14))
860 T(80)=1*TBM(X(5),X(15))
861 T(81)=1*TBM(X(5),X(16))
862 T(82)=5*TBM(X(5),X(17))
863 T(83)=2*TBM(X(5),X(18))
864 T(84)=5*TBM(X(5),X(19))
865 T(85)=1*TBM(X(5),X(20))
961 T(86)=5*TBM(X(6),X(7))
962 T(87)=2*TBM(X(6),X(8))
963 T(88)=1*TBM(X(6),X(9))
964 T(89)=6*TBM(X(6),X(10))
965 T(90)=0*TBM(X(6),X(11))
966 T(91)=0*TBM(X(6),X(12))
967 T(92)=10*TBM(X(6),X(13))
968 T(93)=0*TBM(X(6),X(14))
969 T(94)=2*TBM(X(6),X(15))
970 T(95)=0*TBM(X(6),X(16))
971 T(96)=1*TBM(X(6),X(17))
972 T(97)=0*TBM(X(6),X(18))
973 T(98)=1*TBM(X(6),X(19))
974 T(99)=5*TBM(X(6),X(20))
1047 T(100)=0*TBM(X(7),X(8))
1048 T(101)=0*TBM(X(7),X(9))
1051 T(102)=0*TBM(X(7),X(10))
1052 T(103)=5*TBM(X(7),X(11))
1053 T(104)=10*TBM(X(7),X(12))
1054 T(105)=2*TBM(X(7),X(13))
1055 T(106)=2*TBM(X(7),X(14))
1056 T(107)=5*TBM(X(7),X(15))
1057 T(108)=1*TBM(X(7),X(16))
1058 T(109)=2*TBM(X(7),X(17))
1059 T(110)=1*TBM(X(7),X(18))
1060 T(111)=0*TBM(X(7),X(19))
1061 T(112)=10*TBM(X(7),X(20))
1077 T(113)=1*TBM(X(8),X(9))
1078 T(114)=1*TBM(X(8),X(10))
1079 T(115)=10*TBM(X(8),X(11))
1080 T(116)=10*TBM(X(8),X(12))
1081 T(117)=2*TBM(X(8),X(13))
1082 T(118)=0*TBM(X(8),X(14))
1083 T(119)=10*TBM(X(8),X(15))
1084 T(120)=2*TBM(X(8),X(16))
1085 T(121)=5*TBM(X(8),X(17))
1086 T(122)=2*TBM(X(8),X(18))
1087 T(123)=2*TBM(X(8),X(19))
1088 T(124)=10*TBM(X(8),X(20))
1114 T(125)=2*TBM(X(9),X(10))
1115 T(126)=0*TBM(X(9),X(11))
1116 T(127)=3*TBM(X(9),X(12))
1117 T(128)=5*TBM(X(9),X(13))
1118 T(129)=5*TBM(X(9),X(14))
1119 T(130)=0*TBM(X(9),X(15))
1120 T(131)=5*TBM(X(9),X(16))
1121 T(132)=0*TBM(X(9),X(17))
1122 T(133)=0*TBM(X(9),X(18))
1123 T(134)=0*TBM(X(9),X(19))
1124 T(135)=2*TBM(X(9),X(20))
1140 T(136)=5*TBM(X(10),X(11))
1141 T(137)=5*TBM(X(10),X(12))
1142 T(138)=0*TBM(X(10),X(13))
1143 T(139)=5*TBM(X(10),X(14))
1144 T(140)=1*TBM(X(10),X(15))
1145 T(141)=0*TBM(X(10),X(16))
1146 T(142)=0*TBM(X(10),X(17))
1147 T(143)=5*TBM(X(10),X(18))
1148 T(144)=5*TBM(X(10),X(19))
1149 T(145)=2*TBM(X(10),X(20))
1165 T(146)=5*TBM(X(11),X(12))
1166 T(147)=2*TBM(X(11),X(13))
1167 T(148)=5*TBM(X(11),X(14))
1168 T(149)=1*TBM(X(11),X(15))
1169 T(150)=10*TBM(X(11),X(16))
1170 T(151)=0*TBM(X(11),X(17))
1171 T(152)=2*TBM(X(11),X(18))
1172 T(153)=2*TBM(X(11),X(19))
1173 T(154)=5*TBM(X(11),X(20))
1189 T(155)=2*TBM(X(12),X(13))
1190 T(156)=10*TBM(X(12),X(14))
1191 T(157)=5*TBM(X(12),X(15))
1192 T(158)=0*TBM(X(12),X(16))
1193 T(159)=1*TBM(X(12),X(17))
1194 T(160)=1*TBM(X(12),X(18))
1195 T(161)=2*TBM(X(12),X(19))
1196 T(162)=5*TBM(X(12),X(20))
1282 T(163)=2*TBM(X(13),X(14))
1283 T(164)=2*TBM(X(13),X(15))
1284 T(165)=1*TBM(X(13),X(16))
1285 T(166)=0*TBM(X(13),X(17))
1286 T(167)=0*TBM(X(13),X(18))
1287 T(168)=0*TBM(X(13),X(19))
1288 T(169)=5*TBM(X(13),X(20))
1384 T(170)=5*TBM(X(14),X(15))
1385 T(171)=5*TBM(X(14),X(16))
1386 T(172)=1*TBM(X(14),X(17))
1387 T(173)=5*TBM(X(14),X(18))
1388 T(174)=5*TBM(X(14),X(19))
1389 T(175)=0*TBM(X(14),X(20))
1411 T(176)=3*TBM(X(15),X(16))
1412 T(177)=0*TBM(X(15),X(17))
1413 T(178)=5*TBM(X(15),X(18))
1414 T(179)=10*TBM(X(15),X(19))
1415 T(180)=10*TBM(X(15),X(20))
1435 T(181)=0*TBM(X(16),X(17))
1436 T(182)=0*TBM(X(16),X(18))
1437 T(183)=2*TBM(X(16),X(19))
1438 T(184)=0*TBM(X(16),X(20))
1458 T(185)=5*TBM(X(17),X(18))
1459 T(186)=2*TBM(X(17),X(19))
1460 T(187)=0*TBM(X(17),X(20))
1480 T(188)=1*TBM(X(18),X(19))
1481 T(189)=1*TBM(X(18),X(20))
1501 T(190)=6*TBM(X(19),X(20))
1651 P1NEW=0
1652 FOR KAU7=1 TO 190
1653 P1NEW=P1NEW+T(KAU7)
1654 NEXT KAU7
1655 P=-P1NEW
1656 IF P<=M THEN 1670
1657 FOR KEW=1 TO 20
1658 A(KEW)=X(KEW)
1659 NEXT KEW
1661 M=P
1666 GOTO 128
1670 NEXT I
1890 IF M>-1286 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)
1927 PRINT M,JJJJ
1999 NEXT JJJJ

This BASIC computer program was run with the IBM basica/D interpreter, and the output produced during the first 10 minutes of running is presented below. What immediately follows is a manual copy from the computer screen.

2 14 17 15 4
1 3 7 16 18
12 13 6 19 9
11 5 20 10 8
-1285 -31898

2 14 17 15 4
1 3 7 16 18
12 13 6 19 9
11 5 20 10 8
-1285 -31810

17 9 2 10 19
16 18 12 1 3
7 8 11 4 14
6 20 5 15 13
-1285 -31506

1285 is optimal, Loiola et al. (2007, p. 668). Interpreted in accordance with line 1912 through line 1927, the output through JJJJ=-31506 was produced during the first 10 minutes of running on a personal computer with an Intel 2.66 GHz. chip and the IBM basica/D interpreter.

References

Elshafei, A. N., "Hospital Layout as a Quadratic Assignment Problem," Operational Research Quarterly 28, 167-179 (1977).

Gavett. J. W. and N. V. Plyter, "The Optimal Assignment of Facilities to Locations by Branch and Bound," Operations Research 14, 210-232 (Mar.-Apr., 1966).

Heragu, S. S. Facilities Design, Third Edition. Boca Raton, Florida: CRC Press, 2008.

Land, A. H., "A Problem of Assignment with Inter-Related Costs," Operational Research Quarterly 14, 185-199 (June 1963).

Loiola, E. M., N. M. M. de Abreu, P. O. Boaventura-Netto, P. Hahn, and T. Querido, "A Survey for the Quadratic Assignment Problem," European Journal of Operational Research 176, 657-690 (2007).

Nugent, C. E., T. E. Vollmann, and J. Ruml, "An Experimental Comparison of Techniques for the Assignment of Facilities to Locations," Operations Research 16, 150-173 (Jan.-Feb., 1966).

Pierce, J. F. and W. B. Crowston, "Tree-Search Algorithms for Quadratic Assignment Problems," Naval Research Logistics Quarterly, 18, 1-36 (1971).