Двоїстий симплекс-метод онлайн калькулятор з покроковим розв'язком

F =

x1

 +

x2

 +

x3

 +

x4

x1

 +

x2

 +

x3

 +

x4

x1

 +

x2

 +

x3

 +

x4

x1

 +

x2

 +

x3

 +

x4

x1

 +

x2

 +

x3

 +

x4

Коментарі рішення
Без опису (тільки відповідь)

a

b

c

d

x

y

z

AC

i

ab
x2
xn

Randomize

Формат чисел
313131313135151515151552188552198585858586
Округлити до
Знаків після коми
10
=Розв'язати

  Про калькулятор двоїстого симплекс-методу

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

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

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

  • Перший елемент дозволяє розгорнути вікно вводу. Це може бути особливо корисно, коли таблиця не вміщається повністю на екрані. Якщо таблиця все ще не повністю видна після розгортання вікна, можна змінити масштаб за допомогою кнопок + / -;
  • Другий елемент копіює поточні вхідні дані задачі до буфера пам'яті. Це може бути корисно, коли ви часто розв'язуєте ту саму задачу ЛП або потрібно переносити дані між операціями;
  • Останній елемент вставляє раніше скопійовані вхідні дані, що дозволяє відновити дані задачі лише кількома кліками замість повторного введення вручну;

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

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

  Що таке двоїстий симплекс-метод?

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

  Як розв'язати задачу лінійного програмування двоїстим симплекс-методом?

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

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

Перехід до двоїстого симплексу
F(x) = 3x1+4x2 → max
2x1+x2600
225
5x1+4x21000
-2x2-150
0
Z(t) = 600t1+225t2+1000t3-150t4+0t5 → min
2t1+5t33
t1+4t3-2t44

Правила переходу

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

2) Коефіцієнти лівої частини обмежень двоїстого симплексу формуються транспонуванням матриці коефіцієнтів лівої частини обмежень прямої задачі;

3) Коефіцієнти правої частини обмежень двоїстого симплексу формуються зі значень цільової функції прямої задачі для відповідних керованих змінних;

4) Якщо F → max , то Z → min
Якщо ≤ , то ≥
Якщо = , то ≥

5) Якщо F → min , то Z → max
Якщо ≥ , то ≤
Якщо = , то ≤

Опис
F(x) = 600x1+225x2+1000x3-150x4+0x5 → min
F(x) = 600x1+225x2+1000x3-150x4+0x5+0x6+0x7+Mx8+Mx9 → min
2x1+5x33
2x1+5x3-x6+x8 = 3
x1+4x3-2x44
x1+4x3-2x4-x7+x9 = 4

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

Далі необхідно позбутися нерівностей, для чого вводимо компенсуючі змінні в ліву частину нерівностей. Якщо нерівність виду ≤, то компенсуюча змінна має знак +, якщо нерівність виду ≥, то компенсуюча змінна має знак -. Компенсуючі змінні входять до цільової функції задачі з нульовим коефіцієнтом.

Тепер у системі обмежень необхідно знайти достатню кількість базисних змінних. Кожне обмеження повинно мати одну базисну змінну. Базисна — це змінна, яка має коефіцієнт 1 при ній та зустрічається лише в одному обмеженні. Якщо в деякому обмеженні базисних змінних немає, то ми додаємо їх штучно, і штучні змінні входять до цільової функції з коефіцієнтом -M, якщо цільова функція прямує до max, і M, якщо цільова функція прямує до min.

Опис
2
Ітерація 1
BCbPx1x2x3x4x5x6x7x8x9Q
6002251000-150000MM
x8M320500-101035
x9M4104-200-1011
min7M3M-600-2259M-1000-2M+1500-M-M00

Елементи стовпця базису (B)

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

B1 = x8;

B2 = x9;

Елементи стовпця Cb

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

Cb1 = M;

Cb2 = M;

Значення вільних змінних і стовпця P

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

P1 = 3;

P2 = 4;

x1,1 = 2;

x1,2 = 0;

x1,3 = 5;

x1,4 = 0;

x1,5 = 0;

x1,6 = -1;

x1,7 = 0;

x1,8 = 1;

x1,9 = 0;

x2,1 = 1;

x2,2 = 0;

x2,3 = 4;

x2,4 = -2;

x2,5 = 0;

x2,6 = 0;

x2,7 = -1;

x2,8 = 0;

x2,9 = 1;

Значення цільової функції

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

MinP = (Cb1 * P1) + (Cb2 * P2) = (M * 3) + (M * 4) = 7M;

Оцінки керованих змінних

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

Minx1 = ((Cb1 * x1,1) + (Cb2 * x2,1)) - kx1 = ((M * 2) + (M * 1)) - 600 = 3M-600;

Minx2 = ((Cb1 * x1,2) + (Cb2 * x2,2)) - kx2 = ((M * 0) + (M * 0)) - 225 = -225;

Minx3 = ((Cb1 * x1,3) + (Cb2 * x2,3)) - kx3 = ((M * 5) + (M * 4)) - 1000 = 9M-1000;

Minx4 = ((Cb1 * x1,4) + (Cb2 * x2,4)) - kx4 = ((M * 0) + (M * -2)) - -150 = -2M+150;

Minx5 = ((Cb1 * x1,5) + (Cb2 * x2,5)) - kx5 = ((M * 0) + (M * 0)) - 0 = 0;

Minx6 = ((Cb1 * x1,6) + (Cb2 * x2,6)) - kx6 = ((M * -1) + (M * 0)) - 0 = -M;

Minx7 = ((Cb1 * x1,7) + (Cb2 * x2,7)) - kx7 = ((M * 0) + (M * -1)) - 0 = -M;

Minx8 = ((Cb1 * x1,8) + (Cb2 * x2,8)) - kx8 = ((M * 1) + (M * 0)) - M = 0;

Minx9 = ((Cb1 * x1,9) + (Cb2 * x2,9)) - kx9 = ((M * 0) + (M * 1)) - M = 0;

Елементи стовпця Q

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

Кількість змінних у базисі завжди стала, тому необхідно вибрати, яку змінну виводити з базису, для чого обчислюємо Q.

Елементи стовпця Q обчислюються шляхом ділення значень зі стовпця P на значення зі стовпця, що відповідає змінній, яка вводиться до базису:

Q1 = P1x1,3 = 35 = 35;

Q2 = P2x2,3 = 44 = 1;

Виводимо з базису змінну з найменшим додатним значенням Q.

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

Цей елемент дозволить нам обчислити елементи таблиці наступної ітерації.

Опис
3
Ітерація 2
BCbPx1x2x3x4x5x6x7x8x9Q
6002251000-150000MM
x3100035250100-150150
x9M135-3500-2045-1-4512
min135M+600-35M-200-2250-2M+150045M-200-M-145M+2000

Елементи стовпця базису (B)

За результатами обчислень попередньої ітерації виводимо змінну з базису x8 та ставимо на її місце x3. Всі інші клітинки залишаються незмінними.

Елементи стовпця Cb

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

Cb1 = 1000;

Cb2 = M;

Значення вільних змінних і стовпця P

(Дані з попередньої ітерації беруться як вхідні дані)

Заповнюємо нулями всі клітинки, що відповідають змінній, яка щойно введена до базису:

(Розв'язуючий елемент залишається незмінним)

x2,3 = 0;

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

x1,1 = x1,1x1,3 = 25 = 25;

x1,2 = x1,2x1,3 = 05 = 0;

x1,3 = x1,3x1,3 = 55 = 1;

x1,4 = x1,4x1,3 = 05 = 0;

x1,5 = x1,5x1,3 = 05 = 0;

x1,6 = x1,6x1,3 = -15 = -15;

x1,7 = x1,7x1,3 = 05 = 0;

x1,8 = x1,8x1,3 = 15 = 15;

x1,9 = x1,9x1,3 = 05 = 0;

P1 = P1x1,3 = 35 = 35;

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

x2,1 = (x2,1 * x1,3) - (x2,3 * x1,1)x1,3 = (1 * 5) - (4 * 2)5 = -35;

x2,2 = (x2,2 * x1,3) - (x2,3 * x1,2)x1,3 = (0 * 5) - (4 * 0)5 = 0;

x2,4 = (x2,4 * x1,3) - (x2,3 * x1,4)x1,3 = (-2 * 5) - (4 * 0)5 = -2;

x2,5 = (x2,5 * x1,3) - (x2,3 * x1,5)x1,3 = (0 * 5) - (4 * 0)5 = 0;

x2,6 = (x2,6 * x1,3) - (x2,3 * x1,6)x1,3 = (0 * 5) - (4 * -1)5 = 45;

x2,7 = (x2,7 * x1,3) - (x2,3 * x1,7)x1,3 = (-1 * 5) - (4 * 0)5 = -1;

x2,8 = (x2,8 * x1,3) - (x2,3 * x1,8)x1,3 = (0 * 5) - (4 * 1)5 = -45;

x2,9 = (x2,9 * x1,3) - (x2,3 * x1,9)x1,3 = (1 * 5) - (4 * 0)5 = 1;

P2 = (P2 * x1,3) - (x2,3 * P1)x1,3 = (4 * 5) - (4 * 3)5 = 135;

Значення цільової функції

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

MinP = (Cb1 * P1) + (Cb2 * P2) = (1000 * 35) + (M * 135) = 135M+600;

Оцінки керованих змінних

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

Minx1 = ((Cb1 * x1,1) + (Cb2 * x2,1)) - kx1 = ((1000 * 25) + (M * -35)) - 600 = -35M-200;

Minx2 = ((Cb1 * x1,2) + (Cb2 * x2,2)) - kx2 = ((1000 * 0) + (M * 0)) - 225 = -225;

Minx3 = ((Cb1 * x1,3) + (Cb2 * x2,3)) - kx3 = ((1000 * 1) + (M * 0)) - 1000 = 0;

Minx4 = ((Cb1 * x1,4) + (Cb2 * x2,4)) - kx4 = ((1000 * 0) + (M * -2)) - -150 = -2M+150;

Minx5 = ((Cb1 * x1,5) + (Cb2 * x2,5)) - kx5 = ((1000 * 0) + (M * 0)) - 0 = 0;

Minx6 = ((Cb1 * x1,6) + (Cb2 * x2,6)) - kx6 = ((1000 * -15) + (M * 45)) - 0 = 45M-200;

Minx7 = ((Cb1 * x1,7) + (Cb2 * x2,7)) - kx7 = ((1000 * 0) + (M * -1)) - 0 = -M;

Minx8 = ((Cb1 * x1,8) + (Cb2 * x2,8)) - kx8 = ((1000 * 15) + (M * -45)) - M = -145M+200;

Minx9 = ((Cb1 * x1,9) + (Cb2 * x2,9)) - kx9 = ((1000 * 0) + (M * 1)) - M = 0;

Елементи стовпця Q

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

Кількість змінних у базисі завжди стала, тому необхідно вибрати, яку змінну виводити з базису, для чого обчислюємо Q.

Елементи стовпця Q обчислюються шляхом ділення значень зі стовпця P на значення зі стовпця, що відповідає змінній, яка вводиться до базису:

Q1 = P1x1,6 = 35-15 = ;

Q2 = P2x2,6 = 13545 = 2;

Виводимо з базису змінну з найменшим додатним значенням Q.

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

Цей елемент дозволить нам обчислити елементи таблиці наступної ітерації.

Опис
4
Ітерація 3
BCbPx1x2x3x4x5x6x7x8x9Q
6002251000-150000MM
x3100011401-1200-14014
x602-3400-21201-114-1114
min1000-350-2250-35000-250-M-M+250

Елементи стовпця базису (B)

За результатами обчислень попередньої ітерації виводимо змінну з базису x9 та ставимо на її місце x6. Всі інші клітинки залишаються незмінними.

Елементи стовпця Cb

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

Cb1 = 1000;

Cb2 = 0;

Значення вільних змінних і стовпця P

(Дані з попередньої ітерації беруться як вхідні дані)

Заповнюємо нулями всі клітинки, що відповідають змінній, яка щойно введена до базису:

(Розв'язуючий елемент залишається незмінним)

x1,6 = 0;

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

x2,1 = x2,1x2,6 = -3545 = -34;

x2,2 = x2,2x2,6 = 045 = 0;

x2,3 = x2,3x2,6 = 045 = 0;

x2,4 = x2,4x2,6 = -245 = -212;

x2,5 = x2,5x2,6 = 045 = 0;

x2,6 = x2,6x2,6 = 4545 = 1;

x2,7 = x2,7x2,6 = -145 = -114;

x2,8 = x2,8x2,6 = -4545 = -1;

x2,9 = x2,9x2,6 = 145 = 114;

P2 = P2x2,6 = 13545 = 2;

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

x1,1 = (x1,1 * x2,6) - (x1,6 * x2,1)x2,6 = (25 * 45) - (-15 * -35)45 = 14;

x1,2 = (x1,2 * x2,6) - (x1,6 * x2,2)x2,6 = (0 * 45) - (-15 * 0)45 = 0;

x1,3 = (x1,3 * x2,6) - (x1,6 * x2,3)x2,6 = (1 * 45) - (-15 * 0)45 = 1;

x1,4 = (x1,4 * x2,6) - (x1,6 * x2,4)x2,6 = (0 * 45) - (-15 * -2)45 = -12;

x1,5 = (x1,5 * x2,6) - (x1,6 * x2,5)x2,6 = (0 * 45) - (-15 * 0)45 = 0;

x1,7 = (x1,7 * x2,6) - (x1,6 * x2,7)x2,6 = (0 * 45) - (-15 * -1)45 = -14;

x1,8 = (x1,8 * x2,6) - (x1,6 * x2,8)x2,6 = (15 * 45) - (-15 * -45)45 = 0;

x1,9 = (x1,9 * x2,6) - (x1,6 * x2,9)x2,6 = (0 * 45) - (-15 * 1)45 = 14;

P1 = (P1 * x2,6) - (x1,6 * P2)x2,6 = (35 * 45) - (-15 * 135)45 = 1;

Значення цільової функції

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

MinP = (Cb1 * P1) + (Cb2 * P2) = (1000 * 1) + (0 * 2) = 1000;

Оцінки керованих змінних

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

Minx1 = ((Cb1 * x1,1) + (Cb2 * x2,1)) - kx1 = ((1000 * 14) + (0 * -34)) - 600 = -350;

Minx2 = ((Cb1 * x1,2) + (Cb2 * x2,2)) - kx2 = ((1000 * 0) + (0 * 0)) - 225 = -225;

Minx3 = ((Cb1 * x1,3) + (Cb2 * x2,3)) - kx3 = ((1000 * 1) + (0 * 0)) - 1000 = 0;

Minx4 = ((Cb1 * x1,4) + (Cb2 * x2,4)) - kx4 = ((1000 * -12) + (0 * -212)) - -150 = -350;

Minx5 = ((Cb1 * x1,5) + (Cb2 * x2,5)) - kx5 = ((1000 * 0) + (0 * 0)) - 0 = 0;

Minx6 = ((Cb1 * x1,6) + (Cb2 * x2,6)) - kx6 = ((1000 * 0) + (0 * 1)) - 0 = 0;

Minx7 = ((Cb1 * x1,7) + (Cb2 * x2,7)) - kx7 = ((1000 * -14) + (0 * -114)) - 0 = -250;

Minx8 = ((Cb1 * x1,8) + (Cb2 * x2,8)) - kx8 = ((1000 * 0) + (0 * -1)) - M = -M;

Minx9 = ((Cb1 * x1,9) + (Cb2 * x2,9)) - kx9 = ((1000 * 14) + (0 * 114)) - M = -M+250;

Відповідь

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

Значення цільової функції:

F* = 1000;

Змінні, що присутні в базисі, дорівнюють відповідним клітинкам стовпця P, всі інші змінні дорівнюють нулю:

x1 = 0;

x2 = 0;

x3 = 1;

x4 = 0;

x5 = 0;

Опис
Answer
F → max
F* = 1000
X* = (00100)
Змінні2Обмеження5Цільова функціяmaxF*1000

  Часті запитання

Що таке двоїстий симплекс-метод?

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

Коли слід використовувати двоїстий симплекс-метод замість прямого?

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

Як двоїстий симплекс-метод пов'язаний з прямою задачею?

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

Чи дає двоїстий симплекс-метод той самий оптимум, що й прямий симплекс-метод?

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

  Джерела