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 produktureklama
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