Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Для задач(Брошюра).doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
964 Кб
Скачать
☆

2. Перетворення задач лінійного програмування до канонічної форми запису

Загальною задачею ЛП називається задача, що складається у визначенні максимального (мінімального) значення функції

(1.1)

п ри умовах

(1.2)

Задача, у якій потрібно знайти максимум лінійної форми

(1.3)

при умовах

(1.4)

(1.5)

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

Задача, у якій потрібно знайти максимум лінійної форми (1.3) при умовах (1.4) і умовах

(1.6)

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

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

1. Задача мінімізації цільової функції еквівалентна задачі максимізації цієї ж функції, помноженій на (-1).

2. Для перетворення обмежень-нерівностей (1.6) в обмеження-рівності (1.4) вводимо в кожне обмеження по одній невід’ємній змінній зі знаком плюс, якщо обмеження виду менше чи дорівнює, або зі знаком мінус, якщо обмеження виду більше чи дорівнює.

1. Змінні, на які не накладено умови невід’ємності, представляємо у виді різниці двох невід’ємних змінних, і підставляємо це представлення в усі обмеження і цільову функцію. При цьому кількість обмежень не зміниться, а кількість змінних зростає.

4. Виключити з запису постановки задачі змінні, на які не накладено умови невід’ємності, можна іншим, більш трудомістким способом. Змінні, на які не накладено умови невід’ємності, послідовно виражаються з рівнянь, і отримані вирази підставляються в усі інші рівняння і цільову функцію. При цьому зменшується кількість обмежень і змінних.

Приклад 1.1. Привести до канонічного виду задачу

Уводимо дві додаткові невід’ємні змінні x6 у перше обмеження зі знаком плюс і x7 у друге обмеження зі знаком мінус. Однак ця задача ще не є канонічної через те, що на змінні x2 і x3 не накладена вимога невід’ємності. Представимо ці змінні у виді різниць:

Підставляючи ці різниці у вихідну задачу, одержимо задачу лінійного програмування в канонічної формі запису:

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

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

При розв’язанні ЗЛП симплекс-методом маємо m рівнянь з n невідомими (канонічна форма запису).

Якщо m=n, то система має єдиний розв’язок;

якщо m<n і рівняння лінійно незалежні, то (n-m) змінних можуть приймати множину будь-яких значень (в тому числі і 0).

Однозначний розв’язок такої системи (m<n) рівнянь отриманий шляхом прирівнювання до нуля n-m змінних, називається базисним розв’язком. Якщо базисний розв’язок задовольняє умові невід’ємності правих частин, то він називається допустимим базисним розв’язком.

Змінні, рівні 0, - небазисні змінні, інші – базисні.

На першому етапі симплекс-методу будується симплекс-таблиця.

Таблиця 1.3

c

с1

с2

…

сn

x1

x2

…

xn

b

c

…

…

…

…

…

…

…

…

…

…

z

z1

z2

…

zn

z0

c-z

c- z1

c- z1

…

c- z1

У цій таблиці рядки – вибрані вектора базису, стовпці – координати вектора розв’язань. Сама таблиця – розклад вектора розв’язків по векторам базису. Стовпець b - розклад вектора обмежень по векторам базису. Рядок c– коефіцієнти цільової функції при відповідних векторах.

Кожне

;

z0 - значення цільової функції при даному базисі.

Другий крок – аналіз симплекс-таблиці.

1) Розглядається рядок c-z. якщо всі cj-zj≤0 ( ), то вектор x0 з координатами , , …, на відповідних місцях (i1,i2,…,im) і з нульовими на інших – є розв’язком.

2) Якщо існує такий стовпець, що різниця cj-zj>0, але в ньому немає жодного додатного коефіцієнту, задача не має розв’язків (цільова функція необмежена).

3) Якщо існує такий стовпець, що різниця cj-zj>0, і в ньому є додатній коефіцієнт, то можна отримати кращий опорний план шляхом введення в базис змінної і виведення із базису змінної .

Ключовий стовпець j0 вибираємо з умови: max(cj-zj)

Ключовий рядок i0 вибираємо з умови: min( ), де ,

Змінюємо базис і перераховуємо симплекс-таблицю за формулами:

Приклад 1.6. Розв’яжемо задачу лінійного програмування симплекс-методом:

Z=3x1+2x2 max

x1 40

x2 20

2x1+4x2 100

100x1+120x2 2000

x1 0

x2 0

Приведемо задачу до канонічного виду введенням додаткових невід’ємних змінних та зведенням нерівностей до рівностей:

Z=3x1+2x2+0х3+0х4+0х5+0х6 max

2x1+4x2+х3=100

100x1+120x2+х4=2000

x1+х5=40

x2+х6=20

Тепер розв’яжемо задачу симплекс-методом:

З математичної моделі будується симплекс-таблиця.

с - коефіцієнти з цільової функції при відповідних змінних. Число базисних змінних співпадає з числом обмежень.

Таблиця 1.4

c

3

2

0

0

0

0

х1

х2

х3

х4

х5

х6

b

c

x3

2

4

1

0

0

0

100

0

|x4

100

120

0

1

0

0

2000

0

x5

1

0

0

0

1

0

40

0

x6

0

1

0

0

0

1

20

0

z

0

0

0

0

0

0

0

c-z

3

2

0

0

0

0

Рядок z розраховується як сума добутків значень у поточному стовпці та стовпці с.

Оскільки в рядку c-z є додатні числа, розв’язок не знайдено. Максимальне в рядку c-z 3 вказує ключовий стовпчик. Ключовий рядок визначається як мінімальне відношення елементів стовпчику b до елементів ключового стовпця (не розглядаються відношення з від’ємними та нульовими знаменниками). У даному випадку 2000/100 є мінімальним. х4 - ключовий рядок.

На перетині ключового рядка та стовпця стоїть ключовий елемент 100.

Новий базис отримуємо заміною змінної у ключовому рядку х4 на змінну у ключовому стовпці х1.

Запишемо для зручності розрахунків першим рядок х1.

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

Інші елементи розраховуються за формулою:

де:

- - значення в новій таблиці;

- значення в старій таблиці;

- значення в старій таблиці у ключовому рядку та поточному стовпці;

- значення в новій таблиці у поточному стовпці та рядку х1, який відповідає новій базисній невідомій.

Таблиця 1.5

c

3

2

0

0

0

0

х1

х2

х3

х4

х5

х6

b

c

x1

1

1,2

0

0,01

0

0

20

3

x3

0

1,6

1

-0,02

0

0

60

0

x5

0

-1,2

0

-0,01

1

0

20

0

x6

0

1

0

0

0

1

20

0

z

3

3,6

0

0,03

0

0

60

c-z

0

-1,6

0

-0,03

0

0

Рядок z розраховується як сума добутків значень у поточному стовпці та стовпці с.

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

Zmax=Z(20;0;60;0;20;20)=60