10 CLS 20 PRINT "LINEAR PROGRAMMING" 30 PRINT 40 DIM A(6,10),B(6) 50 PRINT 60 PRINT "TYPE '1' FOR MAXIMIXATION, OR '-1' FOR MINIMIZATION"; 70 INPUT Z 80 Z=-Z 90 PRINT "TYPE NUMBER OF CONSTRAINTS, NUMBER OF VARIABLES"; 100 INPUT M,N 110 PRINT "NUMBER OF LESS THAN, EQUAL, GREATER CONSTRAINTS"; 120 INPUT L,E,G 130 IF M=L+E+G THEN 160 140 PRINT "DATA ON CONSTRAINTS INCONSISTENT. TRY AGAIN." 150 GOTO 110 160 C=N+M+G 170 C1=C+1 180 C2=N+L+G 190 M1=M+1 200 M2=M+2 210 PRINT 220 FOR I=1 TO M2 230 FOR J=1 TO C1 240 A(I,J)=0 250 NEXT J 260 NEXT I 270 FOR I=1 TO M 280 B(I)=0 290 NEXT I 300 FOR I=1 TO M 310 FOR J=1 TO N 320 READ A(I,J) 330 IF I<=L THEN 350 340 A(M1,J)=A(M1,J)-A(I,J) 350 NEXT J 360 IF I>L THEN 400 370 B(I)=N+I 380 A(I,N+1)=1 390 GOTO 460 400 B(I)=N+G+I 410 A(I,J+G+I)=1 420 IF I>L+E THEN 440 430 GOTO 460 440 A(I,N+I-E)=-1 450 A(M1,N+I-E)=1 460 NEXT I 470 FOR I=1 TO M 480 READ A(I,C1) 490 NEXT I 500 FOR J=1 TO N 510 READ A(M2,J) 520 A(M2,J)=Z*A(M2,J) 530 NEXT J 540 PRINT 550 P1=1 560 PRINT "YOUR VARIABLES ";P1;"THROUGH";N 570 IF L=0 THEN 590 580 PRINT "SLACK VARIABLES";N+1;"THROUGH";N+L 590 IF G=0 THEN 610 600 PRINT "SURPLUS VARIABLES";N+L+1;"THROUGH";C 610 IF L=M THEN 790 620 PRINT "ARTIFICIAL VARIABLES";C2+1;"THROUGH";C 630 M3=M1 640 GOSUB 1040 650 PRINT 660 FOR I1=1 TO M 670 IF B(I1)<=C2 THEN 780 680 IF A(I1,C1)<=.00001 THEN 710 690 PRINT "THE PROBLEM HAS NO FEASIBLE SOLUTION." 700 GOTO 3060 710 FOR J1=1 TO C2 720 IF ABS(A(I1,J1))<=.00001 THEN 770 730 R=I1 740 S=J1 750 GOSUB 1270 760 J1=C2 770 NEXT J1 780 NEXT I1 790 P1=2 800 PRINT 810 M3=M2 820 GOSUB 1040 830 PRINT 840 PRINT "ANWWERS:" 850 PRINT "PRIMAL VARIABLES:" 860 PRINT "VARIABLES","VALUE" 870 FOR J=1 TO C2 880 FOR I=1 TO M 890 IF B(I)<>J THEN 920 900 PRINT J,A(I,C1) 910 I=M 920 NEXT I 930 NEXT J 940 PRINT "DUAL VARIABLES:" 950 PRINT "VARIABLE","VALUE" 960 IF L=0 THEN 1000 970 FOR I=1 TO L 980 PRINT I,-Z*A(M2,N+I) 990 NEXT I 1000 PRINT "VALUE OF OBJECTIVE FUNCTION";-Z*A(M2,C1) 1010 PRINT 1020 PRINT 1030 GOTO 3060 1040 P=-.00001 1050 FOR J=1 TO C2 1060 IF A(M3,J)>=P THEN 1090 1070 S=J 1080 P=A(M3,J) 1090 NEXT J 1100 IF P=-.00001 THEN 1450 1110 GOSUB 1140 1120 GOSUB 1220 1130 GOTO 1040 1140 Q=1.E+38 1150 FOR I=1 TO M 1160 IF A(I,S)<=.00001 THEN 1200 1170 IF A(I,C1)/A(I,S)>=Q THEN 1200 1180 R=I 1190 Q=A(I,C1)/A(I,S) 1200 NEXT I 1210 RETURN 1220 IF Q=1.E+38 THEN 1250 1230 GOSUB 1270 1240 RETURN 1250 PRINT "THEN SOLUTION IS UNBOUNDED." 1260 GOTO 3060 1270 P=A(R,S) 1280 FOR I=1 TO M2 1290 IF I=R THEN 1360 1300 FOR J=1 TO C1 1310 IF J=S THEN 1350 1320 A(I,J)=A(I,J)-A(I,S)*A(R,J)/P 1330 IF ABS(A(I,J))>=.00001 THEN 1350 1340 A(I,J)=0 1350 NEXT J 1360 NEXT I 1370 FOR J=1 TO C1 1380 A(R,J)=A(R,J)/P 1390 NEXT J 1400 FOR I=1 TO M2 1410 A(I,S)=0 1420 NEXT I 1430 A(R,S)=1 1440 B(R)=S 1450 RETURN 3000 DATA 1,1,1,1,1 3010 DATA .9,.8,.95,.7,.3 3020 DATA .05,.05,.02,.3,.7 3030 DATA .05,.15,.03,0,0 3040 DATA 100,83,14,3 3050 DATA 6.13,7.12,5.85,4.57,3.96 3060 END