Harmony Search algoritmus alkalmazása anyagáramlási feladatok tervezésénél



Hasonló dokumentumok
Konjugált gradiens módszer

M-Fájlok létrehozása MATLAB-ban

Megerősítéses tanulás 7. előadás

Számítógép és programozás 2

Mátrixjátékok tiszta nyeregponttal

Számítógépes döntéstámogatás. Genetikus algoritmusok

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Szimuláció RICHARD M. KARP és AVI WIGDERSON. (Készítette: Domoszlai László)

Optimumkeresés számítógépen

11. Előadás. 11. előadás Bevezetés a lineáris programozásba

További programozási esetek Hiperbolikus, kvadratikus, integer, bináris, többcélú programozás

Branch-and-Bound. 1. Az egészértéketű programozás. a korlátozás és szétválasztás módszere Bevezető Definíció. 11.

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás

LINEÁRIS PROGRAMOZÁSI FELADATOK MEGOLDÁSA SZIMPLEX MÓDSZERREL

Programozási segédlet

Algoritmusok és adatszerkezetek 2.

1. Alapok. #!/bin/bash

Feladatunk, hogy az alábbiakban látható tízgépes elrendezésre meghatározzuk az operátorok optimális kiosztását a vevői igények függvényében.

BASH script programozás II. Vezérlési szerkezetek

Algoritmuselmélet. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y.

Keresés képi jellemzők alapján. Dr. Balázs Péter SZTE, Képfeldolgozás és Számítógépes Grafika Tanszék

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

MŰSZAKKIOSZTÁSI PROBLÉMÁK A KÖZÖSSÉGI KÖZLEKEDÉSBEN

EuroOffice Optimalizáló (Solver)

Számítógépes képelemzés 7. előadás. Dr. Balázs Péter SZTE, Képfeldolgozás és Számítógépes Grafika Tanszék

Keresési algoritmusok, optimalizáció

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT- 4. kurzus. 3. Előadás: A mohó algoritmus

I. LABOR -Mesterséges neuron

1.1.1 Dátum és idő függvények

Intelligens Rendszerek Elmélete IRE 4/32/1

Andó Mátyás Felületi érdesség matyi.misi.eu. Felületi érdesség. 1. ábra. Felületi érdességi jelek

8. Előadás. Megyesi László: Lineáris algebra, , oldal. 8. előadás Mátrix rangja, Homogén lineáris egyenletrendszer

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA

Közönséges differenciál egyenletek megoldása numerikus módszerekkel: egylépéses numerikus eljárások

A PiFast program használata. Nagy Lajos

A számok kiíratásának formátuma

Általános algoritmustervezési módszerek

Gauss-Seidel iteráció

Dr. habil. Maróti György

First Prev Next Last Go Back Full Screen Close Quit

Matematikai modellezés

Vállalati modellek. Előadásvázlat. dr. Kovács László

Méretlánc átrendezés elmélete

Algoritmusok bonyolultsága

Orvosi készülékekben használható modern fejlesztési technológiák lehetőségeinek vizsgálata

Miskolci Egyetem Gépészmérnöki és Informatikai Kar Informatikai Intézet Alkalmazott Informatikai Intézeti Tanszék

Táblázatok kezelése. 1. ábra Táblázat kezelése menüből

További forgalomirányítási és szervezési játékok. 1. Nematomi forgalomirányítási játék

Kétfázisú szimplex algoritmus és speciális esetei

S Z Á L L Í T Á S I F E L A D A T

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008

15. LINEÁRIS EGYENLETRENDSZEREK

FEGYVERNEKI SÁNDOR, Valószínűség-sZÁMÍTÁs És MATEMATIKAI

Online algoritmusok. Algoritmusok és bonyolultságuk. Horváth Bálint március 30. Horváth Bálint Online algoritmusok március 30.

SZÁMÍTÁSOK A TÁBLÁZATBAN

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

1. Előadás Lineáris programozás

Robotok inverz geometriája

Követelmények Motiváció Matematikai modellezés: példák A lineáris programozás alapfeladata 2017/ Szegedi Tudományegyetem Informatikai Intézet

Követelmények Motiváció Matematikai modellezés: példák A lineáris programozás alapfeladata 2017/ Szegedi Tudományegyetem Informatikai Intézet

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

MATLAB alapismeretek I.

Boronkay György Műszaki Középiskola és Gimnázium

12. előadás. Egyenletrendszerek, mátrixok. Dr. Szörényi Miklós, Dr. Kallós Gábor

Mathematica automatikusan dolgozik nagy pontossággal, például 3 a 100-dik hatványon egy szám 48 tizedes jeggyel:

KOVÁCS BÉLA, MATEMATIKA II.

Függvények növekedési korlátainak jellemzése

Tartalomjegyzék. Tartalomjegyzék... 3 Előszó... 9

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉP SZINT Függvények

SZÁLLÍTÁSI FELADAT KÖRUTAZÁSI MODELL WINDOWS QUANTITATIVE SUPPORT BUSINESS PROGRAMMAL (QSB) JEGYZET Ábragyűjtemény Dr. Réger Béla LÉPÉSRŐL - LÉPÉSRE

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május)

SCILAB programcsomag segítségével

ÁRAMKÖRÖK SZIMULÁCIÓJA

First Prev Next Last Go Back Full Screen Close Quit. Matematika I

Láthatósági kérdések

Mesterséges Intelligencia MI

Lakóház tervezés ADT 3.3-al. Segédlet

Rekurzió. Dr. Iványi Péter

KOVÁCS BÉLA, MATEMATIKA I.

openbve járműkészítés Leírás az openbve-hez kapcsolódó extensions.cfg fájl elkészítéséhez

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Bevezető. Mi is az a GeoGebra? Tények

OPERÁCIÓKUTATÁS, AZ ELFELEDETT TUDOMÁNY A LOGISZTIKÁBAN (A LOGISZTIKAI CÉL ELÉRÉSÉNEK ÉRDEKÉBEN)

Normák, kondíciószám

Függvények Megoldások

Felvételi tematika INFORMATIKA

Szinkronizmusból való kiesés elleni védelmi funkció

A Markowitz modell: kvadratikus programozás

angolul: greedy algorithms, románul: algoritmi greedy

Mio Technology Limited C510, C710. Gyors használati utasítás a Mio Map v3 programhoz. Magyar

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI

C++ programozási nyelv

SZOFTVERES SZEMLÉLTETÉS A MESTERSÉGES INTELLIGENCIA OKTATÁSÁBAN _ Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb.

Algoritmuselmélet. Bonyolultságelmélet. Katona Gyula Y.

A lineáris programozás alapjai

Navigáci. stervezés. Algoritmusok és alkalmazásaik. Osváth Róbert Sorbán Sámuel

BetBulls Opciós Portfolió Manager

Gibbs-jelenség viselkedésének vizsgálata egyszer négyszögjel esetén

Bevezetés a programozásba. 5. Előadás: Tömbök

Genetikus algoritmusok

Átírás:

Harmony Search algoritmus alkalmazása anyagáramlási feladatok tervezésénél Diplomamunka V0K13Q 2014

Tartalomjegyzék I. Előszó...3 II. A vállalatok átalakulása...5 III. A MATLAB bemutatása...7 III.1. A MATLAB programnyelv jellemzése...8 III.2. MATLAB parancsok...9 III.3. MATLAB változók... 10 IV. A Harmónia keresési algoritmus... 11 IV.1. Metaheurisztikák... 11 IV.2. Harmony Search algoritmus... 14 V. A függvény optimalizáló program... 17 V.1. A HSM program felépítése sorok alapján:... 17 V.2. ET funkciófájl leírása... 20 V.3. A függvény optimalizáló program használata... 22 IV.3.1. Egyszerű 5 változós tesztfüggvény... 22 V.3.2. Goldstein és Price 1. függvény... 24 V.3.3. Rosenbrock függvény... 27 V.4. A HSH program... 32 VI. Hátizsák probléma... 35 VI.1. A hátizsák probléma megoldása... 36 VI.2. A hátizsák probléma megoldása a MATLAB programmal:... 38 VI.3. A HZF program leírása sorok alapján:... 40 VII. Az utazóügynök probléma... 43 VII.1. Tesztfeladat az utazóügynök problémára:... 45 VII.2. Az utazó ügynök problémát megoldó tesztelése... 47 VII.3. Az UF program leírása sorokra bontva:... 49 VII.4. TAV funkciófájl leírása:... 52 VIII. A gyártani vagy vásárolni ( make or buy ) döntések... 53 VIII.1. A make or buy döntések ismertetése... 53 VIII.2. Előnyök és hátrányok... 54 VIII.3. Make or buy döntés költségszámítása... 56 VIII.3.1. Saját gyártás költsége... 56 VIII.3.2. Vásárolt alkatrész költsége... 56 VIII.4. A döntés kimenetele a nyereség szempontjából... 57 VIII.6. A make or buy döntéssegítő program bemutatása... 58 1

VIII.7. A MOB nevű program leírása sorok alapján:... 64 VIII.8. Az MM funkciófájl leírása... 68 IX. Paraméterek helyes beállítás a HS programban... 70 IX.1. A HMCR helyes beállítása... 70 IX.2. A PAR és BW értékeinek helyes beállítása... 71 IX.3. A lépésszám helyes megválasztása... 74 IX.4. Kiindulópontok és határpontok... 75 X. Összefoglalás... 76 XI. Summary... 77 XII. Irodalomjegyzék... 78 Köszönetnyilvánítás... 79 Mellékletek... 80 A függvény optimalizáló program (HSM.m) forráskódja... 80 A függvény tartomány optimalizáló program (HSH.m) forráskódja... 83 ET funkciófájl forráskódja... 86 Hátizsák probléma megoldó program (HZF.m) forráskódja:... 87 Az utazóügynök probléma megoldó program (UT.m) forráskódja... 89 TAV funkciófájl forráskódja... 92 Make or buy döntéssegítő program (MOB.m) forráskódja... 92 Az MM funkciófájl forráskódja... 99 2

I. Előszó A diplomamunkám témája a Harmony Search Meta-heurisztikus optimalizáló algoritmus bemutatása, felhasználása, vizsgálata és továbbfejlesztése. Az eredetileg függvényoptimalizálásra kitalált algoritmust három különböző anyagmozgatási feladatra sikerült átültetnem. A hátizsák és az utazóügynök probléma megoldására és a make or buy döntéshozatal segítésére speciális programokat hoztam létre a Harmony Search algoritmus alapján, MATLAB programozási nyelven. Mivel ezt az algoritmust függvények optimalizálására dolgozták ki, ezért kézenfekvő volt, hogy a különböző problémákat, amelyekre programot készítettem, egyenletekre vezessem vissza. Ekkor tudjuk az algoritmusból kihozni a lehető legtöbbet. Az egyenletté alakítást és annak megoldását általában a funkciófájlok végzik. Az első fejezetekben egy áttekintést láthatunk a vállalatok stratégiáinak változásáról az elmúlt évszázadban, majd egy rövid ismertető következik a MATLAB program előnyeiről és használatáról. A 4. fejezetben ismertetem a metaheurisztikák működését és a Harmony Searh algoritmus elméletét. Majd utána az algoritmus gyakorlati alkalmazását mutatom be két általam készített programon. A 6. fejezettől a 8.-ig a három anyagmozgatási feladatot és ezek megoldását részletezem. Először a hátizsák probléma kerül terítékre, amelynél el kell dönteni, hogy egy meghatározott befogadóképességű helyre hogyan lehet a lehető legtöbb tárgyat elhelyezni úgy, hogy számunkra a legnagyobb értékkel bírjon. Másodiknak az utazó ügynök probléma kerül bemutatásra, amelyben azt kell megoldani, hogy a lehető legrövidebb úton, vagy költséggel jussunk el minden helyszínre egy előre meghatározott helyről úgy, hogy kétszer sehol se forduljunk meg. Utolsónak a Make or Buy döntés segítésére kitalált megoldásomat részletezem, aminél azt határozzuk meg, hogy egy szerelési fában mely 3

alkatrészeket vásároljuk és melyeket gyártsuk úgy, hogy számunkra a legkedvezőbb helyzet alakuljon ki. Az Utolsó fejezetben a Harmony Search algoritmus alapparamétereinek a helyes beállításairól készítettem javaslatokat, amelyek segítségével a programok hatékonyságát növelhetjük. A diplomamunkám anyagából két cikket is készítettem az Advanced Logistic Systems nevű folyóiratba, amelyek közül egy már meg is jelent és egy megjelenés alatt áll. 4

II. A vállalatok átalakulása Az elmúlt évszázadban a termelői piac helyét átvette a szolgáltatói piac. Ennek hátránya az volt, hogy a termékeket, szolgáltatásokat és azok tulajdonságait nem azok kínálói, hanem egyre inkább annak vásárlói határozták meg. A különböző vállalatok között vagy szorosabb kötelék alakult ki, vagy versenytársakká váltak. A piaci verseny arra ösztönözte a vállalatokat, hogy jó minőségű árut vagy szolgáltatást állítsanak elő minél olcsóbban és azokat sikeresen minél nagyobb profittal adják el. A vállalatoknak, hogy életben maradjanak az alábbi lehetőségek közül kellett választaniuk: egyedi, speciális termék vagy szolgáltatás előállítása, mellyel a piacon monopolhelyzetet teremthetnek, a versenytársak kizárása a piacról, kiadások csökkentése, veszteségek csökkentése, pazarlások megszüntetése, nyereség maximalizálása, új technológiák kifejlesztése, optimalizált gép, eszköz, helység elhelyezés. Ezek közül a legtöbben a pazarlásokat és a kiadásokat csökkentették, optimalizálták a gépek és eszközök elrezését valamint új költséghatékonyabb technológiákat fejlesztettek ki. A legtöbb vállalat nem tudott monopolhelyzetet szerezni a piacon, ezért versenyhelyzet alakult ki közöttük, ezáltal rá lettek kényszerítve, hogy csökkentsék az áraikat és ezzel együtt a kiadásaikat is. A 20. század közepéig erre csak tapasztalati úton, ipari kémkedéssel vagy kísérletezéssel tudtak megoldást találni. Ezek viszont vagy nem voltak elég hatékonyak és/vagy nagyon költségesek voltak. A számítógépek megjelenésével és elterjedésével azonban a mérnökök számára egy új korszak kezdődött. Amit eddig papíron számoltak napokon keresztül, azt a számítógépek percek alatt elvégezték. Megjelentek specifikus tervező, elemző, 5

optimalizáló programok, amelyek segítségével a termékeket és szolgáltatásokat sokkal egyszerűbb lett megtervezni, elemezni, hatékonyabbá és olcsóbbá tenni. Már csak azokat a termékeket kellett elkészíteni, amelyet a programmal megfelelőnek ítéltek és nem kellett minden egyes változatot legyártani és megvizsgálni. A különböző szolgáltatásokat pedig sokkal hatékonyabbá, gyorsabbá és olcsóbbá lehetett tenni köszönhetően a rengeteg optimalizáló programnak. Gondoljunk csak a mai fuvarozó vállalatokra! Régen minden fuvart egyenként papíron számoltak ki, és ha valahol változtatni kellett, az egészet újra kellett kezdeni előlröl. A mai fuvarszervező szoftverek másodpercek alatt több száz járműnek az optimális szállítási útvonalát tervezik, figyelembe véve a távolságokat, a szállítandó anyag minőségét, mennyiségét és egyéb speciális tulajdonságait. Emellett a különböző felvételi és lerakási pontok nyitvatartását, az útvonalak forgalmi tulajdonságait, a berakodási sorret, üzemanyag fogyasztást, a pihenőidőket és még rengeteg egyéb adatot. Ez a mennyiségű adat egy szoftver számára olyan optimalizálási feladatot alkot, ahol a változók száma akár a több százat is elérheti. Egy egyenletrszer csak akkor oldható meg egzakt módon, ha van legalább annyi különálló, egymásból nem leszármaztatható egyenlet, mint amennyi változó van. Általában a különféle optimalizáló szoftverek nem relkeznek ezzel a feltétellel, így kimondható, hogy ezekre az egyenletekre nem tudnak előre meghatározott lépésben pontos megoldást nyújtani. Ennek következtében ezek a szoftverek olyan algoritmusokat használnak, amelyek csak megközelítik az elméleti pontos értéket annyira, hogy számunkra ne legyen jelentősége annak, hogy a tényleges vagy egy közelített értékel dolgozunk. A 70-es évektől számos algoritmust dolgoztak ki, hogy megoldja a különböző mérnöki optimalizálási problémákat. A legtöbb algoritmus lineáris vagy nem-lineáris programozási módszerek alapján működik jelentős mennyiségű változó adattal. Az ilyen numerikus algoritmusok nagyon jó stratégiával relkeznek, hogy a globális optimumot egyszerűen és gyorsan találják meg. Viszont nagyon sok algoritmusnak van egy jelentős hibája. Ha nem jól választjuk meg a kiindulópontot, akkor egy bonyolultabb feladatnál, ahol több optimum is létezik, akkor a keresés könnyen csapdába eshet, leragadhat egy lokális optimum pontnál és nem a legjobb eredményt kapjuk meg. 6

III. A MATLAB bemutatása A MATLAB (jelentése: matrix laboratory ) egy speciális, programrszer, amely numerikus számítások elvégzésére lett kifejlesztve. Az elnevezés emellett egy magas szintű programozási nyelvet is jelent. A The MathWorks által kifejlesztett programrszer alkalmas: numerikus analízis, mátrixalgebra, jelfeldolgozás, optimalizálás, irányítási rszerek, grafikus ábrázolási feladatok megoldására. A MATLAB-ot az 1970-es évek elején az Új-Mexikói Egyetem Számítástudományi Intézetének akkori elnöke, Cleve Moler kezdte el fejleszteni. Kezdetben csak a diákjai munkáját szerette volna megkönnyíteni, hogy ezen keresztül el tudják érni a LINPACK és EISPACK csomagokat Fortran tudás nélkül. Hamarosan elterjedt más egyetemek hallgatói és munkatársai között is, így erős érdeklődésre tett szert az alkalmazott matematikával foglalkozók körében. Jack Little, a Molernél tett látogatása során felismerte a MATLAB-ban lévő lehetőségeket 1983-ban. Utána nem sokkal csatlakozott Molerhez és Steve Bangert-hez, majd újraírták a MATLAB-ot C nyelven és, megalapították a The MathWorks-öt 1984-ben. Az újabb verziókat a c nyelv mellett Javaban is készítik. Ezek az újraírt könyvtárak JACKPAC néven váltak ismerté. 2000-ben a MATLAB-ot ismét újraírták, hogy újabb módszereket alkalmazzon a mátrixokkal való műveletekre, ebből született a LAPACK csomag. [1] 1984 és 2012 között a MATLAB program nyelvnek számos verzióját fejlesztették ki. Állandó tökéletesítésének köszönhetően jelenleg a világ egyik legjobb terméke a numerikus számítások területén. 2004-ben, hivatalos információk alapján, a MATLAB több, mint 1 millió felhasználóval relkezett. 7

Bár a szoftver kizárólag numerikus, a MuPAD csomag hozzáadásával képes matematikai kifejezéseket grafikusan is megjeleníteni. A MATLAB először az irányítástechnikával foglalkozók körében lett alkalmazva, de gyorsan elterjedt más területeken is. Manapság szintén használatos még az oktatásban (különösen a lineáris algebra és numerikus analízis szemléltetésében) és népszerű még a képfeldolgozással foglalkozó kutatók között is. [1] III.1. A MATLAB programnyelv jellemzése Az egész MATLAB programrszer a MATLAB nyelv köré épül, amit néha M-code-nak vagy egyszerűen M-nek hívnak. A MATLAB program lényeges jellemzője, hogy a bennük lévő valamennyi változó globális. A legegyszerűbb módja az M-code fordításának az, hogy a fordítandó programot begépeljük a >> prompt után, a Command Windowban, amely a MATLAB felület része. Ebben az esetben a MATLAB egy interaktív matematikai burokként fog működni. Ha az M-code több sorból áll, a MATLAB Editort használatával akár saját függvényt is készíthetünk. A változókat a MATLAB nyelvben az értékadó operátorral lehet deklarálni, ami az =. A MATLAB egy dinamikusan típusos nyelv, ami azt jelenti, hogy a változókat típusdeklaráció nélkül is lehet használni, kivéve ha szimbolikus objektumnak szánjuk őket. A változók az értékeiket kaphatják konstansokból, számításokból vagy egy függvény visszatérési értékéből is. [1] A MATLAB egy Mátrix Laboratórium, így többféle kényelmes megadási módját kínálja a vektoroknak, mátrixoknak és többdimenziós tömböknek. A MATLAB nyelvben (ahogy a matematikában is) a tömbök és mátrixok indexelése 1-től kezdődik. A legtöbb programozási nyelvben ez leggyakrabban 0-tól történik. A mátrixokat az elemek felsorolásával is meg lehet adni szóközzel vagy veszővel elválasztva úgy, hogy 8

a listát szögletes zárójelek között helyezzük el. A pontosvessző azt jelenti a felsorolásban, hogy az utána álló elemek a következő sorba kerüljenek. A kerek zárójelek használatával al-mátrixok is megjeleníthetőek. [9] Más programozási nyelvekkel ellentétben, ahol a pontosvessző (;) választja el egymástól a parancsokat, a MATLAB-ban, a parancsok kiírása függ tőle. Ha egy parancs végén pontosvessző szerepel, akkor nem kerül kiíratásra. Ellenkező esetben kiíródik. Ha egy parancs vagy függvény nem relkezik visszatérési értékkel, akkor ugyanaz történik a pontosvessző megléte vagy hiánya esetén is. A plot függvény segítségével 2 dimenzióban ábrázolhatunk függvényeket, ahol az x tömb tartalmazza a megjelenítő tartományt, az y tömb pedig a függvényt. [1] III.2. MATLAB parancsok A MATLAB parancsokat (utasításokat) utasítássorokban kell megadni. Egy parancssor több, a ";"-pontosvessző jellel elválasztott utasítást is tartalmazhat. Az adott utasítás(ok) az "ENTER"- billentyű megnyomásának hatására kerül(nek) végrehajtásra. Célszerű egy adott feladathoz tartozó parancssorokat előbb egy M-file formátumban megírni (pl. a MATLAB saját szövegszerkesztőjével), azt elmenteni saját munkaterületünkre majd utána az adott M- file-t meghívással futtatni. Egy utasítássor szerkezetében a hozzárelés ("="-egyenlőség) jelének bal oldalán általában a kiszámításra kerülő változó neve (a kívánt eredmény) szerepel, míg jobb oldalán az utasítás neve, amit zárójelben az utasítás végrehajtásához szükséges változó nevek kísérnek. Ha a baloldali rész hiányzik, a program az eredményt az "ans" nevű mátrixban közli és tárolja mindaddig, amíg újabb, hasonló értékszámítás nem történik. [1] A MATLAB utasítások célja a különböző műveletek eredményeinek a meghatározása. Az eredmény az utasításokban szereplő változó(k) értékváltozásaként jelentkezik. A MATLAB változók értékei az alábbi alapvető műveletek nyomán változhatnak: 9

a) aritmetikai, algebrai, logikai és relációs műveletek, b) MATLAB matematikai függvényszámítások, c) speciális MATLAB utasítások, d) M-file típusú meghívások, e) MEX-file típusú meghívások. III.3. MATLAB változók A MATLAB-ban a változók típusára nincs külön definíció. A mátrix mérete és típusa a beírt értékek alapján automatikusan képződik. MATLAB mátrix műveletekre specializált szoftver. Műveleteihez az adatokat mátrix formában kell megadni illetve a változókat, mint mátrixtömböket lehet kezelni. Egy munkafolyamat megkezdésekor a felhasználó a változókat egyszerű megnevezéssel és/vagy értékhozzáreléssel tudja meghatározni. Az így meghatározott változók a továbbiakban bármilyen matematikai összefüggésben szerepelhetnek. Az egyszer meghatározott (nevesített) változók a munkafolyamat végéig (a "quit", az "exit" vagy a "clear" utasításokig) rezidensen maradnak a MATLAB munkaterületen, tehát bármikor előhívhatók. [9] Egy munkafolyamat során bármikor új változók is meghatározhatók. A változókhoz tartozó értékeket (mátrixtömböket) el lehet (lemezre) menteni a "save" parancs segítségével vagy elő lehet azokat hívni a "load" parancs segítségével. Adott MATLAB utasításokat, parancsokat mindig az ENTER billentyű lenyomásával érvényesítünk. Nagyon hosszú munkafolyamat vagy kiterjedt számítások során sok változó név összegyűlhet. A MATLAB listát vezet a változókról, amelyet a "who" paranccsal lehet lekérdezni. Fontos, hogy következetes, logikus jelőlési módot használjunk, mert még így is megtörténhet, hogy nehezen tudjuk utólag azonosítani az egyes változókat. [1] 10

IV. A Harmónia keresési algoritmus A Harmony Search algoritmus a számítási intelligenciák és metaheurisztikák területéhez tartozik. [3] A számítási intelligencia vagy régebbi nevén al-szimbolikus technika a Mesterséges Intelligenciakutatás speciális alterülete, ahol a technológia csak arra fókuszál, hogy a végeredmény minél tökéletesebb legyen. Ezt az ágát az AI kutatásnak nagyjából lefedi az öt legnagyobb alkalmazkodó és intelligens rszer [2]: Evolúciós számítások, Raj intelligencia (Rész Raj és Hangya Kolónia optimalizálás), Fuzzy rszerek, Mesterséges immunrszerek, Mesterséges neurális hálózatok. Ezek mellett található még rengeteg kisebb, nem annyira elterjedt elmélet. Ezek közé tartozik részben a Harmony Search technológia is. IV.1. Metaheurisztikák Metaheurisztikák a neve az olyan algoritmusok gyűjtőtáborának, amelyek az úgynevezett Koszos Mesterséges Intelligenciák csoportjába tartoznak ahol csak a kimenetel tökéletességére alapozzák stratégiájukat. Ebben a helyzetben a heurisztika egy olyan algoritmus, amely megkeresi azt a megoldást, ami már elég jó ahhoz, hogy már ne okozzon gondot annak a bizonyítása, hogy a megoldás optimális vagy sem. A heurisztikus módszerek nagy hangsúlyt fektetnek a pontosságra, minőségre és a számítógép (tárhely és futási idő) lehető legjobb kihasználására. [3] Úgy, mint a heurisztikák, a metaheurisztikák is egy algoritmust tartalmaznak egy általános keretben, amiket néhány kisebb változtatással sok különböző problémára lehet alkalmazni. 11

A metaheurisztika célja, hogy egy vagy több heurisztikus módszert építsen magába egy magasabb szintű stratégia eléréséhez (innen ered a meta az elején). Az eljárás a metaheurisztikában olyan, mint egy fekete doboz, nem lehet teljes mértékben minden körülményt, információt megismerni vagy megszerezni, de már kevés információból is képes a metaheurisztika eldönteni, hogy meghagyja, vagy kicseréli egy másik eljárásra. [3] Egy eljárás lehet akár egy olyan egyszerű lépés, mint a változók manipulálása, vagy akár egy másik összetettebb metaheurisztika is. Például létezik olyan metaheurisztika is, amely tartalmazza az iterált helyi keresést, a tabu keresést, a genetikus algoritmust, a hangya kolónia optimalizálót és a szimulált megközelítést. C. Blum és A. Roli megfogalmazták a metaheurisztikák 9 legfontosabb tulajdonságát [10]: 1. A metaheurisztikák csak stratégiák a keresési eljárás irányításához. 2. A cél az, hogy minél hatékonyabban vizsgálják át a keresési térrészt, hogy megtalálják a lehető legjobb megoldást. 3. A metaheurisztikát képező algoritmusok köre nincs korlátolva, a legegyszerűbb helyi kereső algoritmusoktól a komplex tanulási eljárásokig bármit tartalmazhat. 4. A metaheurisztika algoritmusai közelítő és általában nem determinisztikus eljárások. 5. Lehetnek benne olyan mechanizmusok, amelyek elkerülik a keresés beragadását egy térrészre (lokális optimum probléma). 6. A metaheurisztika alapfogalmait csak egy absztrakt, összefoglaló szinten lehet leírni. 7. A metaheurisztikák nem probléma specifikusak. 8. Egy magasabb szintű stratégia által vezérelve egy metaheurisztika átveheti egy heurisztika terület specifikus tudását. 9. A mai fejlett metaheurisztikus keresések felhasználhatnak más keresési tapasztalatokat (elmentve valamilyen memória formájában) a keresésük segítéséhez. 12

A legtöbb mérnöki optimalizálási algoritmus lineáris vagy nemlineáris programozási módszeren alapul. Ezeknek az algoritmusoknak viszont van egy nagy hibájuk: ha több optimális pont van, aminek a kiválasztása függ a kezdőponttól, akkor az algoritmus nem mindig az optimum pontot választja ki. Léteznek már úgynevezett hiperheurisztikák is, amelyek kiemelt szerepet szentelnek azokra a heurisztikákra, amelyek offline vagy online módon meg tudják változatni a paramétereiket úgy, hogy ennek hatására javuljon a számítási munka hatékonyság vagy a megoldás. A hiperheurisztikák olyan magas szintű stratégiákat alkalmaznak, mint a gépi tanulás és módosítják a keresés viselkedését aszerint, hogy melyikkel lehet az adott esetben jobb eredményt generálni. [3] Optimalizálásnak nevezzük azt az eljárást, amikor egy problémára olyan megoldást keresünk és választunk ki több lehetséges változat közül, amely a célfüggvényt a lehető legjobban kielégíti. A költségek észrevehető minőségromlás nélküli csökkentését nevezzük költség szerinti optimalizálásnak. Lehetséges célfüggvények: összköltség min anyagmozgatási munka min szállítási távolság min átfutási idő min anyagmozgatás tevékenységek időtartama min gépek, eszközök, munkaerő kihasználtsága max anyag, energia felhasználás min egyenletes anyagáram Ezen kívül még rengeteg célfüggvény létezik, de az első és legfontosabb egy vállalat számára mindig az összköltség minimalizálása. 13

IV.2. Harmony Search algoritmus Nemrégiben Z.W. Geem, J.-H. Kim és G.V. Loganathan kifejlesztettek egy olyan metaheurisztikus algoritmust, amelyet a zenei életből vett tökéletesség vagy más néven harmónia megteremtése alapján készítettek el és a Harmónia Keresési (Harmony Search) algoritmus nevet adták neki. A harmonikus zene az optimalizált megoldás vektornak és a zenészek az improvizációikkal a lokális és globális kereső rszereknek felelnek meg. Az algoritmus alapja a zenei harmónia keresés, amelyet sztochasztikus véletlenszerű elemekkel épít fel, a megszokott gradiens elemek helyett, amivel a járulékos szükségtelen számítások is eltűnnek. Különféle mérnöki optimalizációs problémára, matematikai függvények minimalizálására, maximalizálására és magasépítésben is használható eljárás. A metaheurisztikus algoritmusok egyesítik szabályos és véletlenszerű természeti jelenségeket. Ezek közé sorolható az evolúciós vagy genetikai algoritmus, amelyet szintén a természet inspirált és számos tudományos területen alkalmazzák. A harmóniakeresési algoritmus is ezeken a természeti jelenségeken, még pedig a zene harmóniáján nyugszik. Zenés előadások célja, hogy megtalálják kellemes harmónia által meghatározott esztétikai standardot, ahogy az optimalizálási folyamat célja, hogy megtalálja a globális megoldás által meghatározott célt. A zene harmóniája egy optimalizált megoldásvektor és a zenész improvizációs technikája egy lokális és globális keresési séma az optimalizálási technikában. Az algoritmus nem igényel kezdőértéket a döntési változóknak. Az alappillérei a Harmónia Memória Figyelési Arány (Harmony Memory Considering Rate, röviden HMCR) és a Hangmagasság Szabályzó Arány (Pitch Adjust Rate, röviden PAR). Az esztétikai minőséget a különböző hangszerek hangmagassága és azok aránya határozza meg, ahogy egy eredményt a célfüggvény és változóinak értéke ad meg. A HS algoritmus alapját olyan zenék adják, ahol a zenei előadást a zenész improvizációval kívánja feldobni. Ilyen zenei irányzat például a JAZZ. [2] 14

1. ábra: Zenészek és változók Forrás: Kang Seok Lee, Zong Woo Geem (2005): A new meta-heuristic algorithm for continuous engineering optimization: harmony search theory and practice. A fenti ábrán látszik, ahogy több zenész, más-más hangszerrel és hangmagassággal a tökéletes zenei harmóniára törekszik, úgy több változó is az optimális értékre törekszik. Ha az összes hangmagasság közül a legjobbat, amivel a legszebben hangzott a zene minden zenész megjegyzi, akkor a következő alkalommal, már azt fogja alkalmazni és egyre kimagaslóbb lesz a zenei élmény. Ugyanígy működik a harmónia keresés algoritmusa is, ha megjegyezzük az eredeti változók értékeit és változtatunk valamin, ami ha jobb eredményt mutat, akkor az újat használjuk inkább. Így lépésenként egyre jobb megoldást kapunk. A lépéseket pedig addig ismételjük, amíg meg nem találjuk a tökéletes harmóniát, az optimális megoldást. [2] A HS algoritmus 5 lépésből áll: 1. Meg kell adni az optimalizálási problémát és az algoritmus paramétereit. 2. El kell készíteni a Harmónia Memória mátrixot (HM). 3. Meg kell alkotni (improvizálni) egy új harmónia változatot. 4. Be kell illeszteni az új harmóniát a Harmónia Memória mátrixba. 5. Ismételni kell a 3. és 4. lépést, amíg el nem érjük a tökéletes harmóniát. 15

A lépéseket az alábbi módon lehet felírni: 2. ábra: A Harmony Search elmélete Forrás: Kang Seok Lee, Zong Woo Geem (2005): A new meta-heuristic algorithm for continuous engineering optimization: harmony search theory and practice. Az alábbi folyamatábra a 3. lépést fejti ki bővebben és a programomat is ezek a képletek alapján alkottam meg kisebb változtatásokkal. 3. ábra: A Harmony Search algoritmus leírása Forrás: Kang Seok Lee, Zong Woo Geem (2005): A new meta-heuristic algorithm for continuous engineering optimization: harmony search theory and practice. 16

V. A függvény optimalizáló program Az alábbi programokat MATLAB-ban készítettem a fent bemutatott elmélet alapján. Ezeket a programokat úgy alkottam meg, hogy a lehető legjobban kövessék az elméletet, de javításokat és fejlesztéseket is eszközöltem rajtuk, hogy minél jobban kihasználja az algoritmusban rejlő lehetőségeket. A függvény optimalizáló programnál, amelynek a HSM.m nevet adtam a fent közölt elméletet próbáltam minél pontosabban megírni, ami majd az alapját adja a speciális optimálási feladokra írt algoritmusoknak. V.1. A HSM program felépítése sorok alapján: 1 11. sor: Az alábbi alap paramétereket itt kéri a program a további számolásokhoz: alsó és felső kezdőpont (tol; ig {- }) minimum (0) vagy maximum (1) keresést végzünk iteráció szám (i N) változók száma (xek N) HMCR (0 1) PAR (0 1) bw (0 1) Harmónia Memória mérete (yek N) 11 17. sor: A Harmónia Memória mátrixot (H) egy random generátorral elkészítjük, úgy hogy olyan értékeket generálunk véletlenszerűen az állapottérben, amely a két kezdőpont közé esik (tol; ig). A H mátrix oszlopa a változók számának ( xek ) felel meg, a sora pedig a változatok számának ( yek ). Ezután a program az ET nevű funkciófájlban található 17

egyenleten lefuttatja a különböző változatokat és a megoldásokat egy függőleges F vektorba menti le. 18.126. sor: Az előre beállított iterációs számmal a program for ciklust futtat le, amely magába foglalja az optimalizálási algoritmust. Minden lépésben a meghatározott arányokat figyelembe véve kiválaszt egy módszert a három közül, amelyikkel próbál minél jobb eredményt alkotni. Ha sikerül a futtatás végén kedvezőbb megoldást találnia, mint a H mátrixban található legrosszabb megoldás, akkor az új változatot helyettesíti a legrosszabb helyére és a megoldását is lecseréli az F vektorban. Ha viszont rosszabb eredményt alkot, akkor változatlanul hagy mindent. 27 48. sor: Ha a HMCR és PAR értéke is nagyobb, mint két különböző random szám, akkor ebben a részben leprogramozott módszer fog optimalizálni. Ennek a módszernek a lényege, hogy random generátorral minden változóra meghatározzuk, hogy a H mátrixban található változatokból melyikből emelje ki az adott változót. Amint ilyen módon összerakta az új változatot, megvizsgáltatjuk a funkció fájllal, hogy jobb értéket ad-e, mint a kiemelt változat. Ha igen, akkor kicseréljük a H mátrixban találhatót az újra, ha nem akkor mindent hagyunk változatlanul. 49 96. sor: Ha a HMCR értéke nagyobb, de a PAR értéke kisebb, mint két különböző random szám akkor ez a módszer fog ebben a lépésben érvényesülni. Ennél a módszernél majdnem ugyanaz játszódik le, mint az előzőnél annyi különbséggel, hogy nem csak összeválogatjuk a változókat, de kicsit meg is változtatjuk azokat. Azt, hogy ez a változtatás mekkora értékkel történik, arról csak annyit ír a HS elmélete, hogy valamilyen számot hozzáadunk vagy kivonunk. Ha csak egy konkrét számot adnánk hozzá, akkor lehet, hogy ez a szám egy kis idő után túl nagy lenne a finomításhoz, vagy az elején túl kicsi ahhoz, hogy az állapottér megfelelő részét elérje. Én ezért egy többszörösen dinamikusan mozgó bw -t találtam ki. 18

Először el kell döntenie a programnak random szám alapján hogy az eredeti bw -t használja- e vagy a lépésszám előrehaladtával egy redukált bw-t alkalmaz inkább. Erre azért van szükség, mert az elején nagyobb szabadságot kell adni a programnak, hogy a megfelelő minimumpont közeli értékeket találjon, de ha ez megvan, folyamatosan finomítania kell a változókat, a minél pontosabb kereséshez. Miután kiválasztotta melyiket szeretné alkalmazni, meg kell határozni minden lépésben azokat az értékeket, amennyivel megváltoztatja a változókat. Ezt az alábbi képlet alapján számolja ki: Minden futtatásnál megvizsgálja, hogy a különböző változóknál melyik a legnagyobb és legkisebb érték, és a kettejük különbségét szorozza meg a 2*bw számmal és egy random értékkel 0 és 1 között. Így akármilyen kis tartományban is mozog már a finomítás, mindig lehet rajta javítani. Ez után a program véletlenszerűen eldönti, hogy hozzáadja vagy kivonja-e a változóból a fent megkapott értéket és megkapjuk az új változatot. 97 120.sor: Az utolsó módszer akkor lép életbe, ha a HMCR értéke kisebb, mint egy random szám. Ennek a módszernek az alapja egy teljesen új változat generálása, amely csak minimálisan függ a már meglévő változatoktól [3]: D(1,m)=max(H(:,m))-min(H(:,m)); MH(1,m)=min(H(:,m)); A(1,m)=MH(1,m)+(D(1,m)/n)*round(rand(1)*(m-1)); 19

ahol: D: a változók értékei közötti legnagyobb különbség, MH: a változók közül a legkisebb érték, A: az új változat vektora, n: az aktuális lépésszám. Miután megalkotta a program az új változatot megvizsgáljuk, hogy jobb-e mint a H mátrix legrosszabb változata. Ha igen akkor kicseréljük rá az imént kapott vektort, ha nem akkor semmin nem változtatunk. 120 138.sor: Ebben a szakaszban minden lépésben kirajzoltatunk két pontot egy gráfra. Az egyik pont piros színű és az aktuális legjobb eredményt mutatja, a másik kék színű és az megoldásmátrix (F) átlagát reprezentálja. A for ciklus után a feliratozza a gráfot, és kiíratja az eredményeket. V.2. ET funkciófájl leírása Ennek a fájlnak nagy szerepe van a főprogramban, mivel ez számolja ki a különböző változatok eredményeit. Igazából itt a fájl mindössze két elemet tartalmaz, amit egy példán keresztül mutatok be: function [ E ] = ET( Q ) E=(Q(1,2)-Q(1,1)^2)^2+(1-Q(1,1))^2; Az első sor tartalmazza azt, hogy ez egy funkció fájl és az E a kimeneti érték, azaz a megoldás. Emellett a nevét a fájlnak ET és a bemeneti értéket, azaz a Q vektort, amely tartalmazza egy változat változóit. 20

A második sor az egyenletet foglalja magába. Az egyenletet viszont nem mindegy, hogy írjuk le. Az eredménynek mindig elől kell állnia és E a neve. A változókat is speciálisan kell megadni, a változó neve mindig Q(1,X), ahol az X a változószáma. Legyen két változónk: A és B. Az alábbi képletet akarjuk optimalizálni: Az A változót vesszük az 1 -es változónak ezért innentől Q(1,1) jelölést használunk helyette és így a B változó a 2 -es változó, aminek a jelölése Q(1,2). Így a képletet az alábbi módon kell átírni, hogy a program tudja futtatni: E=(Q(1,1)*Q(1,2)-Q(1,1)^2)^2+sqrt((1-Q(1,1))*Q(1,2)) Ezeket a szabályokat és a megfelelő MATLAB parancsokat felhasználva szinte bármilyen nehézségű egyenletet képes optimalizálni a program, ha jól van megadva. 21

V.3. A függvény optimalizáló program használata IV.3.1. Egyszerű 5 változós tesztfüggvény Elsőnek egy viszonylag egyszerű függvénnyel próbálkoztam. Ez a függvény öt darab változót tartalmaz, de csak egy globális minimum pontja létezik: Ennek a képletnek a minimum optimális megoldása az található. értékeknél A program futtatásának alapparaméterei: kiindulási érték: -200 200 iterációs szám: 3000 HMCR: 0,8 PAR: 0,2 bw: 0,3 változók száma: 5 harmónia memória mérete: 40 22

A program a futtatás után az alábbi adatokat és ábrát adta ki: 4. ábra: 5 változós tesztfüggvény Forrás: saját Az ábrán található sok színből a piros reprezentálja a legjobb változat eredményét, és a többi szín a legjobb változat változóinak az értékét. Amint látszik, az értékek szépen konvergálnak az optimum ponthoz, azaz a 0 értékhez. A piros téglalapban található két eredményvektort a futtatás után kaptuk meg. Az atlagok vektor a futtatás után a Harmónia Memória mátrix (H) és a Megoldásvektor (F) átlagértékeit mutatja. A minek vektor a H mátrix és az F vektor legjobb eredményeit foglalja magába. Mindkét vektornál a 6 számból az első a megoldás a maradék a változók értékei sorba rezve. Ebből is látható, hogy a program legalább 4 tizedes pontossággal meg tudta határozni az optimális helyet az adott feltételek mellett. 23

V.3.2. Goldstein és Price 1. függvény A második tesztet a Goldstein és Price 1. függvényen végeztem. Ez a függvény nagyon mozgalmas, ahogy azt a 3D-s ábrán is látni lehet. Egy 6 6 egységnyi területen akár 10 6 nagyságrű eltérések is lehetnek a magassági értékekben. A függvényben 2 változó szerepel, de összesen 4 minimum ponttal relkezik, amelyeket a kontúr ábrán fekete keresztekkel jelöltem. A Goldstein és Price 1. függvény: A globális minimumpontja az pont felé egy M -et írtam. pontban található. A kontúr ábrán e felé a Emellett még található három minimumpont: 24

5. ábra: A Goldstein és Price függvény kontúr képe Forrás: saját 6. ábra: A Goldstein és Price függvény 3D-s képe Forrás: saját 25

Megoldás (log(f)) Miskolci Egyetem A futtatás alapparaméterei: kiindulási érték: -10 10 iterációs szám: 3000 HMCR: 0,8 PAR: 0,15 bw: 0,25 változók száma: 2 harmónia memória mérete: 30 A futtatás eredményei: 10 Minimumpont keresés 9 8 7 6 5 4 3 2 1 0 0 0.5 1 1.5 2 2.5 3 3.5 Iteráció szám (log(n)) 7. ábra: A Goldstein és Price függvény optimumának keresése Forrás: saját A fenti ábrából is jól látható, hogy az optimum pontot már kb. 10 3,2, azaz 1600 lépés után megtalálta a legjobb értéket (piros pontok) és az átlagértéket (kék pontok) is. 26

A program az alábbi eredményeket írta ki: Valtozok = 0.000000008942084-0.999999986300058 Megoldas = 3.000000000000044 Ebből is látszik, hogy az algoritmus 3000 lépés alatt 10-7 futtatásnál. pontosságot ért el ennél a V.3.3. Rosenbrock függvény A harmadik tesztet a Rosenbrock függvénnyel végeztem, amely egy globális minimumponttal relkező kétváltozós függvény: Tudjuk, hogy ennek a függvénynek a globális minimuma az pontban található, amelyet a kontúrábrán fekete kereszttel jelöltem. Mivel ennek a függvénynek az alapja egy negyedfokú függvény, ezért már nagyon kis értékeknél is kiemelkedően magas megoldás tartozhat hozzá. Amint az a 3D-s ábrán is látszik egy 4 4 egységnyi területen a legnagyobb és legkisebb érték közötti különbség több mint 3500. 27

8. ábra: A Rosenbrock függvény 3D-s képe Forrás: saját 9. ábra: A Rosenbrock függvény kontúr képe Forrás: saját 28

Ez a teszt két alapbeállítást is vizsgál: 1. Mi történik akkor, ha nem jól állítjuk be a kezdő értékeket (az optimum pont (1,1) nem esik a kezdőértékek (100 200) közé) 2. Milyen megoldást ad két különböző iterációs érték (jelenleg 10000 és 100000 értékekkel futtattam le a programot) A futtatás alapparaméterei: kiindulási érték: 100 200 iterációs szám: 10000 és 100000 HMCR: 0,85 PAR: 0,2 bw: 0,2 változók száma: 2 harmónia memória mérete: 40 A futtatás eredményei: 1. tesztfuttatás 10000-es iterációs számmal: A program által kiírt eredmények: Valtozok = 1.005395125038911 1.010903868894646 Megoldas = 2.982159257917804e-05 29

Megoldás (log(f)) Miskolci Egyetem 6 Minimumpont keresés 4 2 0-2 -4-6 0 0.5 1 1.5 2 2.5 3 3.5 4 Iteráció szám (log(n)) 10. ábra: A Rosenbrock függvény optimumának keresése 1000-es iteráció számnál Forrás: saját 2. tesztfuttatás 100000-es iterációs számmal: A program által kiírt eredmények: Valtozok = 0.999999999215647 0.999999998427372 Megoldas = 6.167479459198521e-19 30

Megoldás (log(f)) Miskolci Egyetem 10 Minimumpont keresés 5 0-5 -10-15 -20 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 Iteráció szám (log(n)) 11. ábra: A Rosenbrock függvény optimumának keresése 10000-es iteráció számnál Forrás: saját Amint az a fenti két ábrán is megfigyelhető, hogy az első futtatás 10000-es iterációs lépésig jutott, amely alatt a változókat csak 10-2 -es, a megoldást pedig 10-5 -es pontossággal határozta meg. Ennek a futtatásnak az időtartama kb. 30 másodperc volt. A második futtatás annyiban tért el az előzőtől, hogy ott tízszer nagyobb iterációs számot adtam meg, azaz 100000-et. Ez a futtatás bár sokkal több ideig tartott, (kb. 4 perc) az eredményei is sokkal jobbak lettek. A változókat 10-9 -es, míg a megoldást 10-19 -es pontossággal tudta meghatározni. Ezekből a futtatásokból is látszik, hogy megfelelő beállításokkal a program és a HS módszer is alkalmazható optimalizálási feladatokra. 31

V.4. A HSH program Ez a program ugyanazokkal az alapokkal és algoritmusokkal működik, mint a függvényoptimalizáló program, csak itt kiinduló értékek helyett, határértékeket állítunk be. Minden egyes változóra meg tudunk adni egy olyan tartományt, amelyből a változó értéke nem léphet ki, ezáltal nem a globális optimum pontot fogja keresni a program, hanem egy helyi, lokális optimumot. A határértékeket a program a futtatás legelején kéri és két vízszintes vektor formájában kell megadni neki. Az alsó határérték vektor (I) tartalmazza azokat az értékeket, amelynél kisebb értéket a változó nem vehet fel. A felső határérték vektor (J) pedig azokat az értékeket tartalmazza, amelynél nagyobb értéket nem vehet fel a változó. A többi paramétert ugyanúgy kell a programnak megadni, mint a HSM esetében egy kivétellel, a változók számát a program automatikusan határozza meg, a két határérték vektor hosszából. Az optimalizálási algoritmusok leírása csak annyiban változott, hogy belekerültek olyan szabályzó elemek, amelyek nem engedik a változókat kilépni az előre definiált tartományukból. A tesztfüggvény alapját szintén a Goldstein és Price 1. függvény fogja adni, viszont jelen esetben leredukáljuk a keresési tartományt úgy, hogy a globális optimum pont X(0,-1) ne essen bele. A változóknak a keresési tartományát az alábbi határértékekkel határoztam meg: Ezt a keresési tartományt az alábbi ábrán be is jelöltem egy piros téglalappal. Amint látszik a területre két lokális minimumpont is esik: 32

Ezek közül az első pont az optimális megoldása a feladatnak, amely fölé a kontúrképen M -et írtam. 12. ábra: A Goldstein és Price függvény kontúrképe határértéken belüli optimalizálásnál Forrás: saját Az alábbi alapadatokkal indítottam a programomat: Alsó határérték: [1 2] Felső határérték [0 1] iterációs szám: 10000 HMCR: 0,8 PAR: 0,2 bw: 0,3 változók száma: 2 harmónia memória mérete: 40 33

Megoldás (log(f)) Miskolci Egyetem A futtatás eredménye: 3 Minimumpont keresés 2.8 2.6 2.4 2.2 2 1.8 0 0.5 1 1.5 2 2.5 3 3.5 4 Iteráció szám (log(n)) 13. ábra: A Goldstein és Price függvény határétékes optimumkeresés menete Forrás: saját A program által kiírt eredmények: Valtozok = 1.799999976660227 0.199999981766974 Megoldas = 83.999999999998479 Az ábrából és a futtatás eredményeiből is látszik, hogy egy viszonylag kis iteráció számnál is nagyfokú pontosságot lehet elérni. Az változókat 10-8, a megoldást pedig 10-12 pontossággal határozta meg a program. 34

VI. Hátizsák probléma Ez probléma már régen foglalkoztatja a matematikusokat. A kérdés az, hogy ha van egy hátizsákunk és rengeteg apróságunk, van-e módszer annak eldöntésére, hogy melyeket válasszunk ki úgy, hogy a hátizsák minél jobban megteljen és minél többet érjen a számunkra a benne lévő tárgyak összessége. Első olvasáskor is érezhető, hogy ha hatalmas hátizsák van birtokunkban és rengeteg kisebb nagyobb aprósággal akarjuk telezsúfolni, akkor a próbálgatós módszer elég sok ideig fog tartani. A próbálgatások biztos módszerét követve 2 n lehetőséget végig próbálva biztosan eredményre jutunk, ahol n a hátizsákba helyező tárgyaink száma. Ez 10 elemnél nem is tart túl sokáig, hiszen csak 1024 próbálkozásra van szükségünk. Ellenben, ha már néhány száz elemet kell végig próbálni, akkor már egy meglehetősen bonyolult problémának számit. [4] 14. ábra: Hátizsák probléma Forrás: www.wikipedia.hu Adott egy V térfogatú hátizsák, valamint n darab tárgy, melyek térfogata rre. A csomagok közül szeretnénk néhányat kiválasztani úgy, hogy a lehető legjobban kitöltsék a hátizsákot, de össztérfogatuk ne haladja meg a hátizsák befogadóképességét. Azaz keressünk egy olyan vektort (X), amely reprezentálja, hogy az adott tárgy bekerül-e a hátizsákba vagy sem. Exponenciálisan növekvő időigényével a próbálkozások módszere csak nagyon kis elemszám esetén alkalmazandó. Ezek helyett inkább más módszereket, algoritmusokat alkalmaznak, amiknek az időigénye jóval kisebb, viszont az eredmény nem annyira biztos, mint a próbálgatások módszerénél. 35

VI.1. A hátizsák probléma megoldása Egy egyszerű 10 elemes hátizsákproblémán fogom bemutatni a programom működését. Az alábbi adatokkal indulunk: Tudjuk, hogy a hátizsák 34 egység férőhellyel relkezik. Tíz elemünk van, amiből úgy szeretnénk elhelyezni benne a lehető legtöbbet, hogy a legjobb összértéket kapjuk. Elem Helyigény (H) Érték (E) E/H 1 5 42 8,40 2 9 87 9,67 3 6 67 11,17 4 4 29 7,25 5 7 63 9,00 6 5 61 12,20 7 2 30 15,00 8 11 95 8,64 9 8 103 12,88 10 6 55 9,17 Sum 63 632 1. táblázat: Hátizsák tesztfeladat alapadatai Forrás: saját Az Érték/Helyigény (E/H), a Sum (H) és a Sum (E) már számolt adat, a program futtatásához ezeket nem kell megadni. Az egyik legegyszerűbb megoldási módszer: Az E/H szerint csökkenő sorrbe rakjuk az értékeket, majd fentről lefelé a helyigényt és az értéket összeadjuk. Ahol a helyigény túllépi a hátizsák férőhelyét, azt már nem helyezzük el benne, csak az előtte állókat. Jelenleg a helyigény a 6. elemnél már túllépi a megengedettet, ezért a hátizsákba csak az első 5 elem fér. Ezek név szerint a 2, 3, 6, 7, 9 -es elemek, melyek összesen 348 értékkel és 30 helyigénnyel relkeznek. 36

Sorr Helyigény (H) Érték (E) E/H Sum(H) Sum (E) 7 2 30 15,00 2 30 9 8 103 12,88 10 133 6 5 61 12,20 15 194 3 6 67 11,17 21 261 2 9 87 9,67 30 348 10 6 55 9,17 36 403 5 7 63 9,00 43 466 8 11 95 8,64 54 561 1 5 42 8,40 59 603 4 4 29 7,25 63 632 Sum 63 632 2. táblázat: Hátizsák tesztfeladat egyszerű megoldása Forrás: saját Ez az eljárás képes az optimális elhelyezést megadni, de csak abban az esetben, ha felhasználja az összes relkezésre álló szabad helyet. Jelenleg azonban a tárgyak csak 30 egységnyi helyet foglalnak el a 34 férőhelyből. Ezáltal előfordulhat, hogy létezik ennél jobb megoldás is. Mivel ez egy általam kitalált feladat, amit úgy alkottam meg, hogy ne lehessen optimálisan megoldani az egyszerűbb módszerrel, ezért az alábbi megoldás az optimális: Sorr Helyigény (H) Érték (E) E/H Sum(H) Sum (E) 7 2 30 15,00 2 30 9 8 103 12,88 10 133 6 5 61 12,20 15 194 3 6 67 11,17 21 261 10 6 55 9,17 27 316 5 7 63 9,00 34 379 8 11 95 8,64 45 474 1 5 42 8,40 50 516 4 4 29 7,25 54 545 2 9 87 9,67 63 632 Sum 63 632 3. táblázat: Hátizsák tesztfeladat optimális megoldása Forrás: saját 37

Ha a 2-es számú elemet eltávolítjuk a helyéről és berakjuk utolsónak, megváltozik a sorr, és a hátrébb lévők eggyel előrébb kerülnek. Így már 6 elem fér be a hátizsákba, amik a következőek: 3, 5, 6, 7, 9, 10. Ebben az esetben az elemek teljesen kitöltik a hátizsák térfogatát és az összérték is nagyobb lett, pontosan 379. Ha jól működik a program, akkor az imént kapott eredményt fogjuk megkapni a futtatás után is. VI.2. A hátizsák probléma megoldása a MATLAB programmal: A program a futtatás elején négy adatot kér: értékvektort (A), helyigény vektort (C), szabad helyek számát (B), iteráció számot (i). A két vektort és a szabad helyek számát már az előző módszerben definiáltuk, most mindössze az a dolgunk, hogy az értékeket két négyszögletű zárójel közé legalább egy szóközzel és elválasztó írásjelek használata nélkül megadni a programnak. Az iteráció számot saját magunknak kell megadni, az alapján, hogy mennyi elemmel dolgozunk. Jelen esetben ilyen kis elemszámnál elég az 2000-es iterációs érték is. Amint lentebb látjuk, a program megadta a darabszámnál, hogy melyik elemet helyezzük el a hátizsákban, ezt 1 -es számmal jelöli, és melyiket hagyjuk ki, ezt 0 -val mutatja. A helyfoglalas mátrixban az elemek egyenkénti helyigényét láthatjuk, amelyek bekerültek a hátizsákba. Az ertek mátrix pedig ezeknek az elemeknek az értékét adja meg külön-külön. Az osszes_helyfoglalas összeadta a helyfoglalás mátrix második sorát és itt látható, hogy jelenleg a 34 szabad helyből mindet ki tudta tölteni, azaz valószínűleg ez az optimális elhelyezés. 38

Az ossz_ertek összeadta az ertek mátrix második sorát és meghatározta a teli hátizsák teljes értékét. Az alábbi eredményeket produkálta a program: Amint látható, valóban létezik jobb megoldás, viszont az eltérés nem nagymértékű. Körül belül 9% az egyszerű módszer és a program által készített megoldás között. Minél nagyobb az elemszám, annál kisebb az eltérés. 10%-nál nagyobb eltérés a fentebb bemutatott egyszerű módszerrel is csak nagyon kicsi elemszámnál, vagy az elemek közötti nagy tulajdonságbeli eltérésnél tud adódni. Az alábbi ábrán a kék pontok a variációk közül az aktuális legjobb értéket, a piros pontok pedig a variációk átlag értékét mutatják. Az ábráról leolvasható, hogy már 600-as iterációs számnál megtalálta az optimális megoldást a program, 1200-nál pedig az összes variáció megerősíti ezt. 39

Megoldás (F) Miskolci Egyetem 400 Hátizsák feladat 350 300 250 200 150 0 200 400 600 800 1000 1200 1400 1600 1800 2000 Iteráció szám (n) 15. ábra: Hátizsák probléma optimalizálása Forrás: saját VI.3. A HZF program leírása sorok alapján: A HZF.m fájl tartalmazza a hátizsák optimalizáló programot 1 8. sor: Adatok bevitelére szolgál. Itt kell megadni a következő értékeket: - elemek értéke (A), - elemek helyigénye (C), - férőhely (B), - iteráció szám (i), - HMCR megadása (HMCR), - változatok megadása (yek). 40

9 19.sor: A program véletlenszerűen generál yek mennyiségű változatot, amit egy Q mátrixba ment le, majd minden változatra kiszámolja az összértéket és az összes helyigényt. 20 29. sor A program ellenőrzi, hogy az egyes változatok összes helyigényei kevesebbek-e, mint a maximális kapacitás (B). Ha több helyet foglalnak, mint amennyi adott, akkor a változat összes változóját 0 -val helyettesítjük. 30 71.sor: Az optimalizálási folyamat itt történik, a megadott iterációszámnak megfelelő lépésben. Először megkeressük a legkisebb összértékű változatot, ha több ugyanolyan értékű van, akkor a sorban a legelsőt és megjelöljük a helyét (y). Ez után eldöntjük, hogy melyik optimalizáló algoritmust használjuk ebben a lépésben. A döntést végző arányszámot (HMCR) a program elején állítottuk be. 34 52.sor: Ha a random szám, amit a program a 33. sorban meghatározott, kisebb, mint a HMCR érték, akkor a Másoló algoritmus fog ebben a lépésben optimalizálni. Ha azt szeretnénk, hogy ez az algoritmus végezzen több munkát, adjunk a HMCR -nek nagyobb értéket. Ebben a részben a program a már meglévő változatok változóiból rak össze egy új változatot, majd megvizsgálja azt, hogy jobb összértéket mutat-e, mint az, amelyiket ki akarja cserélni, és hogy a helyigénye kevesebb-e, mint a szabad helyek száma. Ha mindkettő teljesül, akkor a program kicseréli a kiválasztott változatot az újra, ha valamelyik vagy egyik sem teljesül, akkor pedig változatlanul hagy mindent. 53 66.sor Ha a HMCR értéke kisebb, mint a 33. sorban a random szám, akkor egy teljesen új változatot generál a program, amelyet utána le is tesztel az előző algoritmusnál leírt módon, és ha megfelelőnek tartja, az új változatot kicseréli a már kiválasztottal. 41

67 69.sor A program minden lépés után a legjobb értéket kék pontként, az átlagértéket pedig piros pontként jeleníti meg a diagramon. 71 92.sor A kapott eredmények megfelelő kiírása a feladata ennek a résznek. 42

VII. Az utazóügynök probléma Az utazó ügynök problémája egy kombinatorikai optimalizálási feladat. A bonyolultságelmélet NPnehéz szinten kezeli ezt a feladatot. Ez annyit jelent, hogy a nem-determinisztikus polinomiális jellegű problémák közül a bonyolultak osztályába tartozik. Az utazó ügynök problémával matematika szinten először Sir William Rowan Hamilton és Thomas Penyngton Kirkman foglalkoztak a 19. század elején. Viszont a probléma első általános változatát csak az 1930-as évektől kezdtél el komolyabban vizsgálni. Olyan nagy egyetemeken is folytak kutatások erre a témára, mint a Harvardon, ahol a legjelentősebb eredményeket Karl Menger érte el vagy a Princetonon Hassler Whitney és Merrill M. Flood. [8] 16. ábra: Utazóügynök probléma eredete Forrás: www.wikipedia.hu Adott n számú város és az azokat összekötő utak valamilyen jellegzetes számszerűsíthető tulajdonsága, mint például a légvonalbeli távolságuk, szállítójárművel megtehető távolságuk vagy az utazás költsége. Az utazó ügynökünknek úgy kell az összes várost bejárnia, hogy egy várost csak egyszer érint és egy adott városból kell indulnia ahova az utazás végén visszatér. A feladatunk az, hogy meghatározzuk a fenti kritériumok alapján a legrövidebb vagy legolcsóbb útvonalat. Ha n darab városunk van, és minden városból el lehet jutni bármelyikbe, akkor könnyen belátható, hogy ezt egy gráfként ábrázolva egy teljes gráfot kapunk, aminek minden csúcsa össze van kötve minden más csúccsal. Hamilton körnek nevezzük azt a kört egy gráfban, amelyik egy csúcsból kiindulva és visszaérkezve az élek mentén érintkezik minden más ponttal, úgy hogy egyiken sem halad át kétszer. 43

Be van bizonyítva, hogy n csúccsal relkező teljes gráfban Hamilton kör fedezhető fel. Viszont mivel már tudjuk a kiindulópontot, ezért a lehetséges Hamilton körök száma az n -ed részére csökken, azaz Emiatt az utazóügynök feladatban is ennyi út lehetséges és ezek közül kell nekünk kiválasztani a lehető legjobbat. [8] Ezek alapján, ha van 13 városunk, mint amennyi a példafeladatban is szerepel, 239500800 különböző úton lehetséges teljesen bejárni. Az utazóügynök probléma általános leírása [11]: 44

VII.1. Tesztfeladat az utazóügynök problémára: A MATLAB-ban készült programom teszteléséhez az alábbi tesztfeladatot használom, mert nagyon könnyen ellenőrizhető a megoldás. Az alább található pontok koordinátáik alapján egy körre illeszkednek, ilyenkor az ideális út könnyen belátható és kiszámítható, ugyanis jó közelítéssel megegyezik a kör kerületével plusz a centrum és hozzá legközelebb eső pont távolságával. Minimális eltérés azért tapasztalható, mert a pontok közötti távolságok nem körívek, hanem egyenesek. A városokat egy 50 egységnyi sugarú körre helyeztem, amelyből meghatározható a várható minimális út. A pontok neveit és koordinátáit az alábbi táblázat tartalmazza: Városok sorszáma X Y 1 (C) 50 90 2 50 100 3 75 93 4 93 75 5 100 50 6 93 25 7 75 7 8 50 0 9 25 7 10 7 25 11 0 50 12 7 75 13 25 93 4. táblázat: Helyszínek koordinátái Forrás: saját 45