Главная > Математика > Рішення задач лінійної оптимізації симплекс - методом

Рішення задач лінійної оптимізації симплекс - методом


25-01-2012, 10:31. Разместил: tester1

Курсова робота з дисципліни В«Чисельні методи оптимізації В»

Виконав: ст.гр.4408 Калінкін О.О.

Казанський Державний Університет ім. А.Н. Туполєва.

р. Казань 2001р.

1. Постановка завдання

1.1. Фізична (технічна) постановка завдання

Нафтопереробний завод отримує чотири напівфабрикату:

400 тис. л. алкілат;

250 тис. л. крекінг-бензину;

350 тис. л. бензину прямої перегонки;

250 тис. л. ізопентона;

В результаті змішування цих чотирьох компонентів в різних пропорціях утворюються три сорти авіаційного бензину:

Бензин А - 2: 3: 5: 2;

Бензин В - 3: 1: 2: 1;

Бензин С - 2: 2: 1: 3;

Вартість 1 тис.л. зазначених сортів бензину:

Бензин А - 120 руб.

Бензин Б - 100 руб.

Бензин С - 150 руб.

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

Бензину кожного сорту має вироблятися не менш 300 тис.. Л.

невикористані крекінг бензину повинно залишитися не більше 50 тис.л.

Зведена таблиця умов завдання:

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

Обсяг ресурсів

(тис. л)

А В З алкілат

400 Крекінг-бензин

<p>

250 Бензин прямої перегонки

300 Ізопентат

250 Ціна бензину (рублів за 1 тис.л.) 120 100 150

1.2. Математична постановка задачі

Виходячи з умов завдання, необхідно максимізувати наступну цільову функцію:

(1.2.1)

при обмеженнях

(1.2.2)

, де

У цих виразах:

- обсяги бензину А-го, У-го і С-го сорту відповідно.

Тоді

об'ємна частка першої компоненти (алкілат) в бензині А.

об'ємна частка першої компоненти (алкілат) в бензині В.

об'ємна частка першої компоненти (алкілат) в бензині С.

і т.д.

Цільова функція виражає вартість всієї продукції в залежності від обсягу виробленого бензину кожного сорту. Таким чином, для отримання максимальної вартості продукції необхідно максимізувати цільову функцію (1.2.1) з дотриманням усіх умов завдання, які накладають обмеження (1.2.2) на.

2. Приведення завдання до канонічної форми

Задача лінійного програмування записана в канонічній формі, якщо вона формулюється таким чином.

Потрібно знайти вектор, доставляє максимум лінійної формі

(2.1)

при умовах

(2.2)

(2.3)

де

Перепишемо вихідну завдання (1.2.1) - (1.2.2):

(2.4)

при обмеженнях

(2.5)

, де (2.6)

У канонічній формі задачі лінійного програмування необхідно, щоб всі компоненти шуканого вектора Х були невід'ємними, а всі інші обмеження записувалися у вигляді рівнянь. Тобто в задачі обов'язково будуть присутні умови виду (2.3) і 8 рівнянь виду (2.2), обумовлених нерівностями (2.5), (2.6).

Число обмежень задачі, що приводять до рівнянь (2.2) можна зменшити, якщо перед приведенням вихідної задачі (2.4) - (2.6) до канонічної формі ми перетворимо нерівності (2.6) до вигляду (2.3). Для цього перенесемо вільні члени правих частин нерівностей (2.6) в ліві частини. Таким чином, від старих змінних перейдемо до нових змінним, де:

, .

Висловимо тепер старі змінні через нові

, (2.7)

і підставимо їх у лінійну форму (2.4) і в нерівності (2.5), (2.6). Отримаємо

, де.

Розкриваючи дужки і враховуючи, що

(2.8),

можемо остаточно записати:

(2.9)

(2.10)

, де (2.11)

Шляхом нескладних перетворень задачу (1.2.1), (1.2.2) звели до задачі (2.9) - (2.11) з меншим числом обмежень.

Для запису нерівностей (2.10) у вигляді рівнянь введемо невід'ємні додаткові змінні, і задача (2.9) - (2.11) запишеться в наступній еквівалентній формі:

(2.12)

(2.13)

, де

Задача (2.12), (2.13) має канонічну форму.

3. Знаходження початкового опорного плану з допомогою L -завдання

Початковий опорний план задачі (2.1) - (2.3), записаної в канонічній формі, досить легко може бути знайдений за допомогою допоміжної задачі (L-задачи):

(3.1)

(3.2)

(3.3)

Початковий опорний план задачі (3.1) - (3.3) відомий. Він складається з компонент

і має одиничний базис Б == E.

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

Нехай - оптимальний опорний план допоміжної задачі. Тоді є опорним планом вихідної задачі. Дійсно, всі додаткові змінні. Значить, задовольняє умовам вихідної задачі, тобто є деяким планом завдання (2.12) - (2.13). За побудові план є також опорним.

3.1. Постановка L -завдання

Допоміжна завдання для знаходження початкового опорного плану задачі (2.12) - (2.13) в канонічній формі полягає в наступному.

Потрібно звернути у максимум

при умовах

, де.


розглядаючи в якості вихідного опорного плану план

Тут додавання лише однієї додаткової змінної (замість п'яти) обумовлено тим, що вихідна задача вже містить чотири одиничних вектора умов А 4, А 5, А 6, А 7.

3.2. Рішення L -завдання

Рішення L-задачи будемо проводити у відповідності з першим алгоритмом симплекс-методу (опис алгоритму наводиться в п.4). Складемо таблицю, відповідну вихідного опорному плану (0-й ітерації).

Т.к. Б 0 = - базис, відповідний відомому опорному плану, є одиничною матрицею, то коефіцієнти розкладу векторів А j по базису Б 0

.

Значення лінійної форми і оцінки для заповнення (m +1)-й рядки таблиці визначаються наступними співвідношеннями:

,

.

Звідси отримаємо:

;

;

;

...

.

Весь процес вирішення завдання приведений в табл. 3.2.1, яка складається з 2 частин, що відповідають 0-й (вихідна таблиця) і 1-й ітерація.

Заповнюємо таблицю 0-й ітерації.

Серед оцінок є негативні. Значить, вихідний опорний план не є оптимальним. Перей...демо до нового базису. У базис буде введено вектор А 1 з найменшою оцінкою . Значення t обчислюються для всіх позицій стовпця t (т.к. все елементи дозволяючого стовпця позитивні). Найменший елемент досягається на п'ятій позиції базису. Значить, п'ятий рядок є роздільною рядком, і вектор А 9 підлягає виключенню з базису.

Складемо таблицю, що відповідає першій ітерації.

У стовпці Б х , в п'ятій позиції базису місце вектора А 9 займає вектор А 1 . Відповідний йому коефіцієнт лінійної форми З 41 = 0 поміщаємо в стовпець С х . Головна частина таблиці 1 заповнюється за даними таблиці 0 згідно з рекурентними формулами. Так як всі, то опорний план є вирішенням L-задачи. Найбільше значення лінійної форми одно.

Таблиця 3.2.1

3.3. Формування початкового опорного плану вихідної задачі лінійного програмування з оптимального плану L -завдання

Оскільки, де - оптимальний опорний план L-задачи, то є початковим опорним планом вихідної задачі (2.12) - (2.13).

4. Рішення вихідної задачі I алгоритмом симплекс-методу

Опис I алгоритму

Симплекс-метод дозволяє, відправляючись від деякого вихідного опорного плану і поступово покращуючи його, отримати через кінцеве число ітерацій оптимальний план або переконатися в нерозв'язності задачі. Кожній ітерації відповідає перехід від однієї таблиці алгоритму до наступної. Таблиця, відповідає опорному плану в ОЅ-ї ітерації має вигляд табл. 4.1.

Таблиця 4.1

C

...

...

...

N

B

...

...

...

t 1

...

...

...

l

...

...

...

m

...

...

...

m +1 - -

...

...

...

-

Заповнення таблиці, відповідної вихідного опорного планом (0-й ітерації). Нехай деякий опорний план задачі (2.1) - (2.3) з базисом. Тоді - базисні компоненти, а - небазисних компоненти.

Обчислюємо коефіцієнти розкладання векторів А j по базису Б 0

(в випадку, якщо Б 0 є одиничною матрицею,)

і знаходимо оцінки. Далі визначаємо значення лінійної форми

Отримані результати записуємо в таблицю 4.1.

У першому стовпці N таблиці вказуються номери рядків. Номер першого m рядків збігаються з номерами позицій базису. У другому стовпці З х записуються коефіцієнти лінійної форми при базисних змінних. Стовпець Б х містить вектори базису. У стовпці В записуються базисні змінні опорного плану. Стовпці містять коефіцієнти розкладання відповідних векторів умов по векторах базису. Все вищесказане відноситься тільки до перших m рядків таблиці. Остання (m +1)-й рядок таблиці заповнюється послідовно значенням лінійної форми F і оцінками. Позиції таблиці, які не повинні заповнюватися, прокреслюються.

В результаті заповнена таблиця 0-й ітерації крім стовпця t.

Стовпці В, А 1 , ..., A n (Всі m +1 позицій) будемо називати головною частиною таблиці.

Порядок обчислень в окремій ітерації. Нехай ОЅ-я ітерація закінчена. В результаті заповнена таблиця ОЅ за винятком останнього стовпця t.

Кожна ітерація складається з двох етапів.

I етап: перевірка досліджуваного опорного плану на оптимальність.

Проглядається (m +1)-й рядок таблиці ОЅ. Якщо все, то опорний план, отриманий після ОЅ-й ітерації, є оптимальним (випадок 1), завершуємо вирішення задачі. Нехай тепер є негативні оцінки. Перевіряємо знаки елементів стовпців с. Наявність принаймні одного стовпця, для якого і все, свідчить про нерозв'язності задачі (випадок 2). Встановивши це, припиняємо обчислення.

Якщо в кожному стовпці, для якого, міститься хоча б один позитивний коефіцієнт, то опорний план є неоптимальним (випадок 3). Переходимо до II етапу.

II етап: побудова нового опорного плану з великим значенням лінійної форми.

Визначається вектор A k , який повинен бути введений в базис, з наступного умови

.

Після цього заповнюється останній стовпець таблиці ОЅ - стовпець t. У нього записуються відносини базисних змінних (елементи стовпця В) до відповідним складовим (елементи стовпця A k ). Т.ч. заповнюються тільки ті позиції, для яких. Якщо, то в позиції i стовпця t записується. Вектор базису, на якому досягається t 0 ,

,

підлягає виключенню з базису (якщо t 0 досягається на декількох векторах, то з базису виключається будь-який з них).

Стовпець A k , який відповідає вектору, запроваджуваному в базис, і l-й рядок, відповідна вектору, виключається з базису, називається відповідно дозволяючим стовпцем і роздільною рядком. Елемент, розташований на перетині розв'язного стовпця і роздільною рядки, називається що дозволяє елементом.

Після виділення дозволяє елемента заповнюється (Оќ +1)-я таблиця. У l-е позиції шпальт Б х , С х вносяться відповідно А до , С до , які в (ОЅ +1)-й таблиці позначаються як,. В інші позиції стовпців Б х , С х вносяться ті ж параметри, що і в таблиці ОЅ.

Далі заповнюється головна... частина (ОЅ +1)-й таблиці. Перш за все відбувається заповнення її l-й рядки відповідно до рекурентною формулою

.

Рекурентна формула для заповнення i-го рядка (Оќ +1)-й таблиці має вигляд

.

Тут

.

Заповнення головній частині (ОЅ +1)-й таблиці завершує (ОЅ +1)-ю ітерацію. Подальші ітерації проводяться аналогічно. Обчислення тривають до тих пір, поки не буде отримано оптимальний план або буде встановлено, що досліджувана завдання нерозв'язна.

Рішення вихідної задачі

Весь процес розв'язання вихідної задачі (2.12) - (2.13) наведено в табл. 4.2.

Заповнення таблиці, відповідає 0-й ітерації, відбувається на основі табл. 3.2.1 (див. ітерацію 1) наступним чином. Головна частину таблиці 0-й ітерації вихідної завдання (за винятком (m +1)-й рядки) повністю повторює головну частину таблиці заключній ітерації L-задачи без стовпця А 9 . Також без змін залишається стовпець базисних векторів Б х . Рядок З коефіцієнтів лінійної форми вихідної задачі і стовпець С х коефіцієнтів при базисних змінних заповнюються виходячи з (2.12). З урахуванням нових коефіцієнтів З перераховуються значення лінійної форми F і оцінки.

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

Таблиця 4.2

Рішення вихідної задачі (2.12) - (2.13) отримано за 3 ітерації. Оптимальний план її дорівнює і.

Знайдене рішення задачі в канонічній формі (2.12) - (2.13) відповідає рішенню (4.1) загальної задачі лінійного програмування (2.9) - (2.11), записаної для нових змінних. Для загальної задачі з (2.9) випливає, що (4.2).

Повернемося до задачі (1.2.1), (1.2.2) зі старими змінними. Враховуючи (4.1) і (4.2) з (2.7) і (2.8) отримаємо

(4.3)

і

. (4.4)

Таким чином, для отримання максимальної ціни (142750 крб.) Всієї продукції необхідно провести:

450 тис.л. бензину А з напівфабрикатів в наступних кількостях:

Алкітата тис.л.

Крекінг-бензину тис.л.

Бензину прямої перегонки тис.л.

Ізопентона тис.л.

тис.л. бензину У з напівфабрикатів в таких кількостях:

Алкітата тис.л.

Крекінг-бензину тис.л.

Бензину прямої перегонки тис.л.

Ізопентона тис.л.

300 тис.л. бензину У з напівфабрикатів в наступних кількостях:

Алкітата тис.л.

Крекінг-бензину тис.л.

Бензину прямої перегонки тис.л.

Ізопентона тис.л.

5. Формування М-задачі

Далеко не завжди має сенс розділяти вирішення завдання лінійного програмування на два етапи - обчислення початкового опорного плану і визначення оптимального плану. Замість цього вирішується розширена завдання (М-задача). Вона має інші опорні плани (один з них завжди легко вказати), але ті ж рішення (оптимальні плани), що і вихідна задача.

Розглянемо поряд з вихідної завданням (2.1) - (2.3) в канонічній формі наступну розширену задачу (М-задачу):

(5.1)

(5.2)

. (5.3)

Тут М> 0 - достатньо велике число.

Початковий опорний план задачі (5.1) - (5.3) має вигляд

Змінні називаються штучними змінними.

Таким чином, вихідна задача лінійного програмування з невідомим заздалегідь початковим опорним планом зводиться до М-задачі, початковий опорний план якої відомий. У процесі вирішення цього розширеної задачі можна або обчислити оптимальний план задачі (2.1) - (2.3), або переконатися в її нерозв'язності, якщо виявляється нерозв'язною М-задача.

Відповідно до вищевикладеного маємо: потрібно вирішити задачу (2.12), (2.13), записану в канонічної формі. Введемо штучну неотрицательную змінну х 9 і розглянемо розширену М-задачу

(5.4)

при умовах

(5.5)

, де.

де М - як завгодно велика позитивна величина.

Як і в L-задаче, додавання тільки однієї штучної змінної (замість п'яти) обумовлено тим, що вихідна задача вже містить чотири одиничних вектора умов А 4, А 5, А 6, А 7.

6. Рішення М-задачі II алгоритмом симплекс-методу

Опис II алгоритму

Другий алгоритм (або метод зворотної матриці) симплекс методу заснований на іншому способі обчислення оцінок векторів умов А j , ніж у першому алгоритмі.

Розглядається задача лінійного програмування в канонічній формі (2.1) - (2.3). Нехай Х - опорний план з базисом. Всі параметри, необхідні для оцінки плану на оптимальність і переходу до кращому планом, можна отримати, перетворюючи від кроку до кроку елементи матриці.

Дійсно, знаючи зворотну матрицю, можна отримати базисні складові опорного плану:

і обчислити оцінки векторів умов щодо поточного базису

, (6.1)

попередньо визначивши вектор-рядок за формулою

або

. (6.2)

Тут - вектор-рядок з коефіцієнтів лінійної форми, що відповідають базисним змінним.

Оцінки дозволяють встановити оптимальність розглянутого опорного плану і визначити вектор А до , вводиться в базис. Коефіцієнти розкладання вектора А до по поточному базису обчислюються за формулою

.

Як і в I алгоритмі, вектор, який підлягає виключенню із базису, визначається величиною

.

Таким чином при другому алгоритмі на кожному кроці запам'ятовуються базисні компоненти, зворотна матриця, значення лінійної форми F (X) і вектор Y, відповідні поточному опорному плану Х. Елементи стовпців матриці зручно розглядати як коефіцієнти розкладання одиничних векторів по векторах базису. Рекурентні формули, що зв'язують параметри двох послідовних ітерацій

; (6.3)

. (6.3)

Тут

.

Результати обчислень зводяться в основні таблиці (Виду табл. 6.1) і допоміжну таблицю (виду табл. 6.2); стовпці В, е 1 , ..., Е m основних таблиць (все m +1 позицій) називають головною частиною цих таблиць. Стовпець А k - дозволяє стовпець, рядок l - роздільна рядок.

Таблиця 6.1 Таблиця 6.2

N

B

...

t N B

...

1

...

1

...

l

...

m

...

m +1 C

...

M

...

0

...

m +1 - -

...

- 1

...

2

...

... ... ... ... ... ...

Короткий опис алгоритму.

1. Нульова ітерація:

а) складається допоміжна табл. 6.2, в яку вносяться параметри завдання; додатковий рядок таблиці з номером ОЅ заповнюється по мірі виконання ОЅ-й ітерації;

б) складається основна табл. 6.1 з номером 0, в якої заповнює перші m рядків, за винятком останніх двох стовпців Аk і t. Елементи і визначаються скалярними творами (C x , e j ) і (C x , B) відповідно. Нульова ітерація закінчується заповненням нульової додаткового рядка допоміжної таблиці з оцінками.

2. (Оќ +1)-я ітерація.

Нехай ОЅ-я ітерація закінчена. В результаті заповнена ОЅ-я основна таблиця, за винятком двох останніх стовпців, і ОЅ-я додаткова рядок допоміжної таблиці. Проглядається ця рядок. Якщо всі, то опорний план - рішення задачі. Якщо хоча б одна, то в базис вводиться вектор А k з (зазвичай). Після цього заповнюється стовпець основної таблиці. У позицію (M +1) цього стовпця заноситься оцінка вектора А k . Інші елементи цього стовпця дорівнюють

.

Можливі два випадки:

все - задача нерозв'язна;

хоча б для одного i. У цьому випадку, також як і в першому алгоритмі, заповнюється стовпець (t) основної таблиці ОЅ, визначається дозволяючий елемент. Головна частина заповнюється по рекурентною формулою (6.3). Заповнюється (ОЅ +1)-я додаткова рядок допоміжної таблиці. На цьому закінчується (ОЅ +1)-я ітерація.

Рішення М-задачі

Таблиця 6.3

Таблиця 6.4

Задача (5.4), (5.5) має опорний план Х 0 = (0, 0, 0,,,,, 0,) з базисом. Отже,. Процес рішення М-задачі другий алгоритм приведений в основний табл. 6.3 і допоміжної табл. 6.4.

Рішення М-задачі отримано за 5 кроків. Оптимальний план її дорівнює і. В оптимальному плані М-задачі штучна змінна х 9 = 0, тому - рішення задачі (2.12), (2.13) і.

Остаточне рішення задачі визначення плану змішування компонентів повністю повторює рішення, розглянуте в завершальній частини п.4 (див. стор.11-12).

7. Формування двоїстої задачі

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

Позначимо

; ;; ; (7.1)

Тепер вихідна задача (2.1) - (2.3) в канонічної формі може бути записана в матричному вигляді наступним чином.

Потрібно визначити вектор, обертаючий в максимум

. (7.2)

при умовах

AX = B; (7.3)

. (7.4)

Тоді двоїста задача - визначити вектор, обертаючий в мінімум

f (Y) = YB (7.5)

при умовах

. (7.6)

Транспоніруя обидві частини нерівності (7.6), записаного у вигляді рядка, і враховуючи, отримаємо

. (7.7)

Відзначимо, що у двоїстої завданню перемінні y i можуть бути і негативними.

Розглянемо в якості вихідної завдання (2.12), (2.13). З урахуванням (7.1) та (7.7) запишемо

С = (120, 100, 150, 0, 0, 0, 0, 0), B = (,, ,, ),

.

Двоїста задача має вигляд

; (7.8)

(7.9)

8. Формування оптимального рішення двоїстої завдання на основі теореми про подвійність

Виявляється, що для задач (7.2) - (7.4) і (7.5), (7.6), званих двоїстої парою, справедлива наступна теорема.

Теорема (перша теорема про подвійність). Якщо одна із завдань двоїстої пари (7.2) - (7.4) і (7.5), (7.6) має рішення, то інша задача також залагодити. При цьому для будь-яких оптимальних планів і (тут М х , М у - Безлічі планів відповідно прямої і двоїстої задач) завдань (7.2) - (7.4) і (7.5), (7.6) має місце рівність

.

Якщо лінійна форма одній з завдань не обмежена (для F (X) - Зверху, для f (Y) - знизу), то інша задача не має жодного плану.

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

Слідство. Якщо вектор є оптимальним опорним планом задачі (7.2) - (7.4), то вектор (8.1), є оптимальним опорним планом задачі (7.5), (7.6).

Варто відзначити, що в ході вирішення вихідної задачі другий алгоритм, при кожному кроці обчислюється вектор. І якщо Х - оптимальний опорний план задачі (7.2) - (7.4), то в (m +1)-му рядку, відповідної основній таблиці, знаходиться рішення задачі (7.5), (7.6).

Нехай двоїста задача має вигляд (7.8), (7.9).

Так як вихідна задача (2.12), (2.13) має рішення, то на підставі розглянутої теореми про подвійність двоїста задача також можна залагодити.

Оптимальним опорним планом вихідної є (див. п.4, п.6). При цьому

;

;.

Обчислимо

.

На підставі слідства з теореми про подвійності можна зробити висновок, що є оптимальним планом двоїстої задачі, при якому. Аналізуючи (m +1)-й рядок основний таблиці (див. табл. 6.3, крок 5), можна переконатися в тому, що оптимальний план двоїстої задачі, сформований на основі теореми про двоїстості, збігається з оптимальним планом, знайденому при вирішенні вихідної задачі другий алгоритм симплекс-методу. Це говорить про тому, що оптимальний план задачі (7.8) - (7.9) знайдено вірно.

9. Аналіз результатів і висновки

У даній роботі розглядаються два способи вирішення вихідної задачі лінійного програмування.

Перший полягає в тому, що спочатку вирішується допоміжна завдання (L-задача), що дозволяє побудувати початковий опорний план, потім на основі цього знайденого плану вирішується вихідна задача (Визначається її оптимальний план). Другий спосіб є об'єднанням двох етап...ів і полягає у вирішенні розширеної задачі (M-завдання), також приводить до знаходження оптимального плану вихідної задачі.

Обчислювальну основу цих двох способів вирішення становлять відповідно перший і другий алгоритми симплекс-методу. Один з параметрів, за яким може бути оцінений будь ітераційний алгоритм - кількість кроків, що приводять до вирішення завдання або встановлення її нерозв'язності. Для даної задачі найбільш ефективним методом виявився перший метод (L-задача + Вихідна задача), тому він привів до вирішення за 4 кроки, а другий метод (M-завдання) за 5 кроків. Різниця в числі кроків, ймовірно, обумовлена ​​неоднозначність вибору дозволяє елемента у вихідній таблиці L-задачи (3.2.1).

Порівняння кількості обчислень на кожній ітерації приводить до наступних оціночним результатами розглянутих алгоритмів. Переважаюча частина обчислень на кожному кроці алгоритмів визначається розмірністю головній частині таблиці (у першому алгоритмі) або основної таблиці (у другому алгоритмі). У першому випадку вона має розмірність (m +1) x (n +1), у другому - (M +1) x (m +1). Навіть враховуючи, що другий алгоритм вимагає побудови допоміжної таблиці, він виявляється більш компактним.

Ще одне безперечне достоїнство другий алгоритм полягає у можливості визначення оптимального плану двоїстої задачі з (M +1)-го рядка основної таблиці, відповідної останньої ітерації, без всяких додаткових обчислень.

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

Для підготовки даної роботи були використані матеріали з сайту .monax.ru