Začíname s YALMIPom: 03. Nelineárna optimalizácia

YALMIP dokáže formulovať ľubovolné optimalizačné problémy bez ohľadu na to, či sú ohraničenia a účelová funkcia lineárne alebo nelineárne. Treba si však dôsledne uvedomiť, že nelineárne problémy sú vo všeobecnosti veľmi ťažko riešiteľné. Naviac hrozí riziko, že riešenie bude iba lokálne optimálne.

Ako príklad nelineárnej optimalizácie si zoberme nasledovnú úlohu:

Firma uvažuje, ako má nastaviť cenu produktu tak, aby maximalizovala zisk. Zistila, že ak cena bude x EUR a do reklamy investuje y EUR, potom dokáže predať $2000+4 \sqrt{y} - 20x$ kusov produktov. Naviac výroba jedného kusu produktu stojí 2 eurá a fixné výrobné náklady sú 20000 EUR.

Táto úloha má dve optimalizované premenné:

  • cena ako cenu produktu
  • reklama ako náklady na reklamu

pričom chceme maximalizovať zisk ako rozdiel medzi tržbami a nákladmi. Najskôr zadefinujeme optimalizované premenné:

sdpvar cena reklama

Následne vytvoríme účelovú funkciu:

predane_kusy = 2000 + 4*sqrtm(reklama) - 20*cena
trzby = cena*predane_kusy
naklady = 2*predane_kusy + reklama + 20000
zisk = trzby - naklady

a povieme YALMIPu, aby riešil problém maximalizácie účelovej funkcie bez ohraničení:

optimize([], -zisk)

Všimnime si, že optimalizujeme zápornú hodnotu zisku. YALMIP totiž štandardne rieši minimalizačné úlohy a teda na maximalizáciu musíme minimalizovať zápornú hodnotu účelovej funkcie.

Optimálne riešenie získame pomocou funkcie value:

optimalna_cena = value(cena)
optimalna_reklama = value(reklama)
maximalny_zisk = value(zisk)

Pričom ich hodnoty sú nasledovné:

optimalna_cena =
   63.2500

optimalna_reklama =
   1.5006e+04

maximalny_zisk =
   40025