Роздрукувати сторінку

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

« Назад

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

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

Класичні методи знаходження екстремуму функції багатьох змінних пов'язані з рішенням системи рівнянь: 

Очевидно, для лінійної функції Z: 

А так як всі коефіцієнти одночасно не можуть бути рівні 0, то всередині області, утвореної системою обмежень, екстремальної точки не існує. 

Вона може існувати тільки на границі  області, але застосування класичних методів також неможливо, оскільки частинні похідні функції Z по всім змінним також рівні константам. Тому для вирішення завдань лінійного програмування (ЗЛП) були створені спеціальні методи.

Приклад. Знайти максимум функції  в області:  (прямокутний рівнобедрений трикутник).

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

Припустимо, точка максимуму розташована на відрізку, але не в кутовій точці. Рівняння відрізка, що проходить через точки (x1,y1) и (x2,y2) можно записати в вигліді:. Підставимо рівняння прямої:.   

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

Приклад задачі лінійного програмування. Задача оптимального виробничого планування 

Для виготовлення n видів продукції P1,…,Pn використовується m видів сировини S1,…,Sm,   запаси якого обмежені і становлять відповідно b1,…,bm  одиниць. Відомо, що на виробництво одиниці продукції Pj (j=)  витрачається аij  одиниць ресурсу Si (i=,а прибуток від реалізації одиниці продукції Pj (j=  становить сj(j=.

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

Вид продукції

Вид сировини

Р1

...

Pj

...

Pn

Запас

ресурса

S1

a11

...

a1j

...

A1n

b1

...

...

...

...

...

...

...

Si

ai1

...

aij

...

ain

bi

...

...

...

...

...

...

...

Sm

am1

...

amj

...

amn

bm

Прибуток

c1

cj

cn

 


Складемо математичну модель завдання.

Позначимо через xj (j= плановане до випуску кількість продукції Рj  (j=, а через  Z1,…, xn) - прибуток підприємства від реалізації всієї продукції.
Тоді планом виробництва буде вектор Х = (х1,…,х
n), що показує, яку кількість продукції кожного виду буде заплановано. Змінні  х1,…,хn - керовані змінні.
Мета рішення задачі (критерій оптимальності) - максимізувати прибуток:

Z = c1x1 + c2x2 +. . . + cnxn .

Сумарні витрати ресурсу Si (i=складають:.

У силу обмеженості ресурсу Si величиной bi отримаємо систему обмежень: .

На змінні хj повинно бути накладено умову невідємності, тобто продукція Рj   може або випускатися (xj > 0), або не випускатися (xj=0).

Отже, математична модель прийме вигляд:

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

Визначення 1. Вектор X, що задовольняє системі обмежень ЗЛП, в тому числі і умові невідємності,  якщо вони є, називається допустимим рішенням ЗЛП.
Визначення 2. Сукупність усіх допустимих рішень утворює область допустимих рішень (ОДР) ЗЛП.
Визначення 3. Допустиме рішення, для якого цільова функція досягає максимуму (або мінімуму), називається оптимальним рішенням. Будемо позначати оптимальне рішення

Опуклі множини

Визначення 4. Вектор  називається опуклою лінійною комбінацією векторів  якщо коефіцієнти задовольняють умовам.

Зокрема, опуклої лінійної комбінацією двох векторів (точок) )  X 1 та X 2 является є вектор: , де  
Визначення 5.  Множина D векторів (точок) лінійного простору називається опуклою, якщо разом з будь-якими її двома точками  та   йому належить відрізок, що з'єднує ці точки. Аналітично умова опуклості множини   записується таким чином: для будь-яких,  та довільного: виконується умова.

На рис зображені опуклі множини (а, б) і множина, яка не є опуклою (в).

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

Наприклад, крайніми точками трикутника є його вершини, крайніми точками кола - точки кола, яка його обмежує. Однак не всяка опукла множина має крайні точки. Пряма, площина, півплощини, простір, півпростір кутових точок не мають.

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

Теорема. Будь-яка точка опуклого багатогранника може бути представлена ​​як опукла лінійна комбінація його вершин (крайніх точок). 

Графічне зображення розвязку задачі лінійного програмування 

Припустимо, що число невідомих рівне 2  в задачі лінійного програмування. Побудуємо область, яку задають обмеження, при цьому до числа обмежень ще треба додати прямі х=0, y=0 та  m=m+2.

Приклад. Знайти мінімум для функціїпри обмеженнях на змінні: , ,, .

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

1 2 <  5

6 2 >  8

1 5 >  6

2 1 > -4 

На першому місці задаємо коефіцієнт при х1, на другому при х2 . Знаки нерівностей будемо задавати тільки в вигляді <,>,=.

Область обмежень може бути:

1) Cкінчена, непорожня.

2) Пуста множина.

3) Непорожня, нескінчена.

Алгоритм повинен побудувати область обмежень в випадку 1) і видати повідомлення для 2) та 3) 

Алгоритм 

1) Знайдемо всі попарні точки перетину прямих, що утворюють область обмежень.

Якщо  прямих m і серед них немає паралельних, то число точок перетину прямих рівне.

2) Перевіримо кожну точку перетину за допомогою обмежень: кожна точка перетину прямих повина задовольняти всім обмеженням. Для цього підставляємо координати точки в ріняння обмеження і перевіряємо знак нерівності. Точки, які не задоволняють обмеженням – відкинемо.

Позначимо число точок, що задовольняють обмеженням  К, а масив точок xi,yi i=1,K. Цей масив буде утворювати вершини області обмежень. Але треба ці точки правильно з’єднати, вони можуть бути розташовані в будь-якому порядку. 

3) Якщо К=0, то обмеження суперечливі, область допустимих значень – порожня множина. Повідомлення, кінець алгоритму

4) Зєднаємо між собою точки. Область обмежень повина бути опуклою.

А) Виберемо першу точку -  M1(x1,y1), i=1, Kol=1, в цій змінній підраховуємо, скільки точок області уже є.

Б) j=1,K; ji;

В) Наступна точка області обмежень: Mj(xj,yj); Перевірямо умову: пряма, що проходить через точки MiMj не повинна розділяти множину точок вершин так що частина точок лежить  з однієї сторони прямої, частина з іншої.

Для цього підставляємо всі точки в рівняння прямої MiMj. Наприклад, якщо рівняння прямої  MiMj задане в вигляді f(x,y)=a*x+b*y+c, то при підстановці координат всіх інших точок в f(x,y) значення повинні бути або >0, або <0. Перебираємо всі точки j=1,K, j≠i. Якщо точка знвайдена, то Kol=Kol+1;

Г) Якщо Kol=K то 5).

5) Треба перевірити, щоб кожний відрізок області обмежень пунку 4) лежав на деякій прямій, що задані були спочатку. Якщо наша область обмежень скінчена, то цей пункт не потрібен, якщо ні то 4) буде давати невірний результат. В цьому випадку потрібно видати повідомлення.

З повагою ІЦ "KURSOVIKS"!