Excel-ohjelmointi.fi

Etusivu Hinnoittelu
Soita: 050 337 9941


VBA:n avulla pääset hyödyntämään mallinnusta ja matemaattista optimointia


Yrityksen toiminnan kehittämisessä on hyvin usein kyse erilaisista "optimointitehtävistä" eli parhaan ratkaisun hakemisesta johonkin järjestelykysymykseen:

Kun tällaisissa tehtävissä kyse on hiemankin mutkikkaammasta tilanteesta ei ihmisen ajatteluvoima riitä arvioimaan parasta ratkaisua. Tai sen hakeminen pelkän ihmisajattelun, laskimen, kynän ja paperin avulla vie kohtuuttomasti aikaa. Tällaisiin ongelmiin löytyy usein apua "matemaattisesta mallinnuksesta" ja "optimoinnista". Termit voivat kokematonta helposti säikäyttää, mutta tarkastellaan rauhallisesti esimerkin avulla mistä niissä oikein on kyse.


Esimerkki:

Yrityksellä on valittavana töistä A - G ne, joista saatava yhteistuotto on suurin kun työntekijöitä on käytettävissä 15. Mitkä työt seuraavaksi valitaan?
Töiden valinta
Optimaalinen ratkaisu on: työt A,B,F ja G joiden yhteistuotto on 34. Huomattakoon, että työntekijää kohden suurin tuotto tulee työstä C, mutta se ei silti ole mukana optimaalisessa ratkaisussa.

Ongelmana on siten: miten seuraavaksi tehtävät työt saadaan nopeasti ja luotettavasti valittua siten, että käytettävissä olevilla resursseilla saadaan mahdollisimman hyvä tuotto?

Kyseinen ongelma on esimerkki jo ennestään tunnetusta matemaattisesta mallista nimeltä "repuntäyttö" (Knapsack-problem). Siinä reppuun pitää pakata eri arvoisia tavaroita niin, että repun sisällön arvo on mahdollisimman suuri, mutta paino ei ylitä annettua maksimiarvoa. Töiden valintaan sovellettuna probleemana on valita seuraavana tehtäviksi ne työt, joiden yhteistuotto on mahdollisimman suuri mutta tarvittava työntekijämäärä ei ylitä ennalta asetettua rajaa.

Töiden valinta on siis matemaattisena mallina ajateltuna sama probleema kuin jo ennestään tunnettu repuntäyttö. Mikä vielä parempaa, repuntäyttö-ongelmalle on jo olemassa valmiina helposti ohjelmoitava algoritmi, jonka avulla saadaan haettua paras ratkaisu. Tämä sama algoritmi soveltuu siis myös töiden valintaan, eli sen avulla voidaan ratkoa mitkä työt seuraavaksi kannattaa valita tehtäviksi.

Edellä kuvatun järjestelyn lisäksi ohjelman tehtävänä on tietysti myös lukea syöttötiedot ja tulostaa ratkaisu. Silloinkin sen tekemisessä on ajallisesti kyse tämän esimerkin tapauksessa vain muutamasta tunnista. Pieni kustannus saatavaan hyötyyn nähden. Kun ohjelmaa tarvitaan, se voidaan käynnistää esimerkiksi 'napista painaen' ja luettelo töistä saadaan nopeasti esiin.


VBA on yleiskäyttöinen ohjelmointikieli ja sillä voidaan ohjelmoida myös tuo esimerkissä mainittu "repuntäyttö" -algoritmi ja sen avulla selvittää optimaalinen ratkaisu töiden valinnassa.

Samaa esimerkin Knapsack-algoritmia voidaan soveltaa myös moniin muihinkin eteen tuleviin järjestelytehtäviin:

Leikkausprobleema

Tietyn mittaisista putkista pitää sahata tietyt kpl-määrät eri mittaisia paloja siten, että hukkapalojen yhteispituus jää mahdollisimman pieneksi.


Lastausprobleema I

Joukko tavaroita kuljetettava paikasta A paikkaan B. Autoon voi lastata korkeintaan tilavuuden / suurimman sallitun painon verran tavaroita. Kuormiin valittava tavarat siten, että ajokertojen määrä tulee jäämään mahdollisimman pieneksi.


Lastausprobleema II

Yritys kokoaa tuotteitaan osista, joita tarvitaan useita kymmeniä yhteen valmiiseen tuotteeseen. Osat maalataan maalaamossa, johon ne siirtyvät koukkuihin ripustettuina hihnaa pitkin eteenpäin. Maalaamo on tietyn mittainen, joten sinne mahtuu kerrallaan vain muutama osa, sanokaamme 3 - 7 kpl, riippuen osien pituudesta.

Jos maalaamoon vietävät osat valitaan enempää miettimättä järjestyksessä siihen asti kun maalaamon asettama pituusraja tulee vastaan, seuraa siitä helposti resurssien hukkakäyttöä.

Tarkastellaan ongelmaa yksinkertaisilla luvuilla:

Maalaamon optimaalinen kuormittaminen

Huomataan, että 1. ratkaisussa maalaamoa joudutaan käyttämään kolme kertaa kun 2. ratkaisussa osat saadaan maalattua kahdella käyttökerralla. (Tässä paras ratkaisu on helppo hakea ilman mitään apuvälineitäkin, mutta todellisuudessa osia voi olla siis useita kymmeniä ja niiden mitat vaihtelevat ja ilmoitetaan esim. millimetreinä eikä metreinä.)



Edellä on esimerkkejä mallinnuksen ja optimoinnin hyödyntämisestä yritystoiminnassa (tässä saman Knapsack -probleeman eri sovellutuksia). On hyvä muistaa, että tietojenkäsittelyopissa ja sovelletussa matematiikassa on jo vuosikymmenien aikana mietitty ja laadittu parhaita algoritmeja erilaisiin toistuvasti eteen tuleviin "standarditilanteisiin", joten niitä kannattaa hyödyntää aina kun se on mahdollista. Ja vaikka et nyt itse osaisikaan arvioida, löytyisikö juuri omaan ongelmaasi valmista ratkaisua, niin kysyvä ei tieltä eksy. Ota rohkeasti yhteyttä ja kerro probleemastasi niin pääset nopeasti asiassasi eteen päin.

Kun haluat lisätietoja niin soita 050 337 9941 ja kysy lisää!