Lineární programování

Autor: MILAN

Lineární programování je metoda, která nám pomáhá najít nejlepší možné řešení určitého problému v situacích, kde máme omezené zdroje. Představte si, že máte firmu a chcete maximalizovat zisk, ale máte omezené množství surovin, pracovníků a času. Lineární programování vám pomůže najít optimální způsob, jak tyto zdroje využít, abyste dosáhli co nejvyššího zisku.

Představme si to na jednoduchém příkladu:

Máte firmu, která vyrábí stoly a židle. Za každý prodaný stůl získáte 3000 Kč a za každou židli 1500 Kč. Máte ale omezený počet pracovníků a každý pracovník může denně vyrobit buď 1 stůl nebo 2 židle. Máte celkem 10 pracovníků.

V tomto případě byste chtěli zjistit, kolik stolů a kolik židlí by vaši pracovníci měli vyrobit, abyste maximalizovali zisk. Trošku Vám to určitě připomíná takové ty úlohy o společné práci, které hustí učitelky matiky do děcek na základce, že? :D No, je to trošku složitější, ale zase to není žádná hrůza. 

V lineárním programování byste tento problém vyřešili tak, že byste napsali matematické rovnice, které reprezentují vaše omezení (počet pracovníků, počet výrobků, které mohou vyrobit) a váš cíl (maximalizovat zisk).

V našem příkladu by to vypadalo takto:

  1. Definujeme proměnné: x = počet stolů, které chceme vyrobit a y = počet židlí, které chceme vyrobit

  2. Nastavíme cíl: Maximalizovat zisk: 3000x+1500y

  3. Nastavíme omezení: Každý pracovník může vyrobit 1 stůl nebo 2 židle za den: x + 1 / 2y ≤ 10

  4. Řešíme problém: Hledáme hodnoty x a y, které maximalizují zisk a zároveň splňují omezení.

Tímto způsobem lineární programování umožňuje firmám optimalizovat své zdroje a maximalizovat své zisky, a to vše s pomocí jednoduchých matematických rovnic a modelů. Mohli bychom být poctiví matematici a spočítat to ručně, ale to není účelem. Účelem je tady umět použít metodu a dosáhnout správného výsledku.

Příklad 1.

Dobře, pojďme se podívat na reálný příklad z oblasti managementu projektů. Představme si, že jste manažerem projektu a máte k dispozici omezený počet hodin pracovníků na dokončení dvou klíčových úkolů projektu. Cílem je optimalizovat využití dostupných hodin pracovníků tak, aby byl projekt dokončen co nejefektivněji.

Problém:

Máte dva úkoly:

  1. Vývoj softwaru (VS)
  2. Testování softwaru (TS)

Máte k dispozici 100 hodin pracovníků. Každý úkol vyžaduje určitý počet hodin na dokončení a přináší určitý přínos (např. hodnotu pro zákazníka).

  • Vývoj softwaru (VS) vyžaduje 10 hodin na dokončení a přináší přínos 3000 Kč.
  • Testování softwaru (TS) vyžaduje 5 hodin na dokončení a přináší přínos 1500 Kč.

Cíl:

Maximalizovat celkový přínos při omezeném počtu hodin pracovníků.

V tomto příkladu se zaměřujeme na optimalizaci projektu v oblasti vývoje softwaru. Jste manažerem projektu a máte před sebou dva klíčové úkoly, které je třeba dokončit: vývoj softwaru a testování softwaru. Každý z těchto úkolů má své specifické požadavky na čas a přináší určitý finanční přínos. Máte k dispozici omezený počet hodin, konkrétně 100 hodin, které můžete rozdělit mezi tyto dva úkoly tak, aby byl celkový přínos co nejvyšší.

Vývoj softwaru vyžaduje 10 hodin práce a přináší přínos 3000 Kč, zatímco testování softwaru vyžaduje 5 hodin práce a přináší přínos 1500 Kč. Cílem je tedy najít takové rozdělení dostupných hodin mezi oba úkoly, které maximalizuje celkový přínos. Je třeba zvážit, kolik hodin by mělo být věnováno každému úkolu, aby byl dosažen optimální výsledek.

V tomto kontextu se snažíme najít rovnováhu mezi časem věnovaným vývoji a testování softwaru tak, aby byla maximalizována hodnota pro zákazníka a zároveň byly respektovány omezení v podobě dostupných hodin pracovníků. Je to otázka hledání optimálního kompromisu mezi dvěma klíčovými aspekty projektu, které mají různé nároky na čas a přinášejí různé hodnoty.

Tento problém je příkladem, jak lineární programování může být užitečným nástrojem pro manažery projektů, kteří se snaží optimalizovat alokaci zdrojů a dosáhnout co nejlepších výsledků v rámci daných omezení.

V tomto případě budeme používat lineární programování k nalezení optimálního rozdělení hodin mezi dva úkoly projektu tak, aby byl maximalizován celkový přínos.

Proměnné:

  • x: Počet hodin věnovaných vývoji softwaru (VS)
  • y: Počet hodin věnovaných testování softwaru (TS)

Cílová funkce:

Maximalizovat celkový přínos: Z = 3000x + 1500y

Omezení:

  1. Časové omezení: Celkový počet hodin věnovaných oběma úkolům nesmí překročit 100 hodin. 10x + 5y ≤ 100

  2. Nezápornost: Počet hodin věnovaných každému úkolu musí být nezáporný. y ≥ 0, x ≥ 0 

Řešení:

Nyní budeme hledat hodnoty x a y, které maximalizují cílovou funkci Z při dodržení všech omezení.

  • Hodnoty x a y nám řeknou, kolik hodin by mělo být věnováno vývoji softwaru a testování softwaru, aby byl celkový přínos maximální.
  • Hodnota Z bude maximální možný přínos, který můžeme dosáhnout při daných omezeních.

Pro výpočet použijte kód z následujícího souboru.

Pokračování brzy:)