Скачиваний:
37
Добавлен:
30.05.2020
Размер:
3.32 Mб
Скачать

8.Виконати завдання 7 для повного зваженого графа з кіль­ кістю вершин N^5. Результат виконання програми вивести у файл.

9.Виконати завдання 7 для повного зваженого графа з кіль­ кістю вершин N ^ 12. Результат виконання програми вивес­ ти у файл.

10.Виконати порівняльний аналіз виконання завдань 2-3, 5-6 та 8-9 щодо ефективності роботи відповідних алгоритмів.

Запитання для самоконтролю

1.Яка відмінність між точними, наближеними й евристичними ме­ тодами розв'язування задач?

2.У чому полягає суть евристичних методів?

3.У чому полягає суть наближених методів?

4.На яких відомих вам методах базується алгоритм Ейлера, що реалізує наближений розв'язок задачі про комівояжера?

5.Продемонструйте на власному прикладі покрокове виконання алгоритму Ейлера.

6.Сформулюйте алгоритм Ейлера знаходження наближеного розв'язку задачі комівояжера, обґрунтовуючи при цьому той факт, що отриманий розв'язок буде близьким до точного.

7.Яким чином в алгоритмі Ейлера використовується нерівність трикутника?

8.Запишіть фрагмент програми, що реалізує алгоритм Ейлера, і прокоментуйте його.

9.До якого типу методів можна віднести метод гілок і границь?

10.У чому полягає ідея застосування методу гілок і границь до розв'язання задачі про комівояжера, запропонованої Літтлом?

11.На власному прикладі продемонструйте роботу методу гілок і границь.

12.Якою є роль дерева розв'язку в знаходженні рішення задачі про комівояжера методом гілок і границь?

13.Запишіть алгоритм розв'язання задачі про комівояжера мето­ дом гілок і границь за допомогою приведення таблиці суміж­ ності.

14.Запишіть фрагменти програми, що реалізує алгоритм розв'я­ зання задачі про комівояжера методом гілок і границь за допо­ могою приведення таблиці суміжності.

15.Якими є доведення щодо ефективності використання методу гілок і границь порівняно з повноперебірними алгоритмами?

16.Яким чином можна удосконалити алгоритм повного перебору варіантів для розв'язання задачі про комівояжера із застосуван­ ням методу гілок і границь? У чому полягає евристичний підхід щодо такого удосконалення?

17.Запишіть текст фрагментів програми, що реалізують цей алго­ ритм.

180

Розділ V

0.0 1 1.0.1 1 о т о

 

 

1 0 0 1

0 1 і 1

 

10 1110 0

0 !

 

S 0 0 0 110 1

 

 

10 10 0

10 1

 

0 0 1 10 1,0 0 1

 

0

0 1 1 1 0 11

 

і а її

о

о І

 

в

о і

 

і

 

і

0

 

1

• • • • . •

ОСНОВИ ЛІНІЙНОГО ПРОГРАМУВАННЯ

Основи лінійного програмування

Ми звикли, що, говорячи «програмування», мають на увазі реалізацію розроблених алгоритмів різними мовами програму­ вання. Однак розділ математики «Математичне програмуван­ ня» з'явився значно раніше від різноманітних мов програму­ вання і мав зовсім інше змістовне навантаження. На той час під терміном «програмування» мали на увазі виконання певних обчислювальних операцій. Враховуючи сучасне тлумачення терміна «програмування», точніше було б назвати цей розділ математики «Математичне планування».

Розглянемо деякі математичні поняття, безпосередньо пов'язані з питаннями, що розглядаються.

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

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

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

181

У свою чергу математичне програмування - це розділ теорії прийняття рішень. Як зазначалося вище, термін «програмуван­ ня» не пов'язаний зі складанням програм, а розуміється як роз­ робка програми або плану дій. При цьому необхідно вибрати най­ кращий розв'язок задачі, а саме - визначити максимум або міні­ мум функції від багатьох змінних, якими є фактори даної задачі.

Задачі математичного програмування поділяють на задачі

лінійного та нелінійного програмування. Задачі лінійного про­ грамування розглядають лінійні залежності між параметрами. Якщо хоча б одна із залежностей, що описує задачу, нелінійна, то така задача відноситься до задач нелінійного програмуван­ ня. Найбільш вивченим розділом математичного програмуван­ ня є задачі лінійного програмування. Для цих задач розробле­ но багато ефективних методів та алгоритмів їх розв'язання.

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

Як зазначалося вище, задачі лінійного програмування до­ сить часто трапляються у практиці під час розв'язання проб­ лем, пов'язаних із розподілом ресурсів, плануванням виробни­ цтва, організацією роботи транспорту тощо. Це природно, оскільки в багатьох практичних задачах витрати й прибутки лінійно залежать від кількості придбаних або утилізованих за­ собів. Наприклад, сумарна вартість партії товарів лінійно зале­ жить від кількості закуплених одиниць, а оплата за перевезен­ ня здійснюється пропорційно вазі вантажу, що перевозиться.

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

Перейдемо до конкретних прикладів задач лінійного про­ грамування.

Приклади задач лінійного програмування

Задача про використання сировини

Нехай деяке підприємство виробляє два види продукції Рх і Р 2 . Для випуску цих видів продукції необхідно використати три види сировини Of;, С2 та С3. Відомо, яка кількість кожної сировини витрачається для виробництва продукції Pj і Р2

182

відповідно. Відома також інформація про наявність усіх видів сировини на складі (табл. 1).

Таблиця 1

Види

Запаси

Кількість одиниць сировини для

виготовлення одиниці продукції

сировини

сировини

 

 

' і

Р2

 

 

 

 

 

 

20

2

5

 

40

8

5

С3

ЗО

5

6

 

 

 

 

Прибуток від реалізації одиниці продукції Р1 становить 50 грн., а продукції Р2 - 40 грн.

Необхідно знайти розв'язок такої задачі: скільки необхідно виробити продукції Рх і Р2 для отримання максимального при­ бутку.

Створимо математичну модель даної задачі. Позначимо хх - кількість одиниць продукції Р 1 ? а х2 - кількість одиниць про­ дукції Р 2 . Тоді, враховуючи кількість одиниць сировини, що витрачається на виготовлення одиниці продукції, а також за­ паси сировини, одержимо систему нерівностей, яка одночасно є системою обмежень для розв'язку поставленої задачі:

'2хх+Ьхг <20;

• 8^+5^2 ^ 40; 5^+6x2 <30 .

Ці обмеження говорять про те, що кількість сировини не мо­ же перевищувати її запасів на складі підприємства.

За умовою задачі прибуток підприємства складається з при­ бутку від реалізації х1 одиниць продукції Рг (50 грн. за кожну) та х2 одиниць продукції Р2 (40 грн. за кожну). Сумарний прибу­ ток розраховуватиметься за формулою:

L = 50:^ + 40х2.

Необхідно знайти такі невід'ємні значення хх і х2, при яких функція L набуде максимального значення.

Задача про складання харчового раціону

Сільськогосподарське підприємство виробляє корми для відгодівлі худоби. Для спрощення вважатимемо, що є два види кормів Р1іР2. При відгодівлі кожна тварина має отримувати на добу не менше 9 одиниць корисної речовини Сх, не менше 8 оди­ ниць сировини С2 і не менше 12 одиниць сировини С3. Вміст кількості одиниць корисних речовин в 1 кг кожного виду кор­ мів наведено у таблиці 2.

183

 

 

Таблиця 2

 

 

 

Корисна речовина

Корм Р1

Корм Р2

 

 

 

с,

3

1

с2

1

2

Сз

1

6

 

 

Необхідно скласти такий харчовий раціон, щоб задані умови по вмісту корисних речовин у кожному виді корму були витри­ мані, але при цьому вартість раціону була мінімальною.

Для створення математичної моделі задачі позначимо х1 і х2 - кількість кілограмів корму Р1 і Р2 у денному раціоні відповідно. З урахуванням умов задачі отримаємо систему обмежень:

ох, т Хп ^ У5

xl+2x2 ^ 8;

х1+6х2 > 12.

Якщо відомо, що 1 кг корму Рг коштує 4 грн., а 1 кг кор­ му Р2 - 6 грн., то загальну вартість раціону можна представи­ ти у вигляді такої лінійної функції:

L = 1 + 2 .

Сформульована задача зводиться до наступного: вибрати такі невід'ємні значення змінних хх і х2, які задовольняють систему обмежень і дають мінімальне значення L.

Задача про рюкзак

Існує

п предметів, кожний з яких важить аі і коштує с;

(і = 1, 2

, ..., п). Необхідно завантажити рюкзак таким чином,

щоб сумарна вартість вкладених у нього предметів була макси­ мальною, а вага рюкзака при цьому не перевищувала заданого значення А.

Нехай xv х2,..., хп - змінні, сенс яких полягає у наступному:

х. =

1, якщо і-й предмет завантажується;

 

'

 

0,

якщо і-й предмет не завантажується.

Математична модель задачі полягає у тому, щоб знайти такий набір значень змінних xv х2, ..., хп, який задовольняв би умови

xt = 0 або X; = 1 для і = 1, 2, ..., п;

OJXJ + а2х2 + ... + апхп^А,

при яких функція L = с1х1 + с2х2 + ... + спхп набуває максималь­ ного значення.

184

Задача про рюкзак буде розглядатися далі, і в розділі «Ди­ намічне програмування» буде наведено алгоритм її розв'язання. Окрім цього, задача про рюкзак існує ще у варіанті неперервної задачі, що розглядатиметься у розділі «Жадібні алгоритми».

Транспортна задача

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

Нехай у місті є два продовольчі склади і дві пекарні. Не­ обхідно щоденно з першого складу вивозити 50 т борошна, а з другого - 70 т. Перша пекарня при цьому отримує 40 т, а друга - 80 т борошна. Відома також вартість перевезення борошна зі складів до пекарень у гривнях за тонну (табл. 3).

 

 

 

 

 

 

Таблиця З

 

 

 

 

 

 

~~—-——_^_^^

Пекарня

1

2

Склад

~~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

1,2

1,6

 

2

 

 

 

0,8

1,0

 

 

 

 

 

 

 

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

Позначимо ту - кількість борошна, яка перевозиться зі складу і на пекарню /. Виходячи з поставлених умов і введених позначень, запишемо математичну модель транспортної за­ дачі. Система обмежень буде такою:

ти + т12 =50;

т21 + т22 =70; тп21 =40;

т1222= 80,

де перші два рядки визначають кількість борошна, що виво­ зиться зі складів на пекарні, а другі два - кількість борошна, яка ввозиться на пекарні зі складів.

Оскільки нам відома вартість кожного з перевезень, то за­ гальна сума вартості визначатиметься за формулою:

L = 1,2тп + 1,6т1 2 + 0,8т2 1 + т 22-

Отже, розв'язок транспортної задачі полягає у відшуканні таких невід'ємних значень т;-, які задовольняють систему об­ межень, a L набуває мінімального значення.

185

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

Загальна задача лінійного програмування

Тепер сформулюємо загальну задачу лінійного програму­ вання, оскільки всі наведені приклади задач лінійного програ­ мування схожі за математичною моделлю.

У кожному з наведених прикладів задач вхідні дані відпові­ дають деякій системі обмежень

«1А +ai2*2 + • • • + <Н»Хп <=> h'

а2Л+ a22x2 + ... + a2nxn о b2;

а » Л + а И 2*2 + - + a m A « f c m -

де a.j, b,i - фіксовані дійсні числа, а символ «c=>» означає один

ч ч

із знаків «^», «^», «=». Саме ця система обмежень або просто обмеження описують умови, які накладаються на вхідну інформацію задачі.

Для отримання розв'язку задачі необхідно записати форму­ лу, яка визначає мету досягнення результату. В загальному ви­ падку її можна представити так:

L = C]#i + с2х2 + ... + спхп,

де сі набуває дійсних значень. Наведений вираз називається

цільовою функцією.

Рівняння, яке представляє цільову функцію, має безліч розв'язків xv х2, ..., хп. Однак серед них необхідно вибрати ті, які задовольняють систему обмежень даної задачі. Але і таких розв'язків є багато, оскільки система обмежень має невідомих більше, ніж нерівностей (п > т). Сукупність таких невід'ємних

розв'язків, які задовольняють систему обмежень, називається

допустимими розв'язками або планами даної задачі.

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

Зауважимо ще раз, що для задач лінійного програмування рівняння (цільова функція) і система нерівностей носять ліній­ ний характер.

186

Геометрична інтерпретація розв'язування задач лінійного програмування

Розглянемо геометричну інтерпретацію задачі лінійного програмування, що залежить тільки від двох параметрів. Для прикладу розглянемо наведену вище задачу про використання сировини.

Геометрично систему обмежень цієї задачі, що є системою нерівностей

2xj+5x2 ^20;

5^+6^2 ^ ЗО, можна зобразити у вигляді деякої області на декартовій пло­ щині (мал. 112).

Оскільки розв'язки задач лінійного програмування завжди знаходяться в області невід'ємних значень, то до обмежень за­ дач лінійного програмування необхідно дописати ще дві нерівності: Xj ^ 0 та х2 > 0. На малюнку 112 ці дві нерівності визначають першу чверть визначеної системи координат.

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

За умовами сформульованої задачі, тобто визначення цільової функції та її обмежень, побудуємо багатокутник допустимих зна­ чень OABCD (мал. 112). Аналізуючи систему нерівностей, можна

Мал. 112

187

зробити висновок, що оскільки всі нерівності містять знак «^», то багатокутник допустимих розв'язків включає і самі прямі.

Далі для пошуку максимального розв'язку серед усіх допус­ тимих будується опорна пряма (або пряма нульового рівня):

L = 50х1 + 40х2 = 0.

З вигляду цього рівняння видно, що пряма проходитиме че­ рез початок координат. Якщо цільова функція матиме вільний член, то при побудові опорної прямої його можна проігнорува­ ти, адже максимум лінійної функції L - f1x1 + у2х2 + Yo Дося­ гається при тих же значеннях хх та х2, що і максимум лінійної функції без вільного члена у0. Щоб визначити точку - макси­ мум або мінімум серед допустимих розв'язків, необхідно пе­ реміщувати опорну пряму паралельно самій собі в одному з напрямів. При цьому значення L' буде або збільшуватись, або зменшуватись. Залежно від постановки вихідної задачі (в на­ шому випадку - це пошук максимуму) визначається напрям руху опорної прямої: за вектором напряму у випадку максимізації цільової функції або проти вектора напряму у разі мінімізації цільової функції. Вектор напряму визначається ко­ ефіцієнтами цільової функції:

a (YIJ Y2)-

Для нашої задачі вектор напряму матиме вигляд а (50; 40). Оскільки цільову функцію сформульованої задачі необхідно дослідити на максимум L = 50х1 + 40х2 > max, то опорну пряму необхідно переміщувати в напрямі, який вказує побудований вектор напряму (мал. 112).

Координати останньої крайньої точки багатокутника допусти­ мих значень, яку перетне опорна лінія на своєму шляху, і будуть тими значеннями, при яких величина І/ набуде максимального значення. Для нашої задачі такою вершиною багатокутника є вершина С. Вона утворюється при перетині прямих 1 + Ьх2 = 40 та Ьхг + 6х2 = 30. Для визначення координат цієї вершини необхідно лише розв'язати відповідну систему лінійних рівнянь

8^+5x2 =40; 5^+6x2=30

і підставити отриманий розв'язок (Xj* ~ 3,9; х2* ~ 1,74) у цільо­ ву функцію. У результаті отримаємо розв'язок сформульованої задачі лінійного програмування L' = 264,6.

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

1.За умовою задачі записати обмеження та цільову функцію.

2.Побудувати багатокутник допустимих значень.

188

3.Побудувати опорну пряму відповідно до такого скоректо­ ваного рівня цільової функції: прибрати вільний член і прирів­ няти до 0.

4.За коефіцієнтами цільової функції при невідомих побудува­ ти вектор напряму і визначити напрям переміщення опорної прямої для досягнення оптимального значення цільової функції.

5.Визначити точку, в якій цільова функція набуває опти­ мального значення, та рівняння прямих, на перетині яких зна­ ходиться визначена точка.

6.Розв'язати систему лінійних рівнянь, яку утворюють рівняння визначених прямих.

7. Для отримання шуканого оптимального значення цільової функції підставити розв'язок системи рівнянь у цільову функцію.

Необхідно обов'язково розглядати такі три можливі випад­ ки одержання розв'язку задачі лінійного програмування:

1)задача має один розв'язок, тобто опорна пряма на остан­ ньому кроці перетинає одну точку, яка є вершиною області до­ пустимих розв'язків;

2)задача має безліч розв'язків, тобто опорна пряма на ос­ танньому кроці перетинає відрізок, який є однією зі сторін об­ ласті допустимих розв'язків;

3)розв'язок задачі відсутній, тобто опорна пряма пере­ міщується в бік, де область допустимих значень не обмежена відрізком прямої, або опорна пряма переміщується в бік, про­ тилежний до розміщення області допустимих значень.

Завдання

1.Розв'язати геометрично задачу про використання сировини для випадку існування одного оптимального розв'язку, ви­ користавши власні вхідні дані.

2.Розв'язати геометрично задачу про використання сировини для випадку існування безлічі оптимальних розв'язків, ви­ користавши власні вхідні дані.

3.Розв'язати геометрично задачу про використання сировини для випадку відсутності жодного оптимального розв'язку, використавши власні вхідні дані.

4.Розв'язати геометрично задачу про складання харчового раціону для випадку існування одного оптимального роз­ в'язку, використавши власні вхідні дані.

5.Розв'язати геометрично задачу про складання харчового ра­ ціону для випадку існування безлічі оптимальних розв'яз­ ків, використавши власні вхідні дані.

6.Розв'язати геометрично задачу про складання харчового раціону для випадку відсутності жодного оптимального роз­ в'язку, використавши власні вхідні дані.

189

Соседние файлы в папке Методи побудови алгоритмів та їх аналіз