Saturday, July 11, 2009

A Computer Program for Nonlinear Programs with Big Integer Variables and Continuous Variables

Jsun Yui Wong

The computer program listed below seeks to solve the following problem, which is Problem 346 on page 167 of Schittkowski (1987) plus the additional restriction that X(3)= 0, 1, 2, 3,..., or 125.

Objective function:
Maximize:
(.0201/10000000#)*X(1)^4*X(2)*X(3)^2

Constraints:
675-X(1)^2*X(2)>=0
.419-(X(1)^2*X(3)^2)/10000000#>=0
0<=X(1)<=36
0<=X(2)<=5
X(3)= 0, 1, 2, 3,..., 125.

0 DEFDBL A-Z
3 DEFINT I,J,K
4 DIM X(42),A(42),L(33),K(33)
5 FOR JJJJ=-32000 TO 32000
14 RANDOMIZE JJJJ
16 M=-1D+17
93 A(1)=RND*36
94 A(2)=RND*5
95 A(3)=FIX(RND*126)
103 REM
126 IMAR=10+FIX(RND*1000)
128 FOR I=1 TO IMAR
129 FOR K=1 TO 3
131 X(K)=A(K)
132 NEXT K
811 IF RND<.99 THEN 903 ELSE 961
903 IF RND<1/2 THEN 911 ELSE 921
911 IF RND<.5 THEN X(1)=RND*36 ELSE X(1)=A(1)+(1-2*RND)*.00001*A(1)
915 GOTO 1151
921 IF RND>.5 THEN X(2)=RND*5 ELSE X(2)=A(2)+(1-2*RND)*.00001*A(2)
925 GOTO 1151
961 X(3)=FIX(RND*126)
1151 P1=675-X(1)^2*X(2)
1159 IF P1<0 THEN P1=P1 ELSE P1=0
1255 P2=.419-(X(1)^2*X(3)^2)/10000000#
1259 IF P2<0 THEN P2=P2 ELSE P2=0
1355 REM
1359 REM
1488 P=(.0201/10000000#)*X(1)^4*X(2)*X(3)^2-333333!*(ABS(P1)+ABS(P2))
1499 PR=(.0201/10000000#)*X(1)^4*X(2)*X(3)^2
1551 IF P<=M THEN 1670
1657 FOR KEW=1 TO 3
1658 A(KEW)=X(KEW)
1659 NEXT KEW
1661 M=P
1663 MM=PR
1666 GOTO 128
1670 NEXT I
1890 IF M>5.684 THEN 1912 ELSE 1999
1912 PRINT A(1),A(2),A(3)
1915 PRINT M,MM,JJJJ
1999 NEXT JJJJ

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

17.34702385316216 2.24312654607115 118
5.684780970732687 5.684780970732687 -31938

28.8302667451177 .812093927315822 71
5.68477979947611 5.68477979947611 -31918

24.96279110460882 1.083221828698728 82
5.684780780297064 5.684780780297064 -31909

Interpreted in accordance with line 1912 and line 1915, the output through JJJJ=-31909 was produced in the first 25 seconds of running on a personal computer with an Intel 2.66 GHz. chip and the IBM basica/D interpreter.

Reference

K. Schittkowski (1987): "More Test Problems for Nonlinear Programming Codes," Springer-Verlag, Berlin Heidelberg New York.