értékel függvény: rátermettségi függvény (tness function)

Hasonló dokumentumok
értékel függvény: rátermettségi függvény (tness function)

angolul: greedy algorithms, románul: algoritmi greedy

Programozás I. gyakorlat

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

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

Vezérlési szerkezetek

Algoritmusok bonyolultsága

Vezérlési szerkezetek. Szelekció Ciklusok

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Bevezetés a programozásba I.

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Dinamikus programozás vagy Oszd meg, és uralkodj!

BASH SCRIPT SHELL JEGYZETEK

Programozási módszertan. Mohó algoritmusok

/* Az iter függvény meghívása és a visszatérő érték átadása a gyok változóba */ gyok = iter( n, a, e ) ;

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Genetikus algoritmusok

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Megoldott programozási feladatok standard C-ben

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Apple Swift kurzus 3. gyakorlat

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

INFORMATIKA tétel 2019

C változók. Feladat: Deklaralj egy valos, egy karakter es ket egesz tipusu valtozot! int main() {

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Programozás alapjai 5. gyakorlat Vezérlési szerkezetek egymásba ágyazása

Algoritmizálás + kódolás C++ nyelven és Pascalban

int tokeletes(int szam) { int i,oszto=0; for(i=1; i<szam; i++) { if(szam %i == 0) { oszto+=i; }

7/8. gyakorlat Karaktertömbök és sztringkezelés

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Informatika terméktervezőknek

B I T M A N B I v: T M A N

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Permutáció n = 3 esetében: Eredmény: permutációk száma: P n = n! romámul: permutări, angolul: permutation

Érdekes informatika feladatok

3 A C programozási nyelv szintaktikai egységei

INFORMATIKA javítókulcs 2016

Programozási segédlet

Evolúciós algoritmusok

Országzászlók (2015. május 27., Sz14)

Intelligens Rendszerek Elmélete IRE 4/32/1

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Intelligens Rendszerek Elmélete. Párhuzamos keresés genetikus algoritmusokkal

2.3. A C nyelv utasításai

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Adatbázis rendszerek Gy: Algoritmusok C-ben

10. gyakorlat Tömb, mint függvény argumentum

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

Rendezések. A föltöltés nemcsak az r-re vonatkozik, hanem az s-re is. Ez használható föl a további rendezések

Algoritmusok pszeudókód... 1

Internet programozása. 3. előadás

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 3. előadás

Algoritmusok helyességének bizonyítása. A Floyd-módszer

Megoldott programozási feladatok standard C-ben

Algoritmusok Tervezése. 9. Előadás Genetikus Algoritmusok Dr. Bécsi Tamás

Programozás I. házi feladat

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

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

Intelligens technikák k a

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Amortizációs költségelemzés

Java programozási nyelv

Szövegek C++ -ban, a string osztály

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

Körkörös listák. fej. utolsó. utolsó. fej

Programozás alapjai 8.Gy: Program struktúra

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

Gauss-Seidel iteráció

1. Alapok. Programozás II

Informatikai Rendszerek Tervezése

Párhuzamos genetikus algoritmus

Mesterséges Intelligencia MI

Universität M Mis is k k olol cic, F Eg a y kultä etem t, für Wi Gazda rts ságcha tudfts o w máis n s yen i scha Kar, ften,

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Simon Károly Babes Bolyai Tudományegyetem

Programozás 6. Dr. Iványi Péter

14. Mediánok és rendezett minták

Programozás II. 2. Dr. Iványi Péter

Tartalomjegyzék Algoritmusok - pszeudókód

Programozás I gyakorlat

Programozás alapjai 9.Gy: Struktúra 2.

Algoritmusok vektorokkal keresések 1

Bevezetés a C programozási nyelvbe. Az Általános Informatikai Tanszék C nyelvi kódolási szabványa

1. feladat Az egyensúly algoritmus viselkedése: Tekintsük a kétdimenziós Euklideszi teret, mint metrikus teret. A pontok

f(x) vagy f(x) a (x x 0 )-t használjuk. lim melyekre Mivel itt ɛ > 0 tetszőlegesen kicsi, így a a = 0, a = a, ami ellentmondás, bizonyítva

Programozás I gyakorlat

Programozás I gyakorlat

Közösség detektálás gráfokban

Átírás:

Genetikus algoritmusok globális optimalizálás sok lehetséges megoldás közül keressük a legjobbat értékel függvény: rátermettségi függvény (tness function) populáció kiválasztjuk a legrátermettebb egyedeket keresztezési (rekombinációs) és mutációs m veletekkel aktualizáljuk keresztezés 1. szül 1 0 0 0 1 1 1 2. szül 1 1 1 1 0 0 0 1. utód 1 0 0 1 0 0 0 2. utód 1 1 1 0 1 1 1 mutáció eredeti 1 0 0 0 1 1 1 mutált 1 1 0 0 1 1 1 1

A genetikus algoritmus f bb lépései: 1. (Kezdet) Véletlenszer en el állítunk egy N elem populációt (elemei egyedek v. kromoszómák). 2. (Rátermettség vizsgálata) Kiszámítjuk minden egyed rátermettségét. 3. (Új populáció el állítása) a. (Kiválasztás) Kiválasztunk két egyedet (bizonyos kritérium alapján). b. (Keresztezés) Keresztezzük a két kiválasztott egyedet. c. (Mutáció) A két utódegyeden mutációt hajtunk végre. 4. (Helyettesítés) Helyettesítjük a régi populációt az újjal. 5. (Ellen rzés) Ha a leállási feltétel igaz, akkor vége. Különben folytassuk a 2. lépéssel. 2

Kiválasztási kritériumok elitista kiválasztás: a legrátermettebb egyedek kiválasztása arányos kiválasztás: a legrátermettebbek a legvalószín bbek, de nem feltétlenül rulettkerék kiválasztás: a rátermettebbek nagyobb szeletet kapnak a rulettkeréken, amely véletlenszer en áll meg egy adott helyen skálázott kiválasztás: a rátermettségi függvény változik, ahogy az átlagos rátermettség n verseny típusú kiválasztás: az egyedek részcsoportjain belül mindenki mindenkivel versenyzik. Minden csoportból csak egy kerül tovább. rang szerinti kiválasztás: minden egyed kap egy rangot (a rátermettség alapján), és e szerint választódik ki, nem az abszolút különbség alapján generációs kiválasztás: csak új egyedek kerülnek az új generációba, a régiek kimaradnak stationárius állapotú kiválasztás: bizonyos kiválasztott egyedek visszakerülnek egy el z generációba, hogy a gyengébb egyedeket helyettesítsék hierarchikus kiválasztás: szinteken keresztül történik a kiválasztás 3

Hátizsákfeladat hátizsák kapacitása K s 1, s 2,..., s n tömeg tárgyak, az i-edikb l n i darab van (1 n i < ), e 1, e 2,..., e n érték ek, megoldás: x 1, x 2,..., x n feladat: { s1 x 1 + s 2 x 2 +... + s n x n K 0 x i n i, i = 1, 2,..., n max(e 1 x 1 + e 2 x 2 +... + e n x n ) Ha minden n i = 1, akkor 0-1 hátizsákfeladatról beszélünk. 0-1 hátizsákfeladat tömegek: (s 1, e 1 ) (s 2, e 2 ) (s n, e n ) megoldás: x 1 x 2 x n (kromoszóma) x i = 1, ha az i-edik tárgy bekerül a zsákba 4

Az algoritmus f lépései: 1. Inicializáljuk az els generációt (N kromoszóma) 2. repeat 3. minden kromoszómára számítsuk ki az össztömeget és rátermettséget (nyereséget) 4. if a kromoszómáknak kevesebb, mint 90%-a azonos nyereség 5. then válasszunk ki véletlenszer en két kromoszómát 6. keresztezzük ket, 7. majd hajtsunk végre mindkét utódon mutációt 8. until legalább 90% kromoszóma azonos nyereség vagy a lépésszám nagyobb a fels korlátnál A rátermettségi függvény Minden kromoszómára a populációból végezzük el: 1. while igaz 2. do számítsuk ki az össztömeget és nyereséget 3. if össztömeg K 4. then return össztömeg, nyereség 5. else véletlenszer en válasszunk ki egy 1-est 6. állítsuk 0-ra a megfelel értéket 5

Verseny típusú (csoportos) kiválasztás rátermettségi függvény f(i) az i-edik tárgy rátermettségi függvénye i 0 1 2 3 4 5 6 7 8 9 10 11 f(i) 40 20 5 1 9 7 38 27 16 19 11 3 Csökken sorrendben f értéke szerint a tárgyak indexe: 0 1 2 3 4 5 6 7 8 9 10 11 0 6 7 1 9 8 10 4 5 2 11 3 4 csoportra osztjuk a tömböt (indexek alapján): 02 35 68 911 Véletlenszer en választunk: 50%-os valószín séggel választunk az 1. csoportból, 30%-os valószín séggel választunk a 2. csoportból, 15%-os valószín séggel választunk a 3. csoportból, 5%-os valószín séggel választunk a 4. csoportból. 6

Véletlenszer en generálunk egy 0 99 közötti számot, ha 0 49 közötti, akkor az 1. csoportból választunk véletlenszer en egy elemet, ha 50 89 közötti, akkor az 2. csoportból választunk véletlenszer en egy elemet, ha 90 94 közötti, akkor az 3. csoportból választunk véletlenszer en egy elemet, ha 95 99 közötti, akkor az 4. csoportból választunk véletlenszer en egy elemet. 7

Utazó ügynök problémája (Traveling Salesman Problem) n város: 1, 2, 3,..., n, közöttük adott távolsággal feladat: legrövidebb körút meghatározása Kromoszóma: az 1, 2, 3,..., n számok egy permutációja. Egyéb feladatok: függvények maximuma gráfszínezés Három példa (Javaban): http://www.obitko.com/tutorials/genetic-algorithms 8

A genetikus algoritmus el nyei gyors kis er forrásigény egyszer és olcsó implementáció globális optimumot talál A genetikus algoritmus hátrányai matematikailag nem bizonyítható a megoldás helyessége nem mindig konvergál 9

Generikus algoritmusok b vebben: https://infoc.eet.bme.hu/ea13/#1 { általános, közös, angol: generic román: generic 1. példa nem specikus Szeretnénk egy menü segítségével különböz m veleteket elvégezni. Pl: Menü 1. összeadás 2. szorzás 3. hatványozás 0. kilépés printf("menu\n\n"); printf("1. osszeadas\n"); printf("2. szorzas\n"); printf("3. hatvanyozas\n"); printf("0. kilepes\n"); scanf("%u", &valasztas); 1

if (valasztas<4) { switch (valasztas) { case 1: eredm = osszead(a, b); break; case 2: eredm = szoroz(a, b); break; case 3: eredm = hatvanyoz(a, b); break; } printf("e = %d\n", eredm); } Mi van akkor, ha a menüt szeretnénk b víteni, pl. kivonással? És szeretnénk, ha ez a második helyre kerülne. A direkt beszúrások helyett (több helyre is kell), jobb megoldás lenne egy általános program megírása, ahova könnyen be lehetne szúrni az újabb menüpontot (minél kevesebb helyre). 2

typedef int (*MenuFv)(int, int); typedef struct { char const *nev; MenuFv pfv; } MenuPont; A megvalósítás: printf("menu\n"); MenuPont menupontok[] = { { " osszeadas", osszead }, { " szorzas", szoroz }, { " hatvanyozas", hatvanyoz }, { NULL, NULL } /* végjel */ }; for (i = 1; menupontok[i-1].nev!= NULL; ++i) printf("%d. %s\n", i, menupontok[i-1].nev); meret = i; /* a for() végén i = tömb mérete */ scanf("%d", &valasztas); 3

if (0 < valasztas && valasztas < meret) { eredm = menupontok[valasztas-1].pfv(3, 5); /* függvénypointer */ printf("e=: %d\n", eredm); } Ha szeretnénk beszúrni egy új m veletet, pl. kivonást elég csak megírni az a függvényt és itt módosítani: printf("menu\n"); MenuPont menupontok[] = { }; { " osszeadas", osszead }, { " kivon", kivon }, // *** { " szorzas", szoroz }, { " hatvanyozas", hatvanyoz }, { NULL, NULL } /* végjel */ Teljes példa a honlapon. 4

2. példa A következ függvény teszteli adott esetre, hogy hányszor jelenik meg pénzfeldobásnál a fej vagy az írás. double fejvagyiras(void) { int i, hanyszor; hanyszor = 0; for (i = 0; i < 1000; ++i) if (rand()%2 == 0) hanyszor += 1; return hanyszor / 1000.0; Hasonlóképpen, szeretnénk megvizsgálni, hogy véletlenszer en generált koordinátákra pl. -1 és 1 között, hányszor esik a megfelel pont az egységnyi súgarú körbe. A fenti megoldás mintájára ez is megoldható. De jobb lenne egy általános megoldás, amely máskor is alkalmazható. 5

Írjunk egy generikus programot a Monte Carlo módszerre! int (*kiserlet)(void); double montecarlo(int (*kiserlet)(void)) { int i, hanyszor; hanyszor = 0; for (i = 0; i < 100000; ++i) if (kiserlet()) hanyszor += 1; return hanyszor / 100000.0; //ne egész osztás! A megfelel függvények: int fejvagyiras(void) { } return (rand()%2 == 0); 6

int egysegkorbe(void) { double x = rand()/(double) RAND_MAX; double y = rand()/(double) RAND_MAX; return x*x + y*y < 1; } A f programban: printf("fej:%g\n", 100.0*montecarlo(fejvagyiras)); printf("korbe:%g\n", 100.0*montecarlo(egysegkorbe)); printf("pi:%g\n", 4*montecarlo(egysegkorbe)); Eredmények: 1000-szer: fej: 49.3 korbe: 76.6 pi: 3.048 10000-szer: fej: 49.65 korbe: 78.01 pi: 3.1344 100000-szer: fej: 49.855 korbe: 78.418 pi: 3.14772 7