5 ! RUN LINK OF LINEAR PROGRAMMING SYSTEM 10 DIM A(30%,50%) : LET I%=30% : J%=50% : V%=I%*J% : Q=0.01 20 PRINT : PRINT "LPRUN" : PRINT "IF MAX TYPE 1, MIN TYPE -1" 30 INPUT Z : LET Z=-Z : PRINT 40 PRINT "TYPE NO. OF CONSTRAINTS, NO. OF VARIABLES" :INPUT M%,N% 50 PRINT"TYPE NO. OF <, NO. OF=, NO. OF > CONSTRAINTS" 60 INPUT L%,E%,G% : IF L%+E%+G%=M% GO TO 100 70 PRINT "DATA INCONSISTENT" : STOP 100 LET B%=M%+N%+G%+1% : W%=M%+1% : IF B%*W%0% GO TO 300 29IF E% =0% GO TO 500 ELSE GO TO 330 300 A(K%-1%,K%+N%-L%-E%)=-1 FOR K%=L%+E%+2% TO M%+1% 330 LET W%=W%+1% : Q=0 : FOR J%=2% TO N%+G%+1% :S=0 340 S=S+A(I%,J%) FOR I%=M%-G%-E%+1% TO M% 350 LET A(W%,J%)=-S : IF A(W%,J%)>Q GO TO 400 ELSE Q=A(W%,J%) : C%=J% 400 NEXT J% : S=0 : S=S+A(J%,B%) FOR J%=M%-G%-E%+1% TO M% 410 LET A(W%,B%)=-S 500 PRINT : PRINT "****************************************" : PRINT 510 PRINT "YOUR VARIABLES " H% "THROUGH" N% : IF G%=0% GO TO 550 530 PRINT "SPLUS VARIABLES " N%+1% "THROUGH" N%+G% 550 IF L%=0% GO TO 570 560 PRINT "SLACK VARIABLES "N%+G%+1%"THROUGH"N%+G%+L% 570 IF G%+E%=0% GO TO 590 580 PRINT "ARTIFICIAL VARIABLES"N%+G%+L%+1% "THROUGH" B%-2% : PRINT 590 GOSUB 2000 ! TRANSFORM MATRIX 610 PRINT : PRINT : IF Q=0.01 GO TO 1000 620 IF Q=0 GO TO 1200 ELSE GO TO 1500 630 LET H%=H%+1% : Q=1E38 : R%=0% : FOR I%=1% TO M% 640 IF A(I%,C%)<=0 GO TO 700 650 IF A(I%,B%)/A(I%,C%)>Q GO TO 700 660 LET Q=A(I%,B%)/A(I%,C : LET R%=I% 700 NEXT I% : IF R%>0% GO TO 800 ELSE PRINT "SOLUTION UNBOUNDED" 750 GOSUB 2000 : STOP 800 LET P=A(R%,C%) : A(R%,1%)=C%-1% 810 LET A(R%,J%)=A(R%,J%)/P FOR J%=2% TO B% 820 FOR I%=1% TO W% : IF I%=R% GO TO 920 825 FOR J%=2% TO B% 830 IF J%=C% GO TO 900 ELSE LET A(I%,J%)=A(I%,J%)-A(R%,J%)*A(I%,C%) 850 IF (ABS(A(I%,J%)))>1E-5 GO TO 900 ELSE LET A(I%,J%)=0 900 NEXT J% 920 NEXT I% 940 LET A(I%,C%)=0 FOR I%=1% TO W% : A(R%,C%)=1 1000 LET Q=0 : FOR J%=2% TO N%+GL%+1% : IF A(W%,J%)>Q GO TO 1100 1020 LET Q=A(W%,J%) : C%=J% 1100 NEXT J% : GO TO 620 ! CHANGE TO PHASE TWO 1200 IF W%=M%+1% GO TO 1480 ELSE LET W%=W%-1% 1220 IF A(W%+1%,B%)<1E-6 THEN 1250 ELSE PRINT"NO FEASIBLE SOLUTION":STOP 1250 FOR I%=1% TO M% : IF A(I%,1%)<=N%+G%+L% GO TO 1450 1300 LET A(I%,J%)=0 FOR J%=2% TO B% 1450 NEXT I% : GO TO 1000 1480 PRINT : PRINT "ANSWERS:" 1500 IF Q=0 GO TO 1600 ELSE PRINT : PRINT"BASIS BEFORE ITERATION"H% 1600 PRINT "VARIABLE","VALUE" :OR I%=1% TO M% 1700 IF A(I%,1%)=0 THEN 1800 ELSE PRINT A(I%,1%),A(I%,B%) : NEXT I% 1800 IF Q<>0 THEN 630 ELSE PRINT : PRINT "DUAL VARIABLES:" 1820 PRINT "COLUMN","VALUE" 1830 PRINT J%,A(W%,J%+1%) FOR J%=N%+1% TO B%-G%-2% 1835 PRINT : PRINT 1840 PRINT"OBJECTIVE FUNCTION VALUE =";-Z*A(W%,B%)"IN"H%-1%"ITERATIONS" 1850 PRINT : GOSUB 2000 : STOP ! SUBROUTINE TO PRINT THE TABLEAU 2000 PRINT"TABLEAU AFTER"H%-1%"ITERATIONS" : PRINT : FOR I%=1% TO W% 2100 FOR J%=2% TO B% : IFB%<6%TN2200 ELSE PRINTA(I%,J%);:GOTO2300 2200 PRINT A(I%,J%); 2300 NEXT J% : PRINT : PRINT : NEXT I% : RETURN 9900 DATA 1,2,3,4,2,3,4,5,3,4,5,6,4,5,6,7,5,6,7,8,1,1,1,1 9999 END