Blog

Optimalno odlučivanje

Mario Juric

I u privatnom i u poslovnom životu odluke donosimo svakodnevno. Većinu tih odluka donosimo intuitivno bez puno razmišljanja. Nekad je to iz razloga što smo se već više puta našli u sličnoj situaciji pa već „znamo“ što treba napraviti. Ponekad nemamo dovoljno informacija pa je intuicija jedino što nam preostaje. Ponekad i kad imamo dovoljno informacija problem nam se čini trivijalan i odlučujemo „zdravo razumsku“ po intuiciji. Ipak i kad se problem čini trivijalan često intuicija zna prevariti i navesti nas da donesemo odluku koja nije optimalna.

Zašto nam treba optimizacija

Pogledajmo jednostavan problem putovanja djece u školskom autobusu: 300 djece putuje do zoološkog vrta. Škola može unajmiti autobuse s 40 i s 30 sjedala. Cijena najma autobusa s 40 sjedala je 500 eura, a autobusi s 30 sjedala koštaju 400 eura. Koliko autobusa oba tipa je potrebno unajmiti da bi se minimizirali troškovi? Iako može postojati više mogućnosti, s obzirom na broj unajmljenih autobusa, samo je jedno rješenje koje minimizira troškove najma. Na prvi pogled intuitivno rješenje bi bilo da se prvo popune veliki autobusi a preostala djeca smjeste u manji autobus (7 velikih autobusa i 1 manji što iznosi 3.900 eura najma). U konkretnom slučaju postoji i bolje rješenje kod kojeg je iznos najma 3.800 eura. To je moguće u slučaju kada je unajmljeno 6 autobusa s 40 sjedala i 2 autobusa s 30 sjedala.

Slika 1. Opis problema s najmom autobusa

Već i na ovako jednostavnom problemu vidi se potreba za primjenom pouzdanijeg načina donošenja odluka koje će uvijek davati optimalan rezultat. To je još više izraženo na stvarnim poslovnim problemima koji imaju na stotine a ponekad tisuće i milijune varijabli na temelju kojih treba odlučivati. Osim toga, uz stvarne poslovne probleme primjenom optimizacije povrat ulaganja neće biti 100 eura kao u našem problemu s autobusom, već se taj iznos računa u milijunima.

Optimizacija je proces pronalaženja optimalnog rješenja iz skupa svih mogućih rješenja. U taj skup ulaze sva rješenja koja zadovoljavaju zadane uvjete i ograničenja koja su unaprijed zadana ovisno o zahtjevima modela, a upravo to najbolje rješenje bilo bi ono koje uz je riječ o minimiziranju troškova (proizvodnje, transporta…) uz maksimiziranje profita.

Optimizacijski alati

Iako je moguće optimizaciju raditi pomoću MS Excel Solvera ili u nekom od alata otvorenog koda preporuka ja da se zahtjevnije optimizacijske probleme koje uključuju veliki broj varijabli koriste komercijalna rješenja poput IBM ILOG CPLEX-a. To je nagrađivani IBM-ov optimizacijski softver za rješavanje optimizacijskih problema raznih tipova. IBM CPLEX dolazi od riječi “simpleks“ koja označava matematički algoritam iz područja linearnog programiranja. Algoritam se svodi na pretraživanje vrhova područja mogućnosti, odnosno izvedivosti (vrhova simpleksa), kako bismo pronašli u kojem se od tih vrhova pojavljuje optimalna vrijednost funkcije cilja. Unutar samog programa moguć je izbor velikog broja sučelja i programskih jezika te je moguća izrada snažnih vizualizacija.

Slika 2. Izgled IBM ILOG CPLEX Optimization Studio razvojnog sučelja

CPLEX kao programski jezik koristi OPL koji je intuitivan i olakšava razumijevanje ograničenja, ciljeva i troškova. Npr. prethodno spomenuti problem s najmom autobusa možemo opisati ovako u OPL programskom jeziku:

int nbKids=300;
float costBus40=500;
float costBus30=400;
 
dvar int+ nbBus40;
dvar int+ nbBus30;
 
minimize 
costBus40*nbBus40 + nbBus30*costBus30;
 
subject to
{
40*nbBus40+
nbBus30*30
>=nbKids;
}

Osim u OPL-u optimizacijske modele moguće je razvijati i u programskim jezicima Java, Python, .NET, C i C++. Npr. isti taj primjer napisan u Pythonu uz korištenje DoCplex biblioteke bi izgledao ovako:

from docplex.mp.model import Model

mdl = Model(name='buses’)
nbbus40 = mdl.integer_var(name='nbBus40')
nbbus30 = mdl.integer_var(name='nbBus30’)

mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids’)
mdl.minimize(nbbus40*500 + nbbus30*400)
mdl.solve()

print(nbbus40.solution_value);
print(nbbus30.solution_value);

Zaključak

Ovo je bio samo primjer kako se može iskoristiti optimizacija za rješavanje jednostavnog problema. U realnom životu primjena optimizacije je zaista široka i gotovo da ne postoji područje industrije koje ne teži optimiziranju određenih poslovnih procesa. Najčešće je cilj minimizirati troškove (proizvodnje, transporta, …) uz maksimiziranje profita i sve to uz poštivanje zadanih ograničenja. U konačnici osim vidljivih ušteda i većeg profita to povećava i zadovoljstvo korisnika koji će robu ili uslugu dobiti na vrijeme.

Reference:

https://alexfleischer-84755.medium.com/optimization-simply-do-more-with-less-zoo-buses-and-kids-66940178db6