Линейное программирование
P:=0;
FOR J:=1 TO Kell DO
IF Fm=1 THEN IF Fo[J]<-Epsilon THEN
BEGIN
P:=1;
CONTINUE;
END ELSE
ELSE IF Fo[J]>Epsilon THEN
BEGIN
P:=1;
CONTINUE;
END;
IF P<>1 THEN
BEGIN
SAVE(0,'В ',2);SAVE(Kit,' ',1);
SAVE(0,'-й итерации было получено оптимальное решение',3);
SAVE(0,'т.к. при исследовании на ',2);
IF Fm=1 THEN
SAVE
(0,'МАКСИМУМ индексная строка не содержит отицательных элементов.',3)
ELSE
SAVE(0,'МИНИМУМ индексная строка не содержит положительных элементов.',3);
FOR I1:=1 TO Kstr DO
IF BS[I1][1]='Y' THEN
BEGIN
SAVE(0,'Но т.к. из базиса не выведены все Y, то ',3);
SAVE(0,'можно сделать вывод, что РЕШЕНИЙ НЕТ',3);
HALT;
END;
{округление значений массива Х до целого числа, если разность округленного и обычного значений по модулю меньше чем 0.00001}
FOR I:=1 TO Kstr DO
BEGIN
Z:=ROUND(H[i]);
IF ABS(Z-H[i])<Epsilon THEN H[i]:=ROUND(H[i]);
FOR J:=1 TO Kell DO
BEGIN
IF X[I,J]<0 THEN Z:=ROUND(X[I,J]);
IF ABS(Z-X[I,J])<Epsilon THEN X[I,J]:=ROUND(X[I,J]);
END;
END;
{ Проверка целочисленности решения }
P1:=0;
FOR I:=1 TO Kstr DO
BEGIN
IF INT(10000*FRAC(H[i]))<>0 THEN BEGIN P1:=1;CONTINUE; END;
FOR J:=1 TO Kell DO
IF BS[i]=Bvsp[J] THEN
FOR I1:=1 TO Kstr DO
IF ABS(FRAC(X[I1,J]))>=Epsilon THEN BEGIN P1:=1;CONTINUE; END;
END;
{ Составление новой базисной строки для целочисленного решения }
IF (PrGomory='Y') AND (P1=1) THEN
BEGIN
GOMORY;
NachKell:=Kell;
I1:=Kstr;DPy:=1;
DOP_PER;
BS[Kstr]:=Bvsp[Kell];
CPrnew[Kstr]:=FunctPr[Kell];
Cnew[Kstr]:=FX[Kell];
GOTO NACH;
END;
IF P1=0 THEN SAVE(0,'Данное решение является целочисленым.',3);
SAVE(0,'При этом:',3);
IF MIN=1 THEN BEGIN F0:=-F0;Fm:=MIN; END;
IF Fm=1 THEN
SAVE(0,'Fmax=',2)
ELSE
SAVE(0,'Fmin=',2);
SAVE(F0,'',1);
SAVE(0,'',0);
FOR I1:=1 TO Kstr DO
BEGIN
SAVE(0,' ',2);
SAVE(0,BS[I1],2);SAVE(0,'=',2);
SAVE(H[I1],'',1);
SAVE(0,'',0);
END;
HALT;
END;
{ Нахождение ключевого столбца }
KLst:=1;Mo:=0;
FOR J:=1 TO Kell DO
IF Fm=1 THEN
IF Fo[J]<Mo THEN Mo:=Fo[J];
FOR J:=1 TO Kell DO
BEGIN
IF Bvsp[J][1]<>'Y' THEN
IF Fm=1 THEN
BEGIN
IF Fo[J]<0 THEN
IF Fo[J]>=Mo THEN
BEGIN
Mo:=Fo[J]; KLst:=J;
END;
END
ELSE
BEGIN
IF Fo[J]>0 THEN
IF Fo[J]>=Mo THEN
BEGIN
Mo:=Fo[J]; KLst:=J;
END;
END;
END;
SAVE(0,'Ключевой столбец: ',2);SAVE(KLst,' ',1);
{ Нахождение ключевой строки }
P1:=0;K_st:=0;
FOR J:=1 TO Kell DO
IF ABS(Mo-Fo[J])<Epsilon THEN
BEGIN
K_st:=K_st+1;
FOR I:=1 TO Kstr DO
IF X[I,KLst]>0 THEN BEGIN B[i]:=H[i]/X[I,KLst]; P:=B[i];KLstr:=I; END
ELSE BEGIN B[i]:=-1; P1:=P1+1; END;
END;
IF P1=Kstr*K_st THEN
BEGIN
SAVE(0,'',0);
SAVE(0,'РЕШЕНИЙ НЕТ т.к. невозможно определить ключевую строку',3);
HALT;
END;
P1:=0;
FOR J:=1 TO Kell DO
IF ABS(Mo-Fo[J])<Epsilon THEN
FOR I:=1 TO Kstr DO
IF B[i]>=0 THEN BEGIN
IF B[i]<P THEN IF Bvsp[KLst]<>BS[i] THEN BEGIN P:=B[i]; KLstr:=I; END;
IF INT(10000*B[i])=INT(10000*P) THEN
IF (BS[i][1]='Y') AND (BS[KLstr][1]='X') THEN
IF Bvsp[KLst]<>BS[i] THEN BEGIN P:=B[i]; KLstr:=I; END;
END;
SAVE(0,'Ключевая строка: ',2);SAVE(KLstr,' ',1);
SAVE(0,'',0);
FOR I:=1 TO Kstr DO
IF Bvsp[KLst]=BS[i] THEN
BEGIN
SAVE(0,'РЕШЕНИЙ НЕТ т.к. в базисном столбце уже есть ',3);
SAVE(0,'такая переменная.',3);
HALT;
END;
{ Вызов процедуры сокращения Y }
If CPr[KLstr]=1 then SOKR;
{ Построение следующей Симплекс-таблицы }
BS[KLstr]:=Bvsp[KLst];
Cnew[KLstr]:=FX[KLst];
CPrnew[KLstr]:=FunctPr[KLst];
FOR I:=1 TO Kstr DO
BEGIN
IF I=KLstr THEN Hnew[i]:=H[i]/X[KLstr,KLst]
ELSE Hnew[i]:=H[i]-(H[KLstr]*X[I,KLst]/X[KLstr,KLst]);
FOR J:=1 TO Kell DO
BEGIN
IF (I=KLstr) AND (J=KLst) THEN Xnew[I,J]:=1;
IF (I=KLstr) AND (J<>KLst) THEN Xnew[I,J]:=X[I,J]/X[KLstr,KLst];
IF (I<>KLstr) AND (J=KLst) THEN Xnew[I,J]:=0;
IF (I<>KLstr) AND (J<>KLst) THEN
Xnew[I,J]:=X[I,J]-(X[KLstr,J]*X[I,KLst]/X[KLstr,KLst]);
END;
END;
KLst:=0;KLstr:=0;
Kit:=Kit+1;
UNTIL (Kit=0);
END;
{ Основная программа }
BEGIN
CLRSCR;
Kit:=0;Dop_X:=0;
ASSIGN(F,'SIMPLEX.DAT');
REWRITE(F);
CLOSE(F);
ST:;
WRITE('Введите кол-во строк:');READLN(Kstr);
IF Kstr>10 THEN
BEGIN
WRITELN('Программа не расчитана на введенное кол-во строк!');
GOTO ST;
END;
ELL:
WRITE('Введите кол-во элементов:');READLN(Kell);
IF Kell>10 THEN
BEGIN
WRITELN('Программа не расчитана на введенное кол-во элементов!');
GOTO ELL;
END;
ZN:
WRITE('Исследуем на МАКСИМУМ(1) или МИНИМУМ(2):');READLN(Fm);
IF (Fm<>1) AND (Fm<>2) THEN
BEGIN
WRITELN('Введите снова');GOTO ZN;
END;
WRITE('Целочисленное решение(Y/N): ');READLN(PrGomory);
IF (PrGomory='Y') OR (PrGomory='y') THEN PrGomory:='Y' ELSE PrGomory:='N';
{ Вызов процедуры SIMPLEX}
SIMPLEX;
END.
|
C: B: N: (Bi) X1 X2 X3 Y1 Y2 Y3
+M Y1 120.0000 4.0000 8.0000 4.0000 1.0000 0.0000 0.0000
+M Y2 160.0000 6.0000 2.0000 3.0000 0.0000 1.0000 0.0000
+M Y3 400.0000 2.0000 2.0000 4.0000 0.0000 0.0000 1.0000
680.0000 12.0000 12.0000 11.0000 0.0000 0.0000 0.0000
Klu4evoy stolbec: 2 Klu4evaya stroka: 1
C: B: N: X1 X2 X3 Y2 Y3
-8.0000 X2 15.0000 0.5000 1.0000 0.5000 0.1250 0.0000
+M Y2 130.0000 5.0000 0.0000 2.0000 -0.2500 1.0000
+M Y3 370.0000 1.0000 0.0000 3.0000 -0.2500 0.0000
500.0000 6.0000 0.0000 5.0000 0.0000 0.0000
Klu4evoy stolbec: 1 Klu4evaya stroka: 2
C: B: N: X1 X2 X3 Y3
-8.0000 X2 2.0000 0.0000 1.0000 0.3000 0.1500
-10.0000 X1 26.0000 1.0000 0.0000 0.4000 -0.0500
+M Y3 344.0000 0.0000 0.0000 2.6000 -0.2000
344.0000 0.0000 0.0000 2.6000 0.0000
В 3 -y iteracii bilo polu4eno optimalnoe reshenie
no t.k. iz bazisa nevivedeni vse Y, to
mojno sdelat vivod, chto resheniy NET
X1 = 26
X2 = 2
X3 = 0
Z = 10 * 26 + 8 * 2 + 6 * 0 = 276 <
Другие рефераты на тему «Экономико-математическое моделирование»:
- Классический метод наименьших квадратов
- Основные понятия и методы экономико-математического моделирования
- Разработка производственных и управленческих решений
- Исследование и компьютерная реализация экономико-математической модели зависимости поступлений в бюджет от величины налоговой ставки
- Современные эконометрические методы
Поиск рефератов
Последние рефераты раздела
- Выборочные исследования в эконометрике
- Временные характеристики и функция времени. Графическое представление частотных характеристик
- Автоматизированный априорный анализ статистической совокупности в среде MS Excel
- Биматричные игры. Поиск равновесных ситуаций
- Анализ рядов распределения
- Анализ состояния финансовых рынков на основе методов нелинейной динамики
- Безработица - основные определения и измерение. Потоки, запасы, утечки, инъекции в модели