Головна |
Банківська справа | БЖД | Біографії | Біологія | Біохімія | Ботаніка та с/г | Будівництво | Військова кафедра | Географія | Геологія | Екологія | Економіка | Етика | Журналістика | Історія техніки | Історія | Комунікації | Кулінарія | Культурологія | Література | Маркетинг | Математика | Медицина | Менеджмент | Мистецтво | Моделювання | Музика | Наука і техніка | Педагогіка | Підприємництво | Політекономія | Промисловість | Психологія, педагогіка | Психологія | Радіоелектроніка | Реклама | Релігія | Різне | Сексологія | Соціологія | Спорт | Технологія | Транспорт | Фізика | Філософія | Фінанси | Фінансові науки | Хімія |
Недержавне середню професійну освітню установу «ФІНАНСОВО-ЕКОНОМІЧНИЙ КОЛЕДЖ»
курсова РОБОТА
з дисципліни Математичні методи
Тема: Лінійне програмування
Виконав (а) студент (ка) курсу, групи ПО-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] 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]) {Висновок значень цільової функції}
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]) BEGIN
IF X [I, J] <0 THEN Z: = ROUND (X [I, J]);
IF ABS (Z-X [I, J]) 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] 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]) 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]) 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. рятувальні засоби індивідуальні