Лінійне програмування 2 лютого

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Зміст

Зміст

1. Пояснювальна записка

1.1.Введеніе

2. Теоретична частина

2.1 Елементи теорії матричних ігор

2.2 Рішення матричних ігор у чистих стратегіях

2.3 Рішення матричних ігор у змішаних стратегіях шляхом зведення до задачі лінійного програмування

3. Практична частина

3.1 Побудова математичної моделі задачі

3.2 Вибір методу рішення і привиди завдання до канонічного вигляду

3.3 Рішення задачі шляхом зведення до задачі лінійного програмування

- Блок схема до поставленого завдання

- Програма до поставленого завдання (програмний код)

3.4 Аналіз результату вирішення поставленого завдання

4. Висновок курсового проектування

Висновок

Список основних джерел

  1. Пояснювальна записка курсового проектування

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

1. КОРОТКИЙ ОГЛЯД АЛГОРИТМІВ РІШЕННЯ ЗАДАЧ ЦЬОГО ТИПУ 1.1 Математичне програмування.

Математичне програмування займається вивчення екстремальних завдань і пошуком методів їх вирішення. Завдання математичного програмування формулюються наступним чином: знайти екстремум деякої функції багатьох змінних f (x1, x2, ..., xn) при обмеженнях gi (x1, x2, ..., xn) (bi, де gi - функція, що описує обмеження, (- один з наступних знаків (, (, (, а bi - дійсне число, i = 1, ..., m. f називається функцією цілі (цільова функція). Лінійне програмування - це розділ математичного програмування, в якому розглядаються методи рішення екстремальних задач з лінійним функціоналом і лінійними обмеженнями, яким повинні задовольняти шукані змінні. Задачу лінійного програмування можна сформулювати так. Знайти max [pic] за умови: a11 x1 + a12 x2 +... + a1n xn (b1; a21 x1 + a22 x2 +... + a2n xn (b2;............................ am1 x1 + am2 x2 +... + amn xn (bm; x1 (0, x2 (0,..., xn (0. Ці обмеження називаються умовами не заперечності. Якщо всі обмеження задані у вигляді строгих рівностей, то дана форма називається канонічною. У матричній формі задачу лінійного програмування, записують наступним чином. Знайти max cT x за умови A x (b; x (0, де А - матриця обмежень розміром (m (n), b (m (1) - вектор-стовпець вільних членів, x (n (1) - вектор змінних, ст = [c1, c2, ..., cn] - вектор-рядок коефіцієнтів цільової функції. Рішення х0 називається оптимальним, якщо для нього виконується умова ст х0 (СТ х, для всіх х (R (x). Оскільки min f (x) еквівалентний max [- f (x)], то завдання лінійного програмування завжди можна звести до еквівалентної задачі максимізації. Для вирішення завдань цього типу застосовуються методи:

1) графічний;

2) табличний (прямий, простий) симплекс - метод;

3) метод штучного базису;

4) модифікований симплекс - метод;

5) двоїстий симплекс - метод.

1.2 Табличний симплекс - метод Для його застосування необхідно, щоб знаки в обмеженнях мали вигляд "менше або дорівнює", а компоненти вектора b - позитивні. Алгоритм рішення зводиться до наступного:

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

2. Якщо у вихідній системі обмежень були присутні знаки "одно" або "більше або дорівнює", то в зазначені обмеження додаються штучні змінні, які так само вводяться і в цільову функцію зі знаками, що визначаються типом оптимуму.

3. Формується симплекс-таблиця.

4. Розраховуються симплекс-різниці.

5. Приймається рішення про закінчення або продовження рахунку.

6. При необхідності виконуються ітерації.

7. На кожній ітерації визначається вектор, що вводиться в базис, і вектор, що виводиться з базису. Таблиця перераховується за методом Жордана Гауса або яким-небудь іншим способом.

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

1.4 Модифікований симплекс-метод. В основу даного різновиду симплекс-методу покладені такі особливості лінійної алгебри, які дозволяють у ході виконання завдання працювати з частиною матриці обмежень. Іноді метод називають методом зворотної матриці. У процесі роботи алгоритму відбувається спонтанне звернення матриці обмежень по частинах, відповідними поточними базисним векторам. Зазначена здатність робить вельми привабливою машинну реалізацію обчислень внаслідок економії пам'яті під проміжні змінні і значного скорочення часу рахунку. Хороший для ситуацій, коли число змінних n значно перевищує число обмежень m. У цілому, метод відображає традиційні риси загального підходу до вирішення завдань лінійного програмування, що включає в себе канонізацію умов завдання, розрахунок симплекс-різниць, перевірку умов оптимальності, прийняття рішень про корекцію базису і виключення Жордана Гаусса. Особливості полягають у наявності двох таблиць - основний і допоміжної, порядок їх заповнення та деякою специфічності розрахункових формул.

ПОСТАНОВКА ЗАДАЧІ:

Для виробництва трьох видів продукції використовується три види сировини. Норми витрат кожного з видів сировини на одиницю продукції даного виду, запаси сировини, а також прибуток з одиниці продукції.

Визначити план випуску продукції для отримання максимального прибутку. Оцінити кожен з видів сировини, використовуваних для виробництва продукції.

Відповідно:

1. Перше з чого починаємо, це будуємо математичну модель задачі;

2. Вибираємо метод рішення задачі і наводимо завдання до канонічного вигляду;

3. Вирішуємо задачу шляхом зведення до задачі лінійного програмування;

4. Потім будуємо блок схему до завдання з написанням програми на мові С + + Builder 6.;

5. Подальшим етапом моєї роботи буде аналіз результату рішення виконаної мною завдання.

1.1 Введення

1 Математичні методи

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

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

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

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

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

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

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

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

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

У моделюванні існує два шляхи:

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

Модель може відображати реальність більш абстрактно - словесним описом формалізованим з яких - то правилами, співвідношенням.

Існує наступна класифікація абстрактних моделей:

Вербальні

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

Математичні

Це дуже широкий клас знакових моделей, заснованих на формальних мовах над кінцевими алфавітами, що широко використовують ті чи інші математичні методи.

Інформаційні

Це клас знакових моделей описують інформаційні процеси в системах найрізноманітнішої природи.

Кордон між вербальними, математичними та інформаційними моделями може бути проведена досить умовно; можна вважати інформаційні методики підкласом математичних моделей.

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

Поняття «аналітичне» рішення і «комп'ютерне» рішення не протистоять один одному, тому що:

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

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

2 Симплекс метод рішення завдань лінійного програмування

Симплекс метод - універсальний метод для розв'язання лінійної системи рівнянь або нерівностей і лінійного функціоналу.

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

  1. Обмеження виду «» - ресурсні обмеження. Справа знаходиться те що ми використовуємо на виробництві, зліва - то що отримуємо. За таких обмеження вводять додаткові змінні з коефіцієнтом «+1», утворюють одиничний базис. У цільову функцію ці змінні увійдуть з коефіцієнтом «0».

  2. Обмеження виду «=». Часто буває, що незважаючи на те що обмеження мають вигляд рівності, одиничний базис не виділяється або важко виділяється. У цьому випадку вводяться штучні змінні для створення одиничного базису - Yi. У систему обмежень вони входять з коефіцієнтом «1», а в цільову функцію з коефіцієнтом «M», що прагнуть до нескінченності (при Fmin - «+ M», при Fmax - «- M»).

  3. Обмеження виду «» - Планові обмеження. Додаткові змінні (X), що несуть певний економічний зміст - перевитрата ресурсів або перевиконання плану, перевиробництво, додаються з коефіцієнтом «-1», в цільову функцію - з коефіцієнтом «0». А штучні змінні (Y) як у попередньому випадку.

Алгоритм симплекс методу.

(Перша симплекс таблиця)

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

X 1 + q 1, m +1 Xm +1 + .... + Q 1, m + n Xm + n = h 1

X 2 + q 1, m +1 Xm +1 + .... + Q 1, m + n Xm + n = h 1

X 3 + q 1, m +1 Xm +1 + .... + Q 1, m + n Xm + n = h 1

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

Xm + qm, m +1 Xm +1 + .... + Qm, m + n Xm + n = hm

У ній m базисних змінних, k вільних змінних. M + k = n - всього змінних.

Fmin = C 1 X 1 + C 2 X 2 + C 3 X 3 +....+ CnXn

Всі hi повинні бути більше або дорівнюють нулю, де i = 1,2 ... m. На першому кроці як допустимого рішення приймаємо всі Xj = 0 (j = m +1, m +2 ,..., m + k). При цьому всі базисні змінні Xi = Hi.

Для подальших міркувань обчислень будемо користуватися першою симплекс таблицею (таблиця 3.1).

Таблиця 1.

C

Б

H

C1

C2

...

Cm

Cm +1

...

Cm + k




X1

X2

...

Xm

Xm +1

...

Xm + k

C1

C2

C3

:

:

Cm

X1

X2

X3

:

:

Xm

h1

h2

h3

:

:

hm

1

0

0

:

:

0

0

1

0

:

:

0

:

:

:

:

:

:

0

0

0

:

:

0

q1, m +1

q2, m +1

q3, m +1

:

:

qm, m +1

:

:

:

:

:

:

q1, m + k

q2, m + k

q3, m + k

:

:

qm, m + k


F =

F0

 

 

...

m

m +1

...

m + k


Перший стовпець-коефіцієнти в цільової функції при базисних змінних.

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

Третій стовпець - вільні члени (hi 0).

Сама верхня рядок - коефіцієнти при цільової функції.

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

Основне поле симплекс методу - система коефіцієнтів з рівняння.

Останній рядок - служить для того, щоб відповісти на запитання: «оптимальний план чи ні».

Для першої ітерації F 0 =   ci * hi.

                 m - оцінки вони розраховуються за формулою:

  j =  ciqij - cj.

Індексна рядок дозволяє нам судити про оптимальність плану:

  1. При знаходженні Fmin в індексному рядку повинні бути негативні і нульові оцінки.

  2. При знаходженні Fmax в індексному рядку повинні бути нульові і позитивні оцінки.

Перехід до другої ітерації:

Для цього відшукуємо ключовий (головний) стовпець і ключову (головну) рядок.

Ключовим стовпцем є той у якому знаходиться найбільший позитивний елемент індексного рядка при знаходженні Fmin або найменший негативний елемент при знаходженні Fmax.

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

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

На цьому етапі здійснюється до переходу до подальших итерациям.

Перехід до итерациям:

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

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

  3. Якщо у головній рядку міститься нульовий елемент, то стовпець, в якому стояти цей елемент переноситися в наступну ітерацію без зміни.

  4. Якщо в головному стовпці є нульовий елемент, то рядок, в якій він знаходитися переноситися без зміни в наступну ітерацію.

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

Метод штучного базису. (Друга симплекс таблиця)

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

  1. Побудова штучного базису і оптимізація функції суми штучних змінних, тобто F 0 = Y 1 + Y 2 + ... + Yn = 0 (F  min). Якщо при цьому F 0 = 0, то штучний базис ми вивели зі складу змінних, переходимо до другої фази - вирішуємо завдання по першій симплекс таблиці з дійсними змінними. Якщо ж F 0  0, тобто штучний базис не виведений зі складу змінних - ОЗЛП рішень не має.

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

Зауваження:

  1. При вирішенні завдань на max зі штучним базисом слід переходити до вирішення на min, змінюючи лише тільки цільову функцію:

Fmax = - Fmin.

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

a) Для стовпців X обчислення елементів йде за формулами:

  j =  qij.

yi = y 1 + y 2 + ... + yR.

Hi = F 0.

Примітка: тільки для рядків Y.

б) Для стовпців Y працює стара формула:

  j =  ciqij - cj.

2. Теоретична частина

Математичні моделі

Математична модель - наближений опис об'єкта моделювання, вираженої з допомогою математичної символіки.

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

Етапи комп'ютерного математичного моделювання зображені на малюнку (1). Перший етап - Визначення цілей моделювання. Ці цілі можуть бути різними:

  1. модель потрібна для того, щоб зрозуміти, як влаштований конкретний об'єкт, яка його структура, основні властивості, закони розвитку і взаємодії з навколишнім світом (розуміння);

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

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

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

Класифікація математичних моделей

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

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

дескриптивні (описові) моделі;

оптимізаційні моделі;

багатокритеріальні моделі;

ігрові моделі.

Рис. (1). Блок схема математичного моделювання.

2.1 Елементи теорії матричних ігор

ЗВЕДЕННЯ матричної гри до задачі лінійного програмування

Припустимо, що ціна гри позитивна (u > 0). Якщо це не так, то відповідно до властивості 6 завжди можна підібрати таке число с, додаток якого до всіх елементів матриці виграшів дає матрицю з позитивними елементами, і отже, з позитивним значенням ціни гри. При цьому оптимальні змішані стратегії обох гравців не змінюються.

Отже, нехай дана матрична гра з матрицею А порядку m х n. Відповідно до властивості 7 оптимальні змішані стратегії х = (Х1, ..., хm), y = (Y1, ..., yn) відповідно гравців 1 і 2 та ціна гри u повинні задовольняти співвідношенням.

Розділимо всі рівняння і нерівності в (1) і (2) на u (Це можна зробити, тому що за припущенням u > 0) і введемо позначення:

, ,

Тоді (1) і (2) перепишеться у вигляді:

, , , ,

, , , .

Оскільки перший гравець прагне знайти такі значення хi і, отже, pi , Щоб ціна гри u була максимальною, то рішення першої задачі зводиться до знаходження таких невід'ємних значень pi , При яких

, .

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

, .

Формули (3) і (4) висловлюють двоїсті одна одній задачі лінійного програмування (ЛП).

Вирішивши ці завдання, отримаємо значення pi , Qj і u. Тоді змішані стратегії, тобто xi і yj виходять за формулами:



Приклад. Знайти рішення гри, яка визначається матрицею.

Рішення. При вирішенні цієї гри до кожного елементу матриці А додамо 1 і отримаємо наступну матрицю

Складемо тепер пару взаємно-двоїстих задач:

Вирішимо другу з них

Б.п.

q1

q2

q3

q4

q5

q6

Рішення

a

Ставлення

-1

-1

-1

0

0

0

0

-3

q4

1

2

0

1

0

0

1

5

-

q5

1

0

1

0

1

0

1

4

q6

2

1

0

0

0

1

1

5

-

Б.п.

q1

q2

q3

q4

q5

q6

Рішення

a

Ставлення

0

-1

0

0

1

0

1

1

q4

1

2

0

1

0

0

1

5

q3

1

0

1

0

1

0

1

4

-

q6

2

1

0

0

0

1

1

5

Б.п.

q1

q2

q3

q4

q5

q6

Рішення

a

Ставлення

0

0

1

0

q2

1

0

0

0

q3

1

0

1

0

1

0

1

4

q6

0

0

0

1

З оптимальної симплекс-таблиці випливає, що

(Q1, q2, q3) = (0; ; 1),

а з співвідношень подвійності випливає, що

( p1, p2, p3) = ( ; 1; 0).

Отже, ціна гри з платіжною матрицею А1 дорівнює

. ,

а ігри з платіжною матрицею А :

.

При цьому оптимальні стратегії гравців мають вигляд:

Х = (Х1, х2, х3) = (uр1; uр2; uр3) = =

Y = (Y1, y2, y3) = (uq1; uq2; uq3) = = .



2.2 Рішення матричних ігор у чистих стратегіях

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

Перший гравець має m стратегій i = 1,2 ,..., m, другий має n стратегій j = 1,2 ,..., n. Кожній парі стратегій (i, j) поставлено у відповідність число аij, виражає виграш гравця 1 за рахунок гравця 2, якщо перший гравець візьме свою i-ю стратегію, а 2 - свою j-у стратегію.

Кожен з гравців робить один хід: гравець 1 вибирає свою i-ю стратегію (i = ), 2 - свою j-у стратегію (j = ), Після чого гравець 1 отримує виграш аij за рахунок гравця 2 (якщо аij < 0, то це означає, що гравець 1 платить другий суму | аij |). На цьому гра закінчується.

Кожна стратегія гравця i = ; J = часто називається чистою стратегією.

Якщо розглянути матрицю

А =



то проведення кожної партії матричної гри з матрицею А зводиться до вибору гравцем 1 i-го рядка, а гравцем 2 j-го стовпця і одержання гравцем 1 (за рахунок гравця 2) виграшу аij.

Головним у дослідженні ігор є поняття оптимальних стратегій гравців. У це поняття інтуїтивно вкладається такий зміст: стратегія гравця є оптимальною, якщо застосування цієї стратегії забезпечує йому найбільший гарантований виграш при всіляких стратегіях іншого гравця. Виходячи з цих позицій, гравець 1 досліджує матрицю виграшів А наступним чином: для кожного значення i (i = ) Визначається мінімальне значення виграшу в залежності від застосовуваних стратегій гравця 2

аij (i = )

тобто визначається мінімальний виграш для гравця 1 за умови, що він прийме свою i-у чисту стратегію, потім з цих мінімальних виграшів відшукується така стратегія i = iо, при якій цей мінімальний виграш буде максимальним, тобто знаходиться

аij = = (1).

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

Гравець 2 при оптимальному своїй поведінці повинен прагне по можливості за рахунок своїх стратегій максимально зменшити виграш гравця 1. Тому для гравця 2 відшукується

аij, тобто визначається max виграш гравця 1, за умови, що гравець 2 застосує свою j-у чисту стратегію,

потім гравець 2 відшукує таку свою j = j1 стратегію, при якій гравець 1 отримає min виграш, тобто знаходить

aij = = (2).

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

Іншими словами, застосовуючи свої чисті стратегії гравець 1 може забезпечити собі виграш не менше , А гравець 2 за рахунок застосування своїх чистих стратегій може не допустити виграш гравця 1 більше, ніж .

Визначення. Якщо в грі з матрицею А = , То говорять, що ця гра має сідловий точку в чистих стратегіях і чисту ціну ігри

u = = .

Сідлова точка - Це пара чистих стратегій (iо, jо) відповідно гравців 1 і 2, при яких досягається рівність = . У це поняття вкладено наступний зміст: якщо один з гравців дотримується стратегії, відповідної сідлової точці, то інший гравець не зможе вступити краще, ніж дотримуватися стратегії, відповідної сідлової точці. Математично це можна записати й інакше:

де i, j - Будь-які чисті стратегії відповідно гравців 1 і 2; (Iо, jо) - Стратегії, що утворюють сідлової крапку.

Таким чином, виходячи з (3), сідловий елемент є мінімальним в iо-му рядку і максимальним в jо-му стовпці у матриці А. Відшукання сідлової точки матриці А відбувається наступним чином: в матриці А послідовно в кожній рядку знаходять мінімальний елемент і перевіряють, чи є цей елемент максимальним у своєму стовпці. Якщо так, то він і є сідлової елемент, а пара стратегій, йому відповідна, утворює сідлової крапку. Пара чистих стратегій (Iо, jо) гравців 1 і 2, утворює сідлові точки і сідлової елемент , Називається рішенням гри. При цьому і називаються оптимальними чистими стратегіями відповідно гравців 1 і 2.



2.3 Рішення матричних ігор у змішаних стратегіях шляхом зведення до задачі лінійного програмування

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

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

Таким чином, якщо гравець 1 має m чистих стратегій 1,2 ,..., m, то його змішана стратегія x - Це набір чисел x = (x1, ..., xm) задовольняють співвідношенням

xi > = 0 (i = 1, m), = 1.

Аналогічно для гравця 2, який має n чистих стратегій, змішана стратегія y - Це набір чисел

y = (y1, ..., yn), yj > = 0, (j = 1, n), = 1.

Так як кожен раз застосування гравцем однієї чистої стратегії виключає застосування іншої, то чисті стратегії є несумісними подіями. Крім того, вони є єдиними можливими подіями.

Чистий стратегія є окремий випадок змішаної стратегії. Дійсно, якщо у змішаній стратегії будь-яка i-а чиста стратегія застосовується з вірогідністю 1, то всі інші чисті стратегії не застосовуються. І ця i-я чиста стратегія є окремим випадком змішаної стратегії. Для дотримання секретності кожен гравець застосовує свої стратегії незалежно від вибору іншого гравця.

Визначення. Середній виграш гравця 1 в матричній грі з матрицею А виражається у вигляді математичного очікування його виграшів

E (A, x, y) = = x A yT

Перший гравець має на меті за рахунок зміни своїх змішаних стратегій х максимально збільшити свій середній виграш Е (А, х, y), а другий - за рахунок своїх змішаних стратегій прагне зробити Е (А, х, y) мінімальним, тобто для вирішення гри необхідно знайти такі х і y, при яких досягається верхня ціна гри

Е (А, х, y).

Аналогічної повинна бути ситуація і для гравця 2, тобто нижня ціна гри повинна бути

Е (А, х, y).

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

Е (А, х, y) = Е (А, х, y) = Е (А, хо, уо).

Величина Е (А, хо, уо) називається при цьому ціною гри і позначається через u.

Є й інше визначення оптимальних змішаних стратегій: хо, уо називаються оптимальними змішаними стратегіями відповідно гравців 1 і 2, якщо вони утворюють сідлової точку:

Е (А, х, уо) <= Е (А, хо, уо) <= Е (А, хо, у)

Оптимальні змішані стратегії і ціна гри називаються рішенням матричної гри.

Основна теорема матричних ігор має вигляд:

Теорема (Про Мінімакс). Для матричної гри з будь-якою матрицею А величини

Е (А, х, y) і Е (А, х, y) існують і рівні між собою.

Гра m × n у загальному випадку не має наочної геометричної інтерпретації. Її рішення досить трудомістким при великих m і n, однак принципових труднощів не має, оскільки може бути зведене до вирішення завдання лінійного програмування.

Хай гра m × n задана платіжної матрицею p = (a ij), i = 1, 2, ..., m; j = 1, 2, ..., n. Гравець А має стратегіями A 1, A 2, ..., A m, гравець В - стратегіями B 1, B 2, ..., B m. Необхідно визначити оптимальні стратегії S * A = (p * 1, p * 2, ... , P * m) та S * B = (q * 1, q * 2, ... , Q * n), де p * i, q * j - ймовірності застосування відповідних чистих стратегій A i, B j, p * 1 + p * 2 +...+ p * m = 1, q * 1 + q * 2 +...+ q * n = 1.

Оптимальна стратегія S * A задовольняє наступній вимозі. Вона забезпечує гравцю А середній виграш, не менший, ніж ціна гри v, за будь-якої стратегії гравця В і виграш, рівний ціні гри v, при оптимальній стратегії гравця B. Без обмеження спільності вважаємо v> 0: цього можна домогтися, зробивши всі елементи a ij ≥ 0. Якщо гравець А застосовує змішану стратегію S * A = (p * 1, p * 2, ... , P * m) проти будь-якої чистої стратегії B j гравця В, то він отримує середній виграш, або математичне очікування виграшу a j = a 1j p 1 + a 2j p 2 +...+ a mj p m, о = 1, 2, ..., n (тобто елементи j-го стовпця платіжної матриці почленно множаться на відповідні ймовірності стратегій A 1, A 2, ..., A m і результати складаються).

Для оптимальної стратегії S * A всі середні виграші не менше ціни гри v, тому отримуємо систему нерівностей:

(2.3.1)

Кожне з нерівностей можна розділити на число v> 0. Введемо нові змінні:

x 1 = p 1 / v, x 2 = p 2 / v, ..., p m / v (2.3.2)

Тоді система (2.3.1) набуде вигляду:

(2.3.3)

Мета гравця А - максимізувати свій гарантований виграш, тобто ціну гри v.

Розділивши на v ≠ 0 рівність p 1 + p 2 + ... + p m = 1, отримуємо, що змінні x 1 (i = 1, 2, ..., m) задовольняють умові: x 1 + x 2 +. .. + x m = 1 / v. Максимізація ціни гри v еквівалентна мінімізації велічіни1 / v, тому завдання може бути сформульована таким чином: визначити значення змінних x i ≥ 0, i = 1, 2, ..., m, так, щоб вони задовольняли лінійним обмеженням (2.3.3) і при цьому лінійна функція

Z = x 1 + x 2 + ... + x m, (2.3.4)

зверталася до мініму м. Це завдання лінійного програмування. Вирішуючи завдання (2.3.3) - (2.3.4), отримуємо оптимальне рішення p * 1 + p * 2 + ... + p * m і оптимальну стратегію S A .

Для визначення оптимальної стратегії S * B = (Q * 1 + q * 2 + ... + q * n) слід врахувати, що гравець В прагне мінімізувати гарантований виграш, тобто знайти . Змінні q 1, q 2, ..., q n задовольняють нерівності:

(2.3.5)

які випливають з того, що середній програш гравця В не перевершує ціни гри, яку б чисту стратегію не застосовував, гравець А.
Якщо позначити

y j = q j / v, j = 1, 2, ..., n, (2.3.6)

отримуємо систему нерівностей:

(2.3.7)

Змінні y j (1, 2, ..., n) задовольняють умові .

Гра звелася до наступної задачі

Визначити значення змінних y j ≥ 0, j = 1, 2, ..., n, які задовольняють системі нерівностей (2.3.7) і максимізують лінійну функцію

Z '= y 1 + y 2 + ... + y n, (2.3.8)

Рішення задачі лінійного програмування (2.3.6), (2.3.7) визначає оптимальну стратегію S * B = (q * 1 + q * 2 + ... + q * n). При цьому ціна гри

v = 1 / max, Z '= 1 / min Z (2.3.9)

Склавши розширені матриці для задач (2.3.3), (2.3.4) і (2.3.7), (2.3.8), переконуємося, що одна матриця вийшла з іншої транспонування:

Таким чином, завдання лінійного програмування (2.3.3), (2.3.4) і (2.3.7), (2.3.8) є взаємно-подвійними. Очевидно, при визначенні оптимальних стратегій в конкретних завданнях слід вибрати ту з взаємно-двоїстих задач, рішення якої менш трудомістким, а рішення іншої задачі знайти за допомогою теорем подвійності.

3. Практична частина

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

Продукція / сировина

А

У

З

Запаси сировини, од.

I

4

2

0

19

II

0

1

1

= 8

III

1

2

0

24

Прибуток, ден. од.

3

7

2

max

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

Вид таблиці за завданням поставленого завдання:

Вид сировини

Норми витрат сировини (кг) на одиницю продукції


А

У

З

I

II

III

4

0

1

2

1

2

0

1

0

Ціна одиниці продукції (грн.)

3

7

2

Рішення поставленого завдання:

Припустимо, що виробляється x 1 виробів А, виробів У і виробів С. Для визначення оптимального плану виробництва потрібно вирішити завдання, що складається в максимізації цільової функції

3.1.Построім математичну модель задачі:

тоді функція мети:

Z -0 = 3 X 1 + 7 X 2 + 2 X 3 - сукупний прибуток від продажу виробленої продукції, яку потрібно максимізувати.

Підрахуємо витрати сировини:

Сировина 1-го типу: 4 х1 + 2 х2 + 0 х3, за умовою витрати не перевершують 19,

Сировина 2-го типу: 0 х1 + 1 х2 + 1 х3, за умовою витрати не перевершують 8,

Сировина 3-го типу: 1 x 1 + 2 x 2 + 0 x 3, за умовою витрати не перевершують 24.

при наступних умовах:

4

X 1

+

2

X 2

+

0

X 3

+

X 4

19

0

X 1

+

1

X 2

+

1

X 3

+

X 5

=

8

1

X 1

+

2

X 2

+

0

X 3

+

X 6

24

X 1, X 2, X 3 ≥ 0.

4X 1 +2 X 2 + X 4 ≤ 19

X 2 + X 3 + X 5 = 8

X 1 + 2 X 2 + X 6 ≤ 24

3.2 Вибираємо метод рішення і наводимо завдання до канонічного вигляду:

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

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

Отримали математичну модель. Необхідно максимізувати функцію мети ↓

Z-0 (x1, x2, x3) = 3X 1 + 7X 2 + 2X 3 → max

Введемо додаткові змінні X 4, X 5, X 6.

Z-0 =

3

X 1

+

7

X 2

+

2

X 3

à (max)

при системі обмежень:










Перетворимо перше обмеження:

4

X 1

+

2

X 2

+

0

X 3

+

X 4

=

19

0

X 1

+

1

X 2

+

1

X 3

+

X 5

=

8

1

X 1

+

2

X 2

+

0

X 3

+

X 6

=

24

Отримали завдання:

4X 1 +2 X 2 + X 4 = 19

X 2 + X 3 + X 5 = 8

X 1 +2 X 2 + X 6 = 24

3.3 Вирішуємо задачу шляхом зведення до задачі лінійного програмування:

X i ≥ 0; 0 - Z =-3X 1 --7X 2 --2X 3

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

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

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

за умов

де

Вирішимо задачу симплекс-методом

Будуємо початкову симплекс-таблицю:

Базисні перемінні

X 1

X 2

X 3



X 4

X 5

X 6

Вільні члени

X 4

4

2

0



1

0

0

19

X 5

0

1

1



0

1

0

8

X 6

1

2

0



0

0

1

24

0-Z

-3

-7

-2



0

0

0

0


Так як у стовпці вільних членів немає негативних елементів, то знайдено допустиме рішення. Так як у рядку 0 - Z є негативні елементи, то отримане рішення не оптимально. Для визначення ведучого шпальти знайдемо максимальний по модулю негативний елемент у рядку 0 - Z (-7). А ведуча рядок та, у якої найменше позитивне відношення вільного члена до відповідного елементу ведучого шпальти.

Перерахуємо таблицю:

Базисні перемінні

X 1

X 2

X 3

X 4

X 5

X 6



Вільні члени

X 4

4

-2

-2

1

0

0



3

X 2

0

1

1

0

1

0



8

X 6

1

-2

-2

0

0

1



8

0-Z

-3

7

5

0

0

0



56

Так як у стовпці вільних членів немає негативних елементів, то знайдено допустиме рішення. Так як у рядку 0 - Z є негативні елементи, то отримане рішення не оптимально. Для визначення ведучого шпальти знайдемо максимальний по модулю негативний елемент у рядку 0 - Z (-3). А ведуча рядок та, у якої найменше позитивне відношення вільного члена до відповідного елементу ведучого шпальти.

Тоді канонічну форму завдання ЛП можна представити в наступному матричному вигляді еквівалентному початкового:

Z = CX → max,

AX = B,

X ≥ 0.

де 0 - нульова матриця-стовпець тієї ж розмірності, що й матриця X.

зауваження.

Не обмежуючи спільності, можна вважати, що вільні члени ненегативні, тобто bi ≥ 0, де i = ¯ 1, m (інакше обмежувальні рівняння можна помножити на (-1)).

Перерахуємо таблицю:

Базисні перемінні

X 4

X 5

X 3

Вільні члени

X 1

1 / 4

-1 / 2

-1 / 2

3 / 4

X 2

0

1

1

0

X 6

-1 / 4

-3 / 2

-3 / 2

29 / 4

0-Z

3 / 4

11 / 2

7 / 2

233 / 4

Ця таблиця є останньою, по ній читаємо відповідь завдання.

Знайдено оптимальне базисне рішення:

При якому Z max = 233 / 4 = 58,25 ден. од.

План виробництва:

X 1 = 3 / 4 = 0,75; X 2 = 0; X 3 = 0; X 4 = 3; X 5 = 0; X 6 = 29 / 4 = 7,25

Відповідно за рішенням, обчислюємо:

Z = 3 * 0,75 +7 * 0 +2 * 0 +3 +7,25 = 24

Z = 24

Відповідь поставленого завдання: План випуску продукції (Z) для отримання максимального прибутку, при тому, що сировина IIвіда було витрачено повністю дорівнює 24 (Z = 24). З ходу рішення задачі за умовою ми бачимо, що оцінений кожен з видів сировини, використовуваних для виробництва продукції.

Блок-схеми основних процедур при вирішенні і програмуючи

Алгоритм програми → Рис. 1.



























Малюнок 1-Алгоритм програми для вирішення ЗЛП (окремий випадок)

Програма до поставленого завдання (код програми)

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

Програма визначає:

План випуску продукції для отримання максимального прибутку.

1. Опис роботи програми, лістинг програми

1.1 Обгрунтування вибору мови

Програма для вирішення даного завдання складена на мові C + +. C + + являє собою систему програмування. Як будь-яка подібна система, C + + призначена для розробки програм і має дві характерні особливості: що створюються з її допомогою програми можуть працювати не тільки під управлінням Windows, але і в системі MS - DOS.

C + + являє собою найбільш повний пакет об'єктно-орієнтованого програмування. Мова простий у застосуванні і базується на C #, що спрощує створення програм, людям, знайомим з цією мовою.

1.2 Опис роботи програми

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

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

Програма виводить дані в рядок F /

    1. Лістинг програми

//------------------------------------------------ -------------------------------------------

# Include <stdio. H>

# Include <string.h>

# Include <math.h>

# Define PRECISION "% 6.2 f" / / формат виведення дробових чисел

# Define PRECISION 2 "% .2 f" / / він же тільки ціла частина будь-якої довжини

# Define MAXDIGIT 1000000 / / повинен бути дуже велике число (більше за всіх)

typedef enum

{

NEXT _ ITERATION, / / потрібно продовжувати ітерації

PLAN _ OPTIMAL, / / знайдений оптимальний опорний план

ODR _ BREAK, / / ОДР розімкнута

ODR _ EMPTY, / / ОДР порожня

DUAL _ DONE / * перший етап (побудова опорного плану) закінчено,

переходимо до пошуку оптім.оп.плана (звичайний Симплекс) * /

} Plan _ t;

int cn = 0; / / довжина вектора вихідного ур-я

int cnr = 0; / * cn, тільки без членів == 0 (cnr == cn _ real)

потрібно тільки для виводу скороченою таблиці * /

float * c = NULL; / / вихідне ур-е

int m = 0, n = 0; / / розміри матриці умов

float ** a = NULL; / / матриця умов

float * b = NULL; / / стовпчик вільних членів матриці умов

int * base = NULL; / / базові змінні

float zb = 0; / / оцінки оптимальності b

float * za = NULL; / / оцінки оптимальності a

int base _ column = -1; / / дозволяє стовпець

int base _ row = -1; / / роздільна рядок

bool full _ table = true; / / вид виведеної таблиці: true == повна, false == стисла

void FreeMem ()

{

delete [] za;

delete [] base;

delete [] b;

for (int i = 0; i <m; i + +)

delete [] a [i];

delete [] a;

delete [] c;

}

bool ReadInput (char * filename)

{

int i, j;

FILE * f = fopen (filename, "r");

if (NULL == f)

return false;

/ / Вихідне ур-е

fscanf (f, "% i", & cn);

c = new float [cn];

cnr = cn;

for (i = 0; i <cn; i + +)

{

fscanf (f, "% f", & c [i]);

if (0 == c [i]) cnr -;

}

/ / Матриця умов

fscanf (f, "% i% i", & n, & m);

a = new float * [m];

for (i = 0; i <m; i + +)

a [i] = new float [n];

b = new float [m];

for (j = 0; j <m; j + +)

{

for (i = 0; i <n; i + +)

fscanf (f, "% f", & a [j] [i]);

fscanf (f, "% f", & b [j]);

}

/ / Базові змінні

base = new int [m];

for (j = 0; j <m; j + +)

{

fscanf (f, "% i", & base [j]);

- Base [j];

}

/ / Прапор - повну або стислу таблицю виводити?

int flag = 1;

fscanf (f, "% i", & flag);

full_table = flag? true: false;

fclose (f);

za = new float [n];

/ / For (i = 0; i <n; i + +) za [i] = 0; / /! лише для налагодження!

return true;

}

/ / Обчислення оцінок оптимальності {za == delta _ j [] and zb == Z}

void EvaluationOptimal ()

{

int i, j;

zb = 0;

for (i = 0; i <n; i + +) za [i] = 0;

for (j = 0; j <m; j + +)

{

for (i = 0; i <n; i + +)

za [i] + = c [base [j]] * a [j] [i];

zb + = c [base [j]] * b [j];

}

for (i = 0; i <n; i + +)

za [i] -= c [i];

}

/ / Побудова опорного плану (цей етап тільки в двоїстому симплекс-методі)

plan_t BuildPsevdoPlan ()

{

int i, j;

base _ column = -1; / / дозволяє стовпець

base _ row = -1; / / роздільна рядок

float acc; / / тимчасово: акумулятор - буде зберігати min, max, etc.

acc = 0; / / min від'ємне значення b

for (j = 0; j <m; j + +)

if (b [j] <acc)

{

acc = b [j];

base_row = j;

}

if (-1 == base_row)

return DUAL_DONE;

acc =-MAXDIGIT; / / max ставлення za до отріцат. ел - там в рядку base_row

for (i = 0; i <n; i + +)

{

float temp;

if (a [base_row] [i] <0 & & (temp = za [i] / a [base_row] [i])> acc)

{

acc = temp;

base_column = i;

}

}

if (-1 == base_column)

return ODR_EMPTY;

return NEXT _ ITERATION;

}

/ / Перевірка опорного плану на оптимальність

plan_t CheckStrongPlan ()

{

int i, j;

float za_min = 0;

base_column = -1; / / дозволяє стовпець

base _ row = -1; / / роздільна рядок

/ / Вибір дозволяє стовпця

for (i = 0; i <n; i + +)

{

if (za [i]> = 0)

continue;

else if (za [i] <za_min)

{

za_min = za [i];

base_column = i;

}

}

if (-1 == base_column)

return PLAN_OPTIMAL;

za _ min = MAXDIGIT;

/ / Вибір роздільної рядки

for (j = 0; j <m; j + +)

{

if (a [j] [base_column]> 0)

{

float t = b [j] / a [j] [base_column];

if (t <za_min)

{

za_min = t;

base_row = j;

}

}

}

if (-1 == base_row)

return ODR_BREAK;

return NEXT_ITERATION;

}

/ / Перетворення таблиці за ф-лам Жордана-Гаусса

void JGTransformation (int base_row, int base_column)

{

/ / Перевірка на всяк випадок: щоб не було поділу на нуль

if (0 == a [base_row] [base_column]) return;

base [base_row] = base_column;

int i, j;

float ** a2 = new float * [m]; / / матриця умов

float * b 2 = new float [m]; / / стовпчик вільних членів матриці умов

memcpy (b2, b, m * sizeof (float));

for (j = 0; j <m; j + +)

{

a2 [j] = new float [n];

memcpy (a2 [j], a [j], n * sizeof (float));

}

for (j = 0; j <m; j + +)

{

for (i = 0; i <n; i + +)

{

if (i == base_column)

{

a2 [j] [i] = (float) (j == base_row? 1: 0);

}

else

{

if (j == base_row)

a2 [j] [i] = a [j] [i] / a [base_row] [base_column];

else

a2 [j] [i] = a [j] [i] - a [base_row] [i] * a [j] [base_column] /

a [base_row] [base_column];

}

}

if (j == base_row)

b2 [j] = b [j] / a [base_row] [base_column];

else

b2 [j] = b [j] - b [base_row] * a [j] [base_column] /

a [base_row] [base_column];

}

memcpy (b, b2, m * sizeof (float));

delete [] b2;

for (j = 0; j <m; j + +)

{

memcpy (a [j], a2 [j], n * sizeof (float));

delete [] a2 [j];

}

delete [] a2;

}

/ / Перевірка: чи входить номер стовпця в число базисних змінних

bool InBase (int num)

{

for (int j = 0; j <m; j + +)

if (num == base [j])

return true;

return false;

}

/ / Вивід лінії символів

void Rule (char c, int amount = full_table? 5 + (n +2) * 8: 5 + (cnr +1) * 8)

{

for (int i = 0; i <amount; i + +)

printf ("% c", c);

printf ("\ n");

}

/ / Вивід Симплекс - таблиці

void ShowTable ()

{

int i, j;

static int iteration = 0;

printf ("[% i] \ n", iteration + +);

if (full_table)

/ / Повна таблиця

{

Rule ('=');

printf ("Баз. | | |");

for (i = 0; i <cn; i + +)

printf (PRECISION "|", c [i]);

printf ("\ nпер. | Ci | Bi |");

Rule ('-', n * 8);

printf ("| | |");

for (i = 0; i <cn; i + +)

printf ("x% i |", i +1);

printf ("\ n");

Rule ('=');

for (j = 0; j <m; j + +)

{

printf ("x% i |" PRECISION "|" PRECISION "|",

base [j] +1, c [base [j]], b [j]);

for (i = 0; i <n; i + +)

printf (PRECISION "% c |", a [j] [i],

base_column == i & & base_row == j ?'*':' ');

printf ("\ n");

}

Rule ('=');

printf ("Z | --- |" PRECISION "|", zb);

for (i = 0; i <n; i + +)

printf (PRECISION "|", za [i]);

printf ("\ n");

Rule ('-');

}

else

/ / Стисла таблиця

{

Rule ('=');

printf ("БvС >|");

for (i = 0; i <cn; i + +)

{

if (! InBase (i))

printf ("x% i |", i +1);

}

printf ("Bi | \ n");

Rule ('=');

for (j = 0; j <m; j + +)

{

printf ("x% i |", base [j] +1);

for (i = 0; i <n; i + +)

{

if (! InBase (i))

printf (PRECISION "% c |", a [j] [i],

base_column == i & & base_row == j ?'*':' ');

}

printf (PRECISION "| \ n", b [j]);

}

Rule ('=');

printf ("Z |");

for (i = 0; i <n; i + +)

{

if (! InBase (i))

printf (PRECISION "|", za [i]);

}

printf (PRECISION "| \ n", zb);

Rule ('-');

}

if (base_column> -1 & & base_row> -1)

printf ("Дозволяючий стовпець:% 2 i \ n Роздільна рядок:% 2 i \ n \ nX = (",

base_column +1, base_row +1);

else

printf ("\ nX =(");

for (i = 0; i <n; i + +)

{

int basen = -1;

for (j = 0; j <m; j + +)

if (base [j] == i) {basen = j; break;}

printf (PRECISION2 "% c", -1 == basen? 0: b [basen], i! = n-1 ?',':')');

}

printf ("\ nZ =" PRECISION2 "\ n \ n \ n", zb);

}

int main (int argc, char * argv [])

{

if (argc <2)

{

printf ("Missing argument \ n");

return -1;

}

if (! ReadInput (argv [1]))

{

printf ("Error open file% s. \ n", argv [1]);

return -1;

}

printf ("*** Двоїстий симплекс-метод *** \ n \ n ");

plan_t plan;

bool dual_done = false;

for (int k = 0; k <2 * m +1; ​​k + +)

{

if (k) JGTransformation (base_row, base_column);

EvaluationOptimal ();

if (dual_done)

{

plan = CheckStrongPlan ();

}

else

{

plan = BuildPsevdoPlan (); / / only in dual-simplex

if (DUAL_DONE == plan)

{

dual_done = true;

plan = CheckStrongPlan ();

}

}

ShowTable ();

if (NEXT_ITERATION! = plan)

{

char * s;

switch (plan)

{

case PLAN_OPTIMAL: s = "Опорний план оптимальний"; break;

case ODR _ BREAK: s = "Область допустимих рішень розімкнена"; break;

case ODR _ EMPTY: s = "Область допустимих рішень порожня"; break;

}

printf ("\ n% s. \ n", s);

break;

}

}

FreeMem ();

return 0;

}

//------------------------------------------------ -----------------------------------------

Результат роботи програми

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

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

3.4. Аналіз результату вирішення поставленого завдання

1. Завдання аналізу, джерела інформації

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

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

Завдання аналізу забезпеченості та використання матеріальних ресурсів:

а) оцінка реальності планів матеріально-технічного постачання, ступеня їх виконання та впливу на обсяг виробництва продукції, її собівартість і інші показники;

б) оцінка рівня ефективності використання матеріальних ресурсів;

в) виявлення внутрішньовиробничих резервів економії матеріальних ресурсів та розробка конкретних заходів щодо їх використання.

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

2. Аналіз забезпеченості підприємства матеріальними ресурсами

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

потреби в матеріальних ресурсах джерелами покриття. Очі можуть бути зовнішніми і внутрішніми. До зовнішніх джерел відносяться матеріальні ресурси, що надходять від постачальників відповідно до укладених договорів.

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

За заданою завдання ми бачимо, що:

Для виробництва трьох видів продукції використовується три види сировини. Норми витрат кожного з видів сировини на одиницю продукції даного виду, запаси сировини, а також прибуток з одиниці продукції.

Вид сировини

Норми витрат сировини (кг) на одиницю продукції


А

У

З

I

II

III

4

0

1

2

1

2

0

1

0

Ціна одиниці продукції (грн.)

3

7

2

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

Z -0 = 3 X 1 + 7 X 2 + 2 X 3

4

X 1

+

2

X 2

+

0

X 3

+

X 4

19

0

X 1

+

1

X 2

+

1

X 3

+

X 5

=

8

1

X 1

+

2

X 2

+

0

X 3

+

X 6

24

X 1, X 2, X 3 ≥ 0.

4X 1 +2 X 2 + X 4 ≤ 19

X 2 + X 3 + X 5 = 8

X 1 + 2 X 2 + X 6 ≤ 24

  1. Друге, оцінив кожен з видів сировини, використовуваних для виробництва продукції.

Z -0 = 3 X 1 + 7 X 2 + 2 X 3 → max

Ввів додаткові змінні X 4, X 5, X 6.

Z-0 =

3

X 1

+

7

X 2

+

2

X 3

à (max)

Обмеження:

4

X 1

+

2

X 2

+

0

X 3

+

X 4

=

19

0

X 1

+

1

X 2

+

1

X 3

+

X 5

=

8

1

X 1

+

2

X 2

+

0

X 3

+

X 6

=

24

3. Побудував математичну модель задачі;

4X 1 +2 X 2 + X 4 = 19

X 2 + X 3 + X 5 = 8

X 1 +2 X 2 + X 6 = 24

4. Вибрав метод рішення задачі і привів завдання до канонічного вигляду;

X i ≥ 0; 0 - Z =-3X 1 --7X 2 --2X 3

5. Вирішив завдання шляхом зведення до задачі лінійного програмування;

Базісниепеременние

X 1

X 2

X 3



X 4

X 5

X 6

Свободниечлени

X 4

4

2

0



1

0

0

19

X 5

0

1

1



0

1

0

8

X 6

1

2

0



0

0

1

24

0-Z

-3

-7

-2



0

0

0

0


Перерахував таблицю:

Базисні перемінні

X 1

X 2

X 3

X 4

X 5

X 6



Вільні члени

X 4

4

-2

-2

1

0

0



3

X 2

0

1

1

0

1

0



8

X 6

1

-2

-2

0

0

1



8

0 - Z

-3

7

5

0

0

0



56

Перерахував таблицю:

Базисні перемінні

X 4

X 5

X 3

Вільні члени

X 1

1 / 4

-1 / 2

-1 / 2

3 / 4

X 2

0

1

1

8

X 6

-1 / 4

-3 / 2

-3 / 2

29 / 4

0-Z

3 / 4

11 / 2

7 / 2

233 / 4

Знайшов оптимальне базисне рішення

  1. Потім побудував блок схему до завдання з написанням програми і виведенням на друк програмного коду.

  2. Аналізом мого результату рішення складається з правил оптимального рішення задачі з поставленого умови.

Порядок роботи з симплекс таблицею

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

Алгоритм переходу до наступної таблиці такий:

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

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

Цей коефіцієнт називається що дозволяє, а рядок у якій він знаходиться ключовою; надалі базисна змінна, що відповідає рядку дозволяє елемента, повинна бути переведена в розряд вільних, а вільна змінна, що відповідає стовпцю дозволяє елемента, вводиться до числа базисних. Будується нова таблиця, яка містить нові назви базисних змінних: поділяємо кожен елемент ключовий рядка (виключаючи стовпець вільних членів) на дозволяючий елемент і отримані значення записуємо в рядок зі зміненою базисної змінної нової симплекс таблиці .. Рядок дозволяє елемента ділиться на цей елемент і отриманий рядок записується в нову таблицю на те ж місце в новій таблиці всі елементи ключового стовпця = 0, крім розрізає, він завжди дорівнює 1. Стовпець, у якого в ключовий рядку є 0, в новій таблиці буде таким же рядок, у якої в ключовому стовпці є 0, в новій таблиці буде такий же в інші клітини нової таблиці записується результат перетворення елементів старої таблиці: В результаті отримуємо нову симплекс- таблицю, що відповідає новому базисному рішенням. Тепер слід переглянути рядок цільової функції (індексний), якщо в ній немає негативних значень (в завдання на знаходження максимального значення), яких позитивних (в завдання на знаходження мінімального значення) крім стоїть на місці (вільного стовпця), то значить, що оптимальне рішення отримано. В іншому випадку, переходимо до нової симплекс таблиці по вище описаним алгоритмом.

4. ВИСНОВКИ ТА РЕКОМЕНДАЦІЇ ЩОДО ПРАКТИЧНОГО ВИКОРИСТАННЯ

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

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

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

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

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

У висновку свого проектування хочу підвести підсумок в цілому "Рішенню матричних ігор у змішаних стратегіях".

Класифікацію ігор можна проводити: за кількістю гравців, кількістю стратегій, характером взаємодії гравців, характером виграшу, кількості ходів, станом інформації і т.д.

Залежно від кількості гравців розрізняють гри двох і n гравців. Перші з них найбільш вивчені. Ігри трьох і більше гравців менш досліджені через що виникають принципових труднощів і технічних можливостей одержання рішення. Чим більше гравців - тим більше проблем.

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

За характером взаємодії ігри поділяються на:

1) безкоаліційний: гравці не мають права брати участь в угодах, утворювати коаліції;

2) коаліційні (Кооперативні) - можуть вступати в коаліції.

У кооперативних іграх коаліції наперед визначені.

За характером виграшів ігри поділяються на: ігри з нульовою сумою (Загальний капітал усіх гравців не змінюється, а перерозподіляється між гравцями; сума виграшів всіх гравців дорівнює нулю) та ігри з ненульовий сумою.

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

Матрична гра - це кінцева гра двох гравців з нульовою сумою, в якій задається виграш гравця 1 у вигляді матриці (рядок матриці відповідає номеру застосовуваної стратегії гравця 2, стовпець - номеру застосовуваної стратегії гравця 2; на перетині рядка і стовпця матриці знаходиться виграш гравця 1, відповідний застосовуваним стратегіям).

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

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

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

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

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

Висновок курсового проектування по темі завдання "Рішення матричної гри в змішаних стратегіях"

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

Важлива і форма надання гри. Зазвичай виділяють нормальну, або матричну, форму і розгорнуту, задану у вигляді дерева. Щоб встановити першу зв'язок зі сферою управління, гру можна описати таким чином. Два підприємства, що виробляють однорідну продукцію, стоять перед вибором. В одному випадку вони можуть закріпитися на ринку завдяки встановленню високої ціни, яка забезпечить їм середню картельну прибуток ПK. При вступі в жорстку конкурентну боротьбу обидва отримують прибуток ПW. Якщо один з конкурентів встановлює високу ціну, а другий - низьку, то останній реалізує монопольний прибуток ПM, іншого ж зазнає збитків ПG. Подібна ситуація може, наприклад, виникнути коли обидві фірми повинні оголосити свою ціну, яка згодом не може бути переглянута. При відсутності жорстких умов обом підприємствам вигідно призначити низьку ціну. Стратегія "низької ціни" є домінуючою для будь-якої фірми: незалежно від того, яку ціну вибирає конкуруюча фірма, самої завжди краще встановлювати низьку ціну. Але в такому випадку перед фірмами виникає дилема, оскільки прибуток ПK (яка для обох гравців вище, ніж прибуток ПW) не досягається. Стратегічна комбінація "низькі ціни / низькі ціни" з відповідними платежами представляє собою рівновагу Неша, при якому жодному з гравців невигідно сепаратно відходити від обраної стратегії. Подібна концепція рівноваги є принциповою при вирішенні стратегічних ситуацій, але за певних обставин вона все ж таки потребує вдосконалення. Що стосується зазначеної вище дилеми, то її дозвіл залежить, зокрема, від оригінальності ходів гравців.

Список основних джерел опорної літератури

1. Б. Банді, Основи лінійного програмування. М: Вища мат., 1989р.

2. Б.Т Кузнєцов Математичні методи та моделі дослідження операцій. М: Юніті, 2005р.

3. В.Н. Ашихміна та ін Введення в математичне моделювання, М: Логос, 2005р.

4. Т.Л. Партико, І.І. Попов. Математичні методи, М: Форум, 2003.

5. В.В. Фаронов. Програмування на мові С + +, СПб.: Пітер, 2006р.


Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
308кб. | скачати


Схожі роботи:
Лінійне програмування 3 лютого
Лінійне програмування
Лінійне програмування 2
Лінійне програмування
Лінійне та нелінійне програмування
Динамічне і лінійне програмування
Лінійне програмування симплекс-методом Данцига
Лінійне програмування симплекс методом Данцига
Основні поняття математичного програмування Побудова моделі задачі лінійного програмування
© Усі права захищені
написати до нас