Головна
Банківська справа  |  БЖД  |  Біографії  |  Біологія  |  Біохімія  |  Ботаніка та с/г  |  Будівництво  |  Військова кафедра  |  Географія  |  Геологія  |  Екологія  |  Економіка  |  Етика  |  Журналістика  |  Історія техніки  |  Історія  |  Комунікації  |  Кулінарія  |  Культурологія  |  Література  |  Маркетинг  |  Математика  |  Медицина  |  Менеджмент  |  Мистецтво  |  Моделювання  |  Музика  |  Наука і техніка  |  Педагогіка  |  Підприємництво  |  Політекономія  |  Промисловість  |  Психологія, педагогіка  |  Психологія  |  Радіоелектроніка  |  Реклама  |  Релігія  |  Різне  |  Сексологія  |  Соціологія  |  Спорт  |  Технологія  |  Транспорт  |  Фізика  |  Філософія  |  Фінанси  |  Фінансові науки  |  Хімія

Лінійне програмування - Математика

Недержавне середню професійну освітню установу «ФІНАНСОВО-ЕКОНОМІЧНИЙ КОЛЕДЖ»

курсова РОБОТА

з дисципліни Математичні методи

Тема: Лінійне програмування

Виконав (а) студент (ка) курсу, групи ПО-27 ЗС

Якушева Ольга Сергіївна

прізвище ім'я по батькові

Керівник роботи Груздева Олена Юріївна

вчений ступінь, звання, прізвище та ініціали

Зміст

Введення

Теоретична частина

Математичне рішення задачі

Висновок

Список використаної літератури

Додаток №1 (Excel)

Додаток №2 (Pascal)

Введення

Математичне програмування - область прикладної математики, що поєднує різні мат.методи і дисципліни.

Методи:

1. Математичне програмування.

2. Диференціальні та різницеві рівняння.

3. Теорія ігор.

4. Теорія рішень і т.д.

Класичні задачі дослідження операцій:

- Завдання дієти (задача про раціон).

- Завдання заміни (динамічне програмування).

- Завдання комівояжера (динамічне програмування).

- Розподільні завдання.

- Задача про призначення.

- Завдання про розміщення складів.

- Завдання про розкрої (лінійне програмування).

- Завдання пошуку.

- Теорія розкладів (метод дискретного програмування).

- Управління запасами (лінійне програмування).

- Завдання масового обслуговування.

Методи математичного програмування:

1. Лінійного програмування.

2. Не лінійне програмування.

3. Динамічне програмування.

4. Алгоритми на графах.

5. Система масового обслуговування (СМО).

6. Методи прогнозування.

7. Імітаційне прогнозування.

8. Теорія ігор.

9. Теорія прийняття рішень.

Теоретична частина

Розглянемо один з основних методів - лінійне програмування.

Лінійне програмування (далі ЛП) - завдання, в яких критерій оптимальності задається у вигляді лінійної форми від вхідних у нього змінних, на ці змінні накладаються обмеження у вигляді лінійних рівнянь або лінійних нерівностей.

Основні завдання ЛП:

u Завдання оптимізації міжгалузевих потоків.

u Транспортні задачі.

u Детальніше поговоримо про задачу про оптимальний випуск продукції.

Потрібно скласти такий план випуску продукції, який був би технологічно здійснений за наявними ресурсів всіх видів, задовольняв би заданим обмеженням на випуску кожного виду продукції і в той же час приносив найбільший прибуток підприємству.

Математична модель будь-якої задачі лінійного програмування включає в себе:

- Максимум або мінімум цільової функції (критерій оптимальності);

- Систему обмежень у формі лінійних рівнянь і нерівностей;

- Вимога невід'ємності змінних.

Для вирішення завдань ЛЗ використовують графічний метод і симплекс-метод.

Математичне рішення задачі

У загальному вигляді задачу лінійного програмування можна представити таким чином:

Алгоритми симплекса-методу дозволяють також встановити, чи є задача ЛП вирішуваною.

Розглянемо задачу лінійного програмування симплекс методом. Підприємство має ресурсами сировини, робочої силою і обладнанням, необхідним для виробництва будь-якого з трьох видів вироблених товарів 1, 2, 3. Витрати ресурсів на виготовлення одиниці даного виду товарів; прибуток, одержуваний від реалізації одиниці товару, а також запаси ресурсів вказані в таблиці.

 Вид ресурсу

 Витрати ресурсу на одиницю товару

 Запас ресурсу

 Товар 1

 Товар 2

 Товар 3

 Сировина, кг.

4

8

4

 120

 Робоча сила, ч.

6

2

3

 160

 Обладнання, верстато-год.

2

2

4

 400

 Прибуток

 10

8

6

Визначити який асортимент товару треба випускати, щоб прибуток був максимальним.

Позначимо Товар 1 як х1, Товар 2 - х2, Товар 3 - х3.

Z = 10х1 + 8х2 + 6х3

Вирішимо завдання симплекс методом.

Математична модель повинна бути в канонічній формі, тобто всі обмеження у вигляді нерівностей.

4x1 + 8x2 + 4x3? 120

6x1 + 2x2 + 3x3? 160

2x1 + 2x2 + 4x3? 400

Введемо нові змінні x4, x5, x6.

4x1 + 8x2 + 4x3 + x4? 120

6x1 + 2x2 + 3x3 + x5? 160

2x1 + 2x2 + 4x3 + x6? 400

Знаходимо вихідні опорні рішення і перевіряємо на оптимальність, для цього заповнюємо симплексну таблицю.

 Ключовий елемент

I опорне рішення.

x1 = 0, x2 = 0, x3 = 0, x4 = 120, x5 = 160, x6 = 400, Z = 0.

Якщо рішення не оптимально, будуємо другий симплекс-таблицю.

Знаходимо ключовий елемент: вибираємо стовпець з найбільшою за модулем негативною оцінкою, для цього шпальти знаходимо bi / xijі вибираємо мінімальне значення, тобто вибираємо рядок, на перетині вибраного стовпця і рядка визначається ключовий елемент;

Ключовий елемент знаходиться на перетині шпальти х1і рядки х5, тобто міняємо їх місцями. Вільні змінні x5, x2, x3; базисні змінні x1, x4, x6.

У другій симплекс-таблиці переписуємо ключову рядок, розділивши її на ключовий елемент, заповнюємо базисні стовпці, інші коефіцієнти таблиці знаходимо за правилом прямокутника;

Отримуємо нове опорне рішення і перевіряємо його на оптимальність,

 Ключовий

 елемент

II опорне рішення.

x1 = 26,67, x2 = 0, x3 = 0, x4 = 13,33, x5 = 0, x6 = 346,67, Z = 266,67.

Дане рішення не є оптимальним, тому в останньому рядку симплекс-таблиці знаходиться негативне число - будуємо третю симплекс-таблицю.

Ключовий елемент знаходиться на перетині шпальти х2і рядки х4, тобто міняємо їх місцями. Вільні змінні x4, x3, x5; базисні змінні x2, x1, x6.

III опорне рішення.

x1 = 26, x2 = 2, x3 = 0, x4 = 0, x5 = 0, x6 = 344, Z = 276.

Третє опорне рішення є оптимальним, оскільки останній рядок симплекс таблиці містить тільки позитивні елементи.

Підставляємо в лінійну функцію Z = 10 * 26 + 8 * 2 + 6 * 0 = 276.

Оптимально проводити Товар 1 - у кількості 26, Товар 2 - у кількості 2 і Товар 3 - у кількості 0.

Запрограмуємо в MS Office Excel (Додаток № 1) і в Pascal (Пріложеніе№2). Дані та умови сформовані раніше.

Висновок

Незважаючи на те, що симплекс-метод є досить ефективним алгоритмом, що показав гарні результати при вирішенні прикладних задач ЛП, він є алгоритмом з експоненційної складністю. Причина цього полягає в комбинаторном характері симплекс-методу, послідовно перебирає вершини багатогранника допустимих рішень при пошуку оптимального рішення. Тим не менше, сам факт полиномиальной складності завдань привів до створення цілого класу ефективних алгоритмів ЛП - методів внутрішньої точки, першим з яких був алгоритм Н. Кармаркара, запропонований в 1984 р Метод внутрішніх точок, який, на відміну від симплекс-методу, обходить точки з внутрішньої частини області допустимих значень, використовує методи логарифмічних бар'єрних функцій нелінійного програмування, розроблені в 60-х рр. Фіак (Fiacco) і Маккормік (McCormick). Перший поліноміальний алгоритм, метод еліпсоїдів, був запропонований в 1979 р радянським математиком Л. Хачіяном, дозволивши таким чином проблему, довгий час залишалася невирішеною. Метод еліпсоїдів має зовсім іншу, некомбінаторную, природу, ніж симплекс-метод. Однак в обчислювальному плані цей метод виявився неперспективним.

Список використаної літератури

- А.І.Ларіонов, Т.І.Юрченко "Економіко-математичні методи в плануванні: Підручник - М .: Висш.школа, 1984

- Томас Х. Кормен та ін. Глава 29. Лінійне програмування // Алгоритми: побудова й аналіз = INTRODUCTION TO ALGORITHMS. - 2-е вид. - М .: «Вільямс», 2006.

- В.І. Бодров, Т.Я. Лазарєва, Ю.Ф. Мартем'янов «Математичні методи прийняття рішень», Видавництво ТДТУ, 2004

- Вершик А. М. «O Л. В. Канторович та лінійному програмуванні»

- Большакова І. В., Кураленко М. В. «Лінійне програмування. Навчально-методичний посібник до контрольної роботи ».

 Додаток №1

 У правій частині записуємо запас ресурсу.

 Змінні

 x1

 x2

 x3

 значення

 26

2

 0 ЦФ

 коеф. ЦФ 10 8 6

 276

 Обмеження лев.часть знак прав.часть

 раб.сіла, ч. 4 8 квітня

 120 ? 120

 сировина, кг. 6 Перша 2 3

 160 ? 160

 обладнання, верстато-год. 2 2 квітня

 56 ? 400

Додаток №2

PROGRAM SIMPLEX_METOD;

USES CRT;

LABEL ZN, ST, ELL, _END;

TYPE MAS = ARRAY [1..30] OF REAL;

MASB = ARRAY [1..30] OF STRING [3];

MASX = ARRAY [1..30,1..30] OF REAL;

VAR Fo, FunctPr, B, H, Hnew, C, Cnew, CPr, CPrnew, FX: MAS;

X, Xnew: MASX;

BS, Bvsp, ZNAC: MASB;

MIN, I1, I, J, Kx, Ky, Kit, NachKell, NachY, K_st: INTEGER;

PriznacY, KLstr, KLst, ErrCode, Dop_X: INTEGER;

P, P1, Mo, F0, Epsilon, Z: REAL;

VSP, S, PrGomory: STRING;

F: TEXT;

DPx, DPy, Fm, Kell, Kstr: INTEGER;

{Функція створення індексів}

FUNCTION SIMVB (V: INTEGER; S: CHAR): STRING;

VAR M, Z: STRING;

BEGIN

STR (V, M);

Z: = S + M;

SIMVB: = Z;

END;

{Процедура запису даних у файл}

PROCEDURE SAVE (X1: REAL; K: STRING; Mstr: INTEGER);

VAR V: STRING;

BEGIN

ASSIGN (F, 'SIMPLEX.DAT');

APPEND (F);

CASE Mstr OF

0: WRITELN (F, '');

1: BEGIN

IF K = '' THEN STR (X1: 1: 0, V) ELSE STR (X1: 10: 4, V);

WRITE (F, V);

WRITE (F, '');

END;

2: WRITE (F, K);

3: WRITELN (F, K);

END;

CLOSE (F);

END;

{Визначення додаткових змінних}

PROCEDURE DOP_PER;

BEGIN

IF ZNAC [I1] = '=' THEN

BEGIN

Kell: = Kell + 1; Bvsp [Kell]: = SIMVB (DPy, 'Y');

DPy: = DPy + 1;

Xnew [I1, Kell]: = 1;

IF Fm = 1 THEN FX [Kell]: = - 1 ELSE FX [Kell]: = 1;

FunctPr [Kell]: = 1;

FOR I: = 1 TO Kstr DO

IF I I1 THEN Xnew [I, Kell]: = 0;

END;

IF ZNAC [I1] = '> =' THEN

BEGIN

Kell: = Kell + 1; Bvsp [Kell]: = SIMVB (DPx, 'X');

DPx: = DPx + 1; Dop_X: = Dop_X + 1;

Xnew [I1, Kell]: = - 1; FX [Kell]: = 0;

FOR I: = 1 TO Kstr DO

IF I I1 THEN Xnew [I, Kell]: = 0;

Kell: = Kell + 1; Bvsp [Kell]: = SIMVB (DPy, 'Y');

DPy: = DPy + 1;

Xnew [I1, Kell]: = 1;

IF Fm = 1 THEN FX [Kell]: = - 1 ELSE FX [Kell]: = 1;

FunctPr [Kell]: = 1;

FOR I: = 1 TO Kstr DO

IF I I1 THEN Xnew [I, Kell]: = 0;

END;

IF ZNAC [I1] = '<=' THEN

BEGIN

Kell: = Kell + 1; Bvsp [Kell]: = SIMVB (DPx, 'X');

DPx: = DPx + 1; Dop_X: = Dop_X + 1;

Xnew [I1, Kell]: = 1; FX [Kell]: = 0;

FOR I: = 1 TO Kstr DO

IF I I1 THEN Xnew [I, Kell]: = 0;

END;

END;

{Процедура скорочення Y}

PROCEDURE SOKR;

VAR P: INTEGER;

BEGIN

Kell: = Kell-1;

FOR P: = NachKell + DOP_X TO Kell DO

IF Bvsp [P] = BS [KLstr] THEN BEGIN

FOR J: = P TO Kell DO

Bvsp [J]: = Bvsp [J + 1];

FunctPr [J]: = FunctPr [J + 1];

Fx [J]: = Fx [J + 1];

FOR I: = 1 TO Kstr DO

Xnew [I, J]: = Xnew [I, J + 1]

END;

END;

{Процедура, яка виконує метод Гоморі}

PROCEDURE GOMORY;

VAR MAX, Z: REAL;

BEGIN

KLstr: = 1;

MAX: = H [1] -INT (H [1]);

FOR I1: = 2 TO Kstr DO

IF (H [I1] -INT (H [I1]))> = MAX THEN BEGIN MAX: = H [I1]; KLstr: = I1; END;

Kstr: = Kstr + 1;

Hnew [Kstr]: = H [KLstr] -INT (H [KLstr]);

FOR I1: = 1 TO Kell DO

BEGIN

Z: = INT (X [KLstr, I1]);

IF X [KLstr, I1] <0 THEN Z: = Z-1;

Xnew [Kstr, I1]: = X [KLstr, I1] -Z;

END;

ZNAC [Kstr]: = '> =';

END;

{Процедура, яка виконує Симплекс метод}

PROCEDURE SIMPLEX;

LABEL POVZNAC, NACH;

BEGIN

{Підготовка до введення даних}

NachKell: = Kell;

DPx: = Kell + 1; DPy: = 1;

Kx: = 1; Ky: = 4;

Epsilon: = 0.00001;

CLRSCR;

WRITELN ('Введіть систему рівнянь:');

WRITELN ('(коефіцієнти при всіх Х, знак і вільні члени)');

{Введення даних}

FOR I: = 1 TO Kstr DO

BEGIN

POVZNAC:

WRITELN ('Введіть', I, '- е рівняння:');

{Введення коефіцієнтів при X в I-том рівнянні}

FOR J: = 1 TO Kell DO

BEGIN

GOTOXY (Kx, Ky); Kx: = Kx + 6;

READLN (Xnew [I, J]);

END;

{Введення знака в I-том рівнянні}

Kx: = Kx + 6; GOTOXY (Kx, Ky); READLN (ZNAC [i]);

{Перевірка введеного знака на правильність}

IF (ZNAC [i] '> =') AND (ZNAC [i] '=') AND (ZNAC [i] '<=')

THEN BEGIN

WRITELN ('Неправильно заданий знак');

Ky: = Ky + 3; Kx: = 1;

GOTO POVZNAC;

END;

IF (ZNAC [i] = '=') OR (ZNAC [i] = '> =') THEN PriznacY: = 1;

{Введення вільного члена в I-том рівнянні}

Kx: = Kx + 6; GOTOXY (Kx, Ky); READ (B [i]);

Kx: = 1;

Ky: = Ky + 2;

END;

WRITELN ('Введіть коефіцієнти при Х в цільової функції:');

{Введення коефіцієнтів при Х в цільової функції}

FOR J: = 1 TO Kell DO

BEGIN

GOTOXY (Kx, Ky); Kx: = Kx + 6;

READ (FX [J]);

End;

{Підготовка індексації X}

FOR J: = 1 TO Kell DO

Bvsp [J]: = SIMVB (J, 'X');

{Визначення додаткових змінних}

FOR I1: = 1 TO Kstr DO

DOP_PER;

{Заміна оптимальної функції з MAX на MIN при наявності

в базисі Y-ков якщо йде дослідження на мінімум}

MIN: = 0;

IF (Fm = 1) AND (PriznacY = 1) THEN

BEGIN

MIN: = Fm; Fm: = 2;

FOR J: = 1 TO Kell DO

FX [J]: = - FX [J];

END;

{Сортування додаткових змінних за індексом}

FOR I1: = NachKell + 1 TO Kell DO

FOR J: = I1 + 1 TO Kell DO

IF Bvsp [J]BEGIN

VSP: = Bvsp [J]; Bvsp [J]: = Bvsp [I1]; Bvsp [I1]: = VSP;

P: = FX [J]; FX [J]: = FX [I1]; FX [I1]: = P;

P: = FunctPr [J]; FunctPr [J]: = FunctPr [I1]; FunctPr [I1]: = P;

FOR I: = 1 TO Kstr DO

BEGIN

P: = Xnew [I, I1]; Xnew [I, I1]: = Xnew [I, J]; Xnew [I, J]: = P;

END;

END;

Kit: = 1;

CLRSCR;

{Підготовка стовпців C, B, H}

FOR I: = 1 TO Kstr DO

BEGIN

Hnew [i]: = B [i];

FOR J: = NachKell + 1 TO Kell DO

IF Xnew [I, J] = 1 THEN

BEGIN

BS [i]: = Bvsp [J];

Cnew [i]: = FX [J];

CPrnew [i]: = FunctPr [J];

END;

END;

NACH :;

REPEAT

PriznacY: = 0;

{Передача даних в вихідні змінні c обнуленням

чисел, модулю менших ніж 0.00001}

FOR I: = 1 TO Kstr DO

BEGIN

IF INT (10000 * Hnew [i]) = 0 THEN H [i]: = + 0 ELSE H [i]: = Hnew [i];

C [i]: = Cnew [i];

CPr [i]: = CPrnew [i];

IF BS [i] [1] = 'Y' THEN PriznacY: = 1;

FOR J: = 1 TO Kell DO

IF INT (10000 * Xnew [I, J]) = 0 THEN X [I, J]: = + 0 ELSE X [I, J]: = Xnew [I, J];

END;

{Обнулення і висновок індексації елементів індексного рядка}

SAVE (0, 'C Б H', 2);

FOR J: = 1 TO Kell DO

BEGIN

SAVE (0, Bvsp [J], 2);

P1: = LENGTH (Bvsp [J]);

IF P1 = 2 THEN SAVE (0, '', 2);

SAVE (0, '', 2);

Fo [J]: = 0;

END;

SAVE (0, '', 0);

{Висновок Симплекс-таблиці}

P1: = 0;

FOR I: = 1 TO Kstr DO

BEGIN

IF CPr [i] = 1 THEN

IF C [i] <0 THEN SAVE (0, '- M', 2)

ELSE SAVE (0, '+ M', 2)

ELSE SAVE (C [i], '', 1);

SAVE (0, BS [i], 2);

P1: = LENGTH (BS [i]); IF P1 = 2 THEN SAVE (0, '', 2);

SAVE (0, '', 2); SAVE (H [i], '', 1);

FOR J: = 1 TO Kell DO

SAVE (X [I, J], '', 1);

SAVE (0, '', 0);

END;

{Обчислення значень в індексному рядку}

F0: = 0;

FOR J: = 1 TO Kell DO

Fo [J]: = 0;

FOR I1: = 1 TO Kstr DO

BEGIN

IF PriznacY = 1 THEN

IF BS [I1] [1] = 'Y' THEN

BEGIN

F0: = F0 + H [I1];

FOR J: = 1 TO Kell DO

Fo [J]: = Fo [J] + X [I1, J];

END;

IF PriznacY = 0 THEN

BEGIN

F0: = F0 + H [I1] * C [I1];

FOR J: = 1 TO Kell DO

Fo [J]: = Fo [J] + C [I1] * X [I1, J];

END;

FOR J: = 1 TO Kell DO

IF Bvsp [J] [1] = 'Y' THEN Fo [J]: = + 0

ELSE IF ABS (Fo [J])END;

{Висновок значень цільової функції}

SAVE (0, '', 2); SAVE (F0, '', 1);

FOR J: = 1 TO Kell DO

BEGIN

IF PriznacY 1 THEN Fo [J]: = Fo [J] -FX [J];

SAVE (Fo [J], '', 1);

END;

SAVE (0, '', 0);

{Перевірка умови оптимальності}

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])FOR J: = 1 TO Kell DO

BEGIN

IF X [I, J] <0 THEN Z: = ROUND (X [I, J]);

IF ABS (Z-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]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])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])FOR I: = 1 TO Kstr DO

IF B [i]> = 0 THEN BEGIN

IF B [i]

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.

 Вихідні дані

Z = 10х1 + 8х2 + 6х3

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
Космос і світобудова
Космос як суперголограмма. "Навіть істинні думки стоять небагато чого, поки хто-небудь не з'єднає їх зв'язком причинного міркування". Платон. Апріорно (тобто до досвіду) будемо вважати, що Реальна Дійсність навколишнього світу є суперголограмма, в якій минуле, теперішній час і майбутнє

Великобританія в період 1918-1920 рр.
План реферату: 1. Форма правління і державний пристрій Великобританії 2. Спад економіки 3. Військово-політичне панування 1. Форма правління і державний пристрій Великобританії Великобританія - парламентська монархія на чолі з королевою. Законодавчий орган - двопалатний парламент (Монарх +

Основи безпеки життєдіяльності
Є.С. Бажанова ОСНОВИ БЕЗПЕКИ ЖИТТЄДІЯЛЬНОСТІ Навчальний посібник Самара Самарський державний технічний університет 2009 Кафедра «Безпека життєдіяльності» Є.С. Бажанова ОСНОВИ БЕЗПЕКИ ЖИТТЄДІЯЛЬНОСТІ Затверджено редакційно-видавничим радою університету як навчальний посібник Самара Самарський

Застосування технології солянокислотного обробки установок ЕЦН на Мішкінський родовищі
Федеральне агентство з освіти ГОУ ВПО "Удмуртский Державний Університет" Нафтовий факультет Курсовий проект За курсом: "Розробка та експлуатація нафтових і газових родовищ" На тему: "Застосування технології солянокислотного обробки установок ЕЦН на Мішкінський родовищі"

Проектування п'ятиповерхового житлового будинку
Анотація Виконаний курсовий проект на 5-ти поверховий 25-ти квартирний житловий будинок. Складається з пояснювальної записки виконаної на 15-ти аркушах та графічної частини на 2-х аркушах формату А1 Пояснювальна записка містить: ? об'ємно-планувальні рішення; ? конструктивні рішення; ? теплотехнічний

Рішення задач з нормальними законами в системі "Статистика"
ЗМІСТ Введення 1. Дискримінантний аналіз як розділ багатовимірного статистичного аналізу 1.1 Методи класифікації з навчанням 1.2 Лінійний дискримінантний аналіз2. Дискримінантний аналіз при нормальному законі розподілу показників 3. Приклади розв'язання задач дискримінантного аналізу 3.1 Застосування

Організація роботи судна
1. Основні ТТД судна 2. Навігаційні вогні 3. Суднові тривоги 4. Суднові розкладу 5. Розклад по завідування 6. Розклад по швартових операцій 7. Розклад по боротьбі з обмерзанням 8. Розклад по постановці на якір 9. Обов'язки помічника капітана з радіоелектроніки 10. рятувальні засоби індивідуальні

© 2014-2022  8ref.com - українські реферати