PARALELISMUS V DIFERENCIÁLNÍ EVOLUCI A JEJICH ADAPTIVNÍCH VARIANTÁCH



Podobné dokumenty
Navrženy v 60. letech jako experimentální optimalizační metoda. Velice rychlá s dobrou podporou teorie

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21

Procesy a vlákna (Processes and Threads)

ČVUT FEL X36PAA - Problémy a algoritmy. 4. úloha - Experimentální hodnocení algoritmů pro řešení problému batohu

Užití systému Matlab při optimalizaci intenzity tepelného záření na povrchu formy

Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.

Adaptace v algoritmu diferenciální evoluce

Swarm Intelligence. Moderní metody optimalizace 1

Paralení programování pro vícejádrové stroje s použitím OpenMP. B4B36PDV Paralelní a distribuované výpočty

SPECIFICKÝCH MIKROPROGRAMOVÝCH ARCHITEKTUR

1. Zpracování událostí na pozadí aplikace

Markov Chain Monte Carlo. Jan Kracík.

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

AKCELERACE EVOLUCE PRAVIDEL CELULÁRNÍCH AUTOMATŮ NA GPU

Static Load Balancing Applied to Time Dependent Mechanical Problems

ČVUT FEL X36PAA - Problémy a algoritmy. 5. úloha - Seznámení se se zvolenou pokročilou iterativní metodou na problému batohu

4. Úvod do paralelismu, metody paralelizace

Složitost algoritmů. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Algoritmy pro spojitou optimalizaci

Paralelní výpočty ve finančnictví

Projekční algoritmus. Urychlení evolučních algoritmů pomocí regresních stromů a jejich zobecnění. Jan Klíma

Testování prvočíselnosti

Paralelní a distribuované výpočty (B4B36PDV)

Evoluční algoritmy. Podmínka zastavení počet iterací kvalita nejlepšího jedince v populaci změna kvality nejlepšího jedince mezi iteracemi

Paralelní programování

Využijte plný výkon procesorů s více jádry v LabVIEW 8.5

Algoritmizace diskrétních. Ing. Michal Dorda, Ph.D.

Časová a prostorová složitost algoritmů

VISUAL BASIC. Přehled témat

IMOSI - MODELACE A SIMULACE LEARN 2013 správně možná špatně

Obecné výpočty na GPU v jazyce CUDA. Jiří Filipovič

Firmware řídící jednotky stejnosměrného generátoru

Paralelní a distribuované výpočty (B4B36PDV)

Paralelní programování

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ v Praze Ú12110 Ústav přístrojové a řídící techniky

Poslední nenulová číslice faktoriálu

Analýza spolehlivosti tlakové nádoby metodou Monte Carlo

Program a životní cyklus programu

7.6 Další diagramy UML

2. Modelovací jazyk UML 2.1 Struktura UML Diagram tříd Asociace OCL. 3. Smalltalk 3.1 Jazyk Pojmenování

11. Přehled prog. jazyků

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

TÉMATICKÝ OKRUH Softwarové inženýrství

Jakub Čermák Microsoft Student Partner

7.6 Další diagramy UML

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Paralelní programování

SYSTÉMY NAČIPU MI-SOC

1. Téma 03 - Rozhodování

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

ADAPTIVNÍ ALGORITMUS PRO ODHAD PARAMETRŮ NELINEÁRNÍCH REGRESNÍCH MODELŮ

2. úkol MI-PAA. Jan Jůna (junajan)

Vlákna a přístup ke sdílené paměti. B4B36PDV Paralelní a distribuované výpočty

Téma 4: Stratifikované a pokročilé simulační metody

Management procesu I Mgr. Josef Horálek

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Michal Wiglasz* 1. Úvod

Přidělování paměti II Mgr. Josef Horálek

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

Simulační modely. Kdy použít simulaci?

Disková pole (RAID) 1

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

METODY DOLOVÁNÍ V DATECH DATOVÉ SKLADY TEREZA HYNČICOVÁ H2IGE1

Gramatická evoluce a softwarový projekt AGE

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna

Vývoj řízený testy Test Driven Development

Algoritmizace a programování

Hledání správné cesty

Uklízení odpadků a analýza úniku

Úvod do programování - Java. Cvičení č.4

Paralelní grafové algoritmy

Modifikace algoritmu FEKM

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

Novinky ve Visual Studio Tomáš Kroupa

10. Složitost a výkon

Překladač a jeho struktura

Architektura počítačů

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Struktury a vazebné energie iontových klastrů helia

LabView jako programovací jazyk II

Relační DB struktury sloužící k optimalizaci dotazů - indexy, clustery, indexem organizované tabulky

Konečný automat. Studium chování dynam. Systémů s diskrétním parametrem číslic. Počítae, nervové sys, jazyky...

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

Paralelní programování

Procesy a vlákna - synchronizace

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

IMPLEMENTACE AUTOMATIZOVANÉHO MĚŘENÍ HRTF V MATLABU

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Obsah. Předmluva 13. O autorovi 15. Poděkování 16. O odborných korektorech 17. Úvod 19

10 Balíčky, grafické znázornění tříd, základy zapozdření

Ing. Tomáš MAUDER prof. Ing. František KAVIČKA, CSc. doc. Ing. Josef ŠTĚTINA, Ph.D.

Knot DNS Resolver. Modulární rekurzivní resolver. Karel Slaný

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Konstruktory a destruktory

Protiopatření eliminující proudovou analýzu


Akademický rok: 2004/05 Datum: Příjmení: Křestní jméno: Osobní číslo: Obor:

Algoritmizace. 1. Úvod. Algoritmus

Příklady popisu základních obvodů ve VHDL

Transkript:

PARALELISMUS V DIFERENCIÁLNÍ EVOLUCI A JEJICH ADAPTIVNÍCH VARIANTÁCH Jiří Bůžek Ostravská univerzita v Ostravě Katedra informatiky a počítačů 30. dubna 22, 701 03 Ostrava Abstrakt: Tato práce se zabývá řešením paralelizace diferenciální evoluce a jejich adaptivních variant. Na základě profilovací analýzy byl sestaven obecný návrh pro implementaci paralelismu v DE. Implementována byla klasická DE a její adaptivní varianty jde, b6e6rl a JADE. Paralelní algoritmy byly porovnány s jejich neparalelními variantami na šesti testovacích funkcích. Výsledku testů ukázaly, že všechny paralelní implementace se zpracovávaly rychleji. Klíčová slova: Diferenciální evoluce, paralelismus 1 Úvod Jediným způsobem jak urychlit zpracování již optimalizovaného algoritmu je jeho paralelizace. Zrychlení jde dosáhnout například paralelním zpracováním p operací jedné nadřazené operace nebo paralelním zpracováním p ekvivalentních operací na více nezávislých výpočetních jednotkách. Řešení obtížných problémů globální optimalizace nebo problémů vyšších dimenzí je často velmi časově náročné. Zavedením paralelismu v doméně algoritmů Diferenciální evoluce má za cíl tuto časovou náročnost zkrátit použitím vhodné dekompozice algoritmů na úrovni datových struktur, tak aby bylo souběžné zpracovávání operací co nejefektivnější. Cílem této práce je implementovat paralelní varianty algortimů DE/rand/1/bin [5], b6e6rl [8], jde [1], JADE s externím archívem [10] a vyřešit problémy s nimi spojené. Hlavním rysem při postupu řešení této problematiky je použití návrhových vzorů a best practices (postupy osvědčené z praxe), aby uživatelům byly doručeny algoritmy řešící problém globální optimalizace, které budou moci reálně použít nebo volně modifikovat. Jednotlivé paralelní implementace v jazyce C# jsou porovnány oproti svým neparalelním variantám. Přepokladem je, že se průměrné hodnoty počtu vyhodnocení účelové funkce a spolehlivosti budou za stejných podmínek rovnat a zároveň potřebný čas k ukončení běhu algortimu u paralelních variant bude nižší. 2 Analýza a návrh Nad dvěma běhy varianty DE/rand/1/bin pro všechny testovací funkce podle [9], (D = 10) byla provedena profilovací analýza měřící počty volání a časování jednotlivých metod algoritmu. Řídící parametry byly nastaveny jako Cr = 0.5 a F = 0.5. Cílem této analýzy bylo zjistit, které části algoritmu zabírají největší režii. průměrná režie v % std. dev generování náhodného čísla 57 15 vyhodnocení účelové funkce (úzká závislost na typu) 11 3 přistupování k populaci (přístupy do paměti) 8.5 3 Tabulka 1: profilovací analýza Podle tabulky 1. je časově nejnáročnější generování náhodných čísel, v průměru se vykonává 57% celkového času. Druhá časově nejnáročnější je metoda vyhodnocení účelové funkce (11% celkového času), za ní jsou agregované metody pro přístup k jedincům populace (8.5%). V poměru celkový uběhlý čas vs. počet volání je jednoznačně nejnákladnější vyhodnocení účelové funkce. Další metody neměly takový význam, aby byly do tabulky zahrnuty. Důležité je zmínit, že průměrná režie vyhodnocení účelové funkce je velmi závislá na její složitosti, proto by výpočetně složitější funkce měla výrazný vliv na výsledky analýzy. Můžeme předpokládat, že tato pozorování budou podobná i pro adaptivní varianty DE. Protože se chceme vyhnout globálním synchronizacím přístupů (zápis a čtení) k proměnným pomocí jejich zamykání, které je velmi časově nákladné, a

protože jsou výše zmíněné metody zhuštěné v oblastech mutace, křížení a selekce, bylo navrženo, že generování zkusmých vektorů se bude provádět souběžně (paralelně) na nezávislých výpočetních jednotkách. Algoritmus 1: paralelní varianta DE generuj počáteční populaci P i = (x 1, x 2,..., x Np ); while ukončovací podmínky do for i := 1 to Np do generuj vektor v mutací ; vytvoř vektor u křížením x a x i ; if f(u) f(x i ) then do T zařaď u; else do T zařaď x i ; end P := T ; end Zvýrazněný obdelník v algoritmu 1. označuje cyklus for, který bude zpracováván paralelně. Všechno co leží vně je zpracováváno hlavním vláknem. Generování zkusmého vektoru, v nemž jsou zahrnuty rutiny mutace a křížení, se provádí nezávisle paralelně, žádná synchronizace není potřebná. Tento návrh bude výchozím řešením pro paralelizaci adaptivních variant DE. 3 Generování pseudonáhodných čísel Prvním významným problémem, kterému je nutno čelit při paralelizaci stochastických simulací, je generování pseudonáhodných čísel. Bez zamykání vnitřních proměnných instance generátoru náhodných čísel může současný přístup různých vláken zapříčinit poškození vnitřního stavu instance. Tato situace může způsobit vyvolání výjimky nebo snížit kvalitu generovaných čísel. To vše závisí na implementaci generátoru. U varianty DE/rand/1/bin se průměrně vygeneruje D+4 náhodných čísel na jedno vyhodnocení účelové funkce. Synchronizace přístupu (zápis do proměnných) k jedné instanci generátoru je pro tento obrovský počet vygenerovaných čísel velmi nevýhodná. Řešením tohoto problému může být vytvoření instancí generátorů pro každé jednotlivé vlákno zvlášť, inicializovaných odlišnými hodnotami. U takových generátorů ale není zaručeno, že sekvence náhodných čísel budou splňovať tyto dané podmínky: vygenerovaná čísla musí být z rovnoměrného rozdělení, mezi sekvencemi nesmí existovat jakákoliv korelace, generátory splňují statistiké testy na náhodnost. Algorimus Mrg32k3a [2] navržený Pierem L Ecuyerem s periodou délky p 2 191 je schopen vytvořit instance jejichž stavy jsou o Z, Z = 2 127 kroků vpřed před poslední vytvořenou instancí. Při vytváření nové instance se generátor překlopí do Z -tého stavu, vypočtením Z -té iterace své funkce vycházející ze stavu posledně vytvořené instance. Mezi dvěma po sobě vytvořenými instancemi leží sekvence 2 127 náhodných čísel, která je nezávislá na sekvenci druhé instance. Tyto instance splňují podmínku nezávislosti a jejich periody jsou dostatečné dlouhé. Modifikace tohoto algoritmu je použita v paralelních implementacích variant DE. Při inicializaci algoritmů je každému vláknu přizazena jeho vlastní instance. Jako generátor pseudonáhodných čísel pro neparalelní varianty byl použit algoritmus Mersenne Twister [3] s periodou p 2 19937 1. 4 Implementace Všechny varianty DE byly implementovány v programovacím jazyce C#, použitý framework.net 4.5 v prostředí Visual Studio 2010. Problém vygenerování zkusmého vektoru, který leží mimo D, je v implemenacích vyřešen metodou zrdcadlení. Složka vektoru, která leží mimo D je překlopena zpátky do D. Pro paralelizaci cyklu for viz. kapitola Analýza a návrh, byla podle [7] použita metoda Parallel.For jmenného prostoru System.Threading.Task z knihovny Task Parallel Library (TPL). Metoda Parallel.For přijímá tři argumenty: dvě celá čísla reprezentující hranici od-do a referenci na funkci, která se bude provádět v jednotlivých iteracích. Vnitřně metoda dynamicky přiřazuje volným vláknům úlohu vygenerování zkusmého vektoru a rutinu selekce. Cyklus není rozdělen do pevných statických částí, což zvyšuje efektivitu paralelního zpracovávání, protože vykonání nevhodně rozdělených statických bloků podobné délky může různým jádrům trvat různou dobu.

Jiná spuštěná úloha s vyšší prioritou může přerušit a předběhnout vykonávání bloku (preempce u operačních systémů). U variant DE/rand/1/bin a jde není problém s použitím vzoru z kapitoly Analýza a návrh. U variant b6e6rl a JADE s externím archívem se ale vyskytují problémy, které znesnadňují použití tohoto vzoru. 4.1 b6e6rl Ve variantě b6e6rl se po události výběru úspěšné strategie provádí aktualizace H normalizovaných pravděpodobností, případně se provádí resetování na jejich výchozí hodnoty. Problémem je, že ve výchozí implementaci, souběžné generování zkusmých vektorů a rutina selekce způsobují současný přístup vláken k poli, v němž jsou uloženy hodnoty počtu výběrů strategií. Během inkrementování počtu výběrů jedné strategie současný přístup dvou a více vláken nastaví tuto proměnou na hodnotu, kterou nemůžeme jasně určit. Synchronizace přístupů k proměnným je v tomto případě nevýhodná, proto byl tento problém vyřešen přesunutím aktualizací pravděpodobností za paralelní cyklus For, tzn. aktualizace pravděpodobností bude provedena po každém vygenerování nové populace. 4.2 JADE U varianty JADE je problémem existence externího archívu A. Přistupování k externímu archívu je nutno synchronizovat, nebo použít dynamickou datovou strukturu, která je vláknově bezpečná. Jako vhodná struktura podle [4] pro řešení implementace externího archívu byla vybrána struktura ConcurrentDictionary a to kvůli tomu, že scénář použití této struktury je velmi podobný s požadovanou implementací archívu. Implementace archívu vyžaduje mnoho čtení prvků a mnoho aktualizací nad prvky množiny archívu A. ConcurrentDictionary vyřešila daný problém, ale řešení zamykáním kritických bloků algoritmu přineslo mnohem lepší výsledky v podobě výrazného zrychlení. Zamykání archívu, proti vstupním a vystupním operacím, se provádí pří vybírání vektoru x r2,g ze sjednocení množin P A, za podmínky když náhodně vygenerovaný index r2 ukazuje do množiny archívu A. Další zamykání se provádí po události, kdy je vygenerován úspěšný zkusmý vektor a vektor staré populace x i je poté vkládán do A. 5 Experimentální testování Podle [9] bylo všech osm implementovaných variant DE, paralelních a neparalelních, otestováno na šesti různých testovacích funkcích. Vstupní parametry byly nastaveny na doporučené hodnoty také podle [9]. Pro každou variantu bylo provedeno 100 opakování, za stejných podmínek Np = 60 a D = 30. U každé paralelní varianty je předpokladem, že spolehlivost a průměrné hodnoty počtu vyhodnocení účelové funkce budou podobné s hodnotami její neparalelní implementace. 5.1 DE/rand/1/bin ackley 0 600000 0 600000 dejong1 100 33679 100 33245 griewank 100 47005 100 47775 rastrigin 0 600000 0 600000 rosen 0 600000 0 600000 schwefel 100 71898 100 71213 ackley 7105 3460 dejong1 344 206 griewank 666 348 rastrigin 6757 3684 rosen 5567 3360 schwefel 803 377 Tabulka 2: DE/rand/1/bin Hodnoty počtu průměrných vyhodnocení účelové funkce nf e a spolehlivosti R se mezi paralelní a neparalelní variantou DE/rand/1/bin velmi podobají. Průměrná doba, za kterou se běh algoritmu ukončí, je pro všechny testovací funkce nejnižší u paralelní varianty.

5.2 jde ackley 100 72927 100 81544 dejong1 100 24487 100 25700 griewank 99 32616 100 34426 rastrigin 100 62144 99 63454 rosen 99 44672 100 44740 schwefel 100 71898 100 71213 ackley 945 525 dejong1 257 144 griewank 431 235 rastrigin 757 397 rosen 2461 1993 schwefel 312 300 Tabulka 3: jde Hodnoty počtu průměrných vyhodnocení účelové funkce nf e a spolehlivosti R se mezi paralelní a neparalelní variantou jde podobají. Vyjímku tvoří testovací funkce ackley u níž je průměrný počet vyhodnocení účelové funkce paralelní varianty vyrazně vyšší než u neparalelní varianty. Průměrná doba, za kterou se běh algoritmu ukončí, je pro všechny testovací funkce nejnižší u paralelní varianty. Obě implementace fungují principiálně stejně, rozdíly mezi průměrnými počty vyhodnocení účelové funkce u testovací funkce ackley mohou být způsobeny použitím dvou různých generátorů náhodných čísel v závislosti na použitých vstupních parametrech. Pro kontrolu spávnosti výsledků bylo měření provedeno třikrát, naměřené hodnoty se výrazně nelišily. 5.3 b6e6rl ackley 100 96100 100 95830 dejong1 100 40281 100 39632 griewank 99 61096 100 61130 rastrigin 100 78188 100 78144 rosen 100 148219 100 148438 schwefel 100 66770 100 67616 ackley 1003 572 dejong1 334 199 griewank 677 418 rastrigin 757 466 rosen 1174 784 schwefel 687 477 Tabulka 4: b6e6rl Hodnoty počtu průměrných vyhodnocení účelové funkce nf e a spolehlivosti R se mezi paralelní a neparalelní variantou b6e6rl velmi podobají. Průměrná doba, za kterou se běh algoritmu ukončí, je pro všechny testovací funkce nejnižší u paralelní varianty. Přesunutí metody aktualizace pravděpodobností výběru strategií nemělo významný na průměrný počet vyhodnocení účelové funkce. 5.4 JADE ackley 100 73859 100 74065 dejong1 100 13284 100 13379 griewank 89 22348 91 23809 rastrigin 100 67408 100 67021 rosen 97 77022 94 77186 schwefel 82 57168 82 56980 ackley 1356 697 dejong1 239 131 griewank 457 343 rastrigin 1208 667 rosen 1402 802 schwefel 971 583 Tabulka 5: JADE

Hodnoty počtu průměrných vyhodnocení účelové funkce nf e a spolehlivosti R se mezi paralelní a neparalelní variantou JADE velmi podobají. Průměrná doba, za kterou se běh algoritmu ukončí, je pro všechny testovací funkce nejnižší u paralelní varianty. Globální synchronizace čtení a zápisu prvků do externího archívu negativně neovlivnila počty vyhodnocení účelové funkce ani spolehlivost. 5.5 Shrnutí Všechny implementace paralelních variant DE jsou časově méně naročnejší než jejich neparalelní varianty. Ve všech případech, kromě varianty jde (testovací funkce ackley), jsou spolehlivost nalezení přijatelného řešení a počty vyhodnocení účelové funkce podobné. Testování algoritmů probíhalo na osobním počítači s 64-bit operačním systémem Windows 7 Professional, dvoujádrovým procesorem Intel Core i3 (4 logické jednotky), při průměrném 45% výtížení 4GB RAM paměti. Průměrné délky trvání běhů paralelních implementací jsou zhurba o polovinu kratší než délky trvání u neparalelních. Profilovací analýzou bylo zjištěno, že hruba 43% celkového času vykonávání algoritmu zabrala režie spojená s přiřazováním úloh vláknům a s voláním obslužných metod z jmenného prostoru System.Threading. Tyto systémové rutiny nemůže uživatel přímo ovlivnit. U varianty JADE se navíc v průměru 14% celkového času běhu algoritmu čekalo na uvolňování synchronizačních zámků nad množinou A. Z těchto důvodů nebylo dosaženo lepšího zrychlení. 6 Závěr Bylo implementováno celkem osm algoritmů diferenciální evoluce. Všechny paralelní varianty se při experimentálním testování projevily jako rychlejší. Během práce se podařilo navrhnout funkční vzor pro paralelizaci existujících algoritmů DE a zároveň byly vyřešeny problémy globální synchronizace proměnných u variant b6e6rl a JADE. V této práci se autor nezabýval problémem False Sharing [6]. Při budoucím postupu by se měl tento problém, pokud se v implementacích vyskytuje, přednostně vyřešit. Implementované algoritmy by také měly být otestovány na širším spektru testovacích problémů. Zdrojové kódy algoritmů, dokumentace, API a příklady použití jsou dostupné volně ke stažení na adrese http://adaptivedenet.codeplex.com/. Reference [1] Janez Brest, Saso Greiner, Borko Boskovic, Marjan Mernik, and Viljem Zumer. Self-adapting control parameters in differential evolution: A comparative study on numerical benchmark problems. Evolutionary Computation, IEEE Transactions on, 10(6):646 657, 2006. [2] Pierre L ecuyer, Richard Simard, E Jack Chen, and W David Kelton. An object-oriented random-number package with many long streams and substreams. Operations Research, 50(6):1073 1075, 2002. [3] Makoto Matsumoto and Takuji Nishimura. Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator. ACM Transactions on Modeling and Computer Simulation (TOMACS), 8(1):3 30, 1998. [4] Microsoft MSDN. When to use a thread-safe collection @ONLINE, December 2012. [5] Rainer Storn and Kenneth Price. Differential evolution a simple and efficient heuristic for global optimization over continuous spaces. Journal of global optimization, 11(4):341 359, 1997. [6] Stephen Toub, Igor Ostrovsky, and Huseyin Yildiz.. net matters-false sharing. MSDN magazine, page 153, 2008. [7] Stephen Toub and Parallel Computing Platform. Patterns of parallel programming. Microsoft Corporation, 2010. [8] Josef Tvrdık. Self-adaptive variants of differential evolution with exponential crossover,. Analele of West University Timisoara, Series Mathematics-Informatics, 47:151 168, 2009. [9] Josef Tvrdík, Radka Poláková, Jiří Veselskỳ, and Petr Bujok. Adaptive variants of differential evolution: Towards control-parameter-free optimizers. In Handbook of Optimization, pages 423 449. Springer, 2013.

[10] Jingqiao Zhang and Arthur C Sanderson. Jade: adaptive differential evolution with optional external archive. Evolutionary Computation, IEEE Transactions on, 13(5):945 958, 2009.