Графическое решение задачи линейного программирования на

компьютере для случая двух переменных

 
 

Z=C1*X1+C2*x2

a11x1+a12x2<=b1     x1>=0  x2>=0

a21x1+a22x2<=b2     ai>=0  bi>=0             

1)на плоскости х12 строят прямые, соответствующие условиям ограничений

2)закрасить область допустимых значений

3) при вводе с клавиатуры Z будут строиться линии уровня.

Даны матрица A(i,j),  Bi,Ci - коэффициенты системы ограничений и максимизирующей функции ХХ- максимальное значение шкалы нанесенной на ось Х1 ХУ - максимальное значение шкалы нанесенной на ось Х2 sx, sy - число делений, приходящихся на одну точку графика.

х(1),х(2)- значения переменных задачи.

x2=y

ax+by=c                    

x=0 y=c/b                  

y=0 x=c/a

В программе запишется:

(c/a/sx+x0,y0)-(c/a,0),

(x0,y0-c/b/sy)-(0,c/b)

Знак минус, так как ось y направлена вниз.

AX+BY=C --> LINE(x0,y0-c/b/sy) - (c/a/sx+x0,y0)

10 screen 9:cls:keyoff

20 x0=100:y0=175

30 line(x0,8)-(x0,199)

40 line(0,y0)-(600,y0)

50 locate 1,x0/8:print "x(2)"

60 locate y0/8,74:print "x(1)"

70 locate 1,30:print"линейное программирование"

80 dim a(2,2),b(2,c(2),x(2)

90 for i=1 to 2

100 read a(i,1),a(i,2),b(i),c(i)

110 next

120 xx=b(1)/a(1,1)+b(2)/a(2,1)

130 yy=b(1)/a(1,2)+b(2)/a(2,2)

140 sx=xx/(600-x0):sy=yy/y0

150 for i=1 to 2

160 line (x0,y0-b(i)/a(i,2)/sy)-(b(i)/a(i,1)?sx+x0,0)

170 next

180 paint (x0+1,y0-1)

190 locate 1,33:input "введите z=";z

200 line (x0,y0-z/c(1)/sy)-(z/c(2)/sx+x0,y0)

210 goto 190

220 data 0.16,0.8,80,1.5

230 data 0.005,0.008,1,2,3