1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        LINQUP:   SOLVES EITHER A LINEAR OR QUADRATIC PROGRAMMING
4  REM                  PROBLEM
5  REM        36710 REV  A   10/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
9000  REM  LINQUP--LINEAR OR QUADRATIC PROGRAMMING ALGORITHM
9002  DIM A[26,26],M[25],Y[25]
9004  DIM T$[3],S$[3],R$[3]
9006  DIM V$[50]
9010  READ T$,W,Q,U
9012  LET Z6=0
9014  LET Z8=0
9016  LET Z5=0
9018  LET Z9=0
9020  LET Z7=0
9022  PRINT "OBJECTIVE IS TO ";T$;"IMIZE THE SUM OF THE FOLLOWING TERMS:"
9024  PRINT " "
9026  LET R=C=U+Q+1
9028  LET S=R+1
9030  MAT A=ZER[S,S]
9032  LET F=-1
9052  FOR K=1 TO W
9054  READ I,J
9056  IF I=0 THEN 9076
9058  IF J=0 THEN 9076
9060  READ A[I,J]
9062  PRINT "     ";A[I,J];"*  X(";I;") * X(";J;")"
9064  IF I=J THEN 9070
9066  LET A[J,I]=A[I,J]
9068  GOTO 9072
9070  LET A[J,I]=A[I,J]+A[J,I]
9072  LET F=0
9074  GOTO 9082
9076  READ A
9078  LET A[I+J,C]=A[R,I+J]=A
9080  PRINT "     ";A;"*   X(";I+J;")"
9082  NEXT K
9084  PRINT " "
9086  IF T$="MIN" THEN 9098
9088  FOR I9=1 TO Q
9090  FOR I8=1 TO Q+U+1
9092  LET A[I9,I8]=-A[I9,I8]
9094  NEXT I8
9096  NEXT I9
9098  PRINT "THE CONSTRAINTS ARE:"
9100  FOR I=1 TO U
9102  PRINT " "
9104  PRINT "     H";I;" =:"
9106  FOR J=1 TO Q
9108  READ A[Q+I,J]
9110  PRINT "     ";A[Q+I,J];"*  X(";J;")"
9112  LET A[J,Q+I]=-A[Q+I,J]
9114  NEXT J
9116  READ A[Q+I,C]
9118  PRINT "     ";A[Q+I,C]
9120  IF T$="MIN" THEN 9126
9122  LET A[R,Q+I]=A[Q+I,C]
9124  GOTO 9128
9126  LET A[R,Q+I]=-A[Q+I,C]
9128  PRINT "     >= 0"
9130  NEXT I
9132  PRINT " "
9134  PRINT " "
9136  PRINT " "
9138  IF F=0 THEN 9146
9140  PRINT "LINEAR PROGRAMMING"
9142  PRINT " "
9144  LET Z6=1
9146  PRINT "DO YOU WISH TO SELECT THE PIVOT ELEMENTS MANUALLY,YES OR NO"
9148  INPUT S$
9150  IF S$="NO" THEN 9170
9152  IF S$="YES" THEN 9158
9154  PRINT "ANSWER EITHER YES OR NO"
9156  GOTO 9146
9158  LET Z8=2
9160  PRINT " WHEN SELECTING MANUALLY, ENTER I,J,AND Z9"
9162  PRINT "    WHERE  I = ROW OF PIVOT ELEMENT"
9164  PRINT "           J = COLUMN OF PIVOT ELEMENT"
9166  PRINT "          Z9 = 2 WHEN USER WISHES TO STOP MANUAL PIVOTING"
9168  PRINT "               AND PRINT FINAL RESULTS;  OTHERWISE = 0."
9170  PRINT "DO YOU WISH PRINTOUT OF INTERMEDIATE TABLEAUS,YES OR NO"
9172  INPUT R$
9174  IF R$="NO" THEN 9184
9176  IF R$="YES" THEN 9182
9178  PRINT "ANSWER EITHER YES OR NO"
9180  GOTO 9170
9182  LET Z5=2
9184  PRINT 
9194  FOR I=1 TO Q
9196  LET A[S,I]=100+I
9198  NEXT I
9200  FOR I=Q+1 TO Q+U
9202  LET A[S,I]=200+I
9204  NEXT I
9206  FOR J=1 TO R-1
9208  LET A[J,S]=J
9210  NEXT J
9212  IF Z5<1 THEN 9228
9214  GOSUB 9274
9222  IF Z5<1 THEN 9228
9224  GOSUB 9500
9226  IF Z8>1 THEN 9288
9228  LET P=1.E+27
9230  FOR I=1 TO R-1
9232  IF A[I,C] >= 0 THEN 9254
9234  IF Z6=1 THEN 9238
9236  GOSUB 9260
9238  FOR J=1 TO C-1
9240  IF A[I,J] <= 0 THEN 9252
9242  LET X=A[R,J]/A[I,J]
9244  IF X >= P THEN 9252
9246  LET P=X
9248  LET K=I
9250  LET L=J
9252  NEXT J
9254  NEXT I
9256  IF P<1.E+27 THEN 9294
9258  GOTO 9356
9260  FOR X1=1 TO R-1
9262  IF A[X1,S]>100 THEN 9270
9264  IF A[X1,X1]=0 THEN 9270
9266  LET K=L=X1
9268  GOTO 9294
9270  NEXT X1
9272  RETURN 
9274  PRINT " IN THE FIRST TABLEAU, THE FIRST COLUMN AND LAST ROW ARE"
9275  PRINT " INDEXES. THE NEXT";Q;"COLUMNS ARE ASSOCIATED WITH THE"
9276  PRINT " CORRESPONDING";Q;"ALLOCATION VARIABLES. THE NEXT";U
9278  PRINT " COLUMNS ARE ASSOCIATED WITH THE";U;"LAGRANGE MULTIPLIERS"
9280  PRINT " ASSOCIATED WITH THE CORRESPONDING CONSTRAINTS. "
9282  PRINT 
9284  RETURN 
9286  IF Z8<1 THEN 9294
9288  PRINT " INPUT PIVOT LOCATION I,J AND TERMINATING FLAG Z9"
9289  INPUT K,L,Z9
9290  IF Z9>1 THEN 9356
9291  IF A[K,L]=0 THEN 9650
9292  IF K=L THEN 9294
9293  IF A[L,K]-A[L,L]*A[K,K]/A[K,L]=0 THEN 9650
9294  IF Z5 <= 1 THEN 9298
9295  PRINT 
9296  PRINT "PIVOT LOCATION";K;L
9298  LET X=A[S,L]
9300  LET A[S,L]=A[K,S]
9302  LET A[K,S]=X
9304  LET X=A[K,L]
9306  FOR I=1 TO R
9308  IF I=K THEN 9318
9310  FOR J=1 TO C
9312  IF J=L THEN 9316
9314  LET A[I,J]=A[I,J]-A[I,L]*A[K,J]/X
9316  NEXT J
9318  NEXT I
9320  REM CALCULATE PIVOT COLUMN VALUES
9322  FOR I=1 TO R
9324  LET A[I,L]=A[I,L]/X
9326  NEXT I
9328  REM CALCULATE PIVOT ROW VALUES
9330  FOR J=1 TO C
9332  LET A[K,J]=-A[K,J]/X
9334  NEXT J
9336  LET A[K,L]=1/X
9338  IF K=L THEN 9352
9340  IF Z7=5 THEN 9352
9342  LET Z7=K
9344  LET K=L
9346  LET L=Z7
9348  LET Z7=5
9350  GOTO 9294
9352  LET Z7=0
9354  GOTO 9222
9356  MAT M=ZER[Q+U]
9358  MAT Y=ZER[Q+U]
9360  FOR I=1 TO R-1
9362  IF A[I,S]>200 THEN 9380
9364  IF A[I,S]>100 THEN 9376
9366  IF A[I,S]>Q THEN 9372
9368  LET M[A[I,S]]=A[I,C]
9370  GOTO 9392
9372  LET Y[A[I,S]]=A[I,C]
9374  GOTO 9392
9376  LET Y[A[I,S]-100]=A[I,C]
9378  GOTO 9392
9380  LET M[A[I,S]-200]=A[I,C]
9382  GOTO 9392
9384  IF A[I,S]<100 THEN 9390
9386  LET M[I]=A[I,C]
9388  GOTO 9392
9390  LET Y[I]=A[I,C]
9392  NEXT I
9394  PRINT "ALLOCATION VARIABLES AND ASSOCIATED LAGRANGE MULTIPLIERS"
9396  PRINT " "
9398  FOR I=1 TO Q
9400  PRINT "X";I;"=";Y[I],"MU";I;"=";M[I]
9402  NEXT I
9404  PRINT " "
9406  PRINT "CONSTRAINT RELATIONS AND ASSOCIATED LAGRANGE MULTIPLIERS"
9408  PRINT " "
9410  FOR I=Q+1 TO Q+U
9412  PRINT "H";I-Q;"=";Y[I],"MU";I;"=";M[I]
9414  NEXT I
9416  PRINT " "
9418  PRINT "OBJECTIVE FUNCTION =";A[R,C]/2
9420  END 
9500  LET J2=S
9505  LET J1=1
9506  IF S <= 4 THEN 9508
9507  LET J2=4
9508  PRINT 
9509  PRINT 
9530  FOR I3=1 TO S
9532  LET T7=6
9533  IF I3#S THEN 9535
9534  PRINT 
9535  PRINT A[I3,S];
9540  FOR J3=J1 TO J2-1
9550  PRINT TAB(T7);A[I3,J3];
9555  LET T7=T7+17
9560  NEXT J3
9565  IF J2#S THEN 9570
9566  PRINT " "
9567  GOTO 9580
9570  PRINT TAB(T7);A[I3,J2]
9580  NEXT I3
9585  IF J2=S OR J2+1=S THEN 9640
9590  LET J1=J2+1
9600  LET J2=J1+3
9610  IF J2 <= S THEN 9508
9620  LET J2=S
9630  GOTO 9508
9640  RETURN 
9650  PRINT "VALUE AT PIVOT LOCATION IS ZERO. TRY AGAIN."
9655  GOTO 9288
9660  END 
9900  DATA "MAX"
9901  DATA 5,2,2
9902  DATA 1,1,-1
9903  DATA 2,2,-4
9904  DATA 1,2,4
9905  DATA 1,0,6
9906  DATA 2,0,3
9907  DATA -1,-1,3
9908  DATA -4,-1,9
9999  END 
