ALGORYTM GENETYCZNY 1C
|
|
- Józef Sosnowski
- 8 lat temu
- Przeglądów:
Transkrypt
1 POLITECHNIKA POZNAŃSKA WYDZIAŁ ELEKTRONIKI I TELEKOMUNIKACJI RAPORT METODY OPTYMALIZACJI ALGORYTM GENETYCZNY 1C Michał Kaszuba, #88515 Multimedia i Elektronika Powszechnego Użytku Poznań, 2012/13 str. 1
2 1. Treść zadania Proszę znaleźd wartośd minimalną funkcji postaci: Przed przystąpieniem do rozwiązania zadania metodą algorytmu genetycznego proszę znaleźd rozwiązanie analityczne. Zdefiniowad parametry algorytmu. Określid wpływ metody selekcji i parametrów rekombinacji oraz rozmiaru populacji, ilości generacji, wielkości populacji elitarnej na rozwiązanie zadania, gdzie: Selekcja może zostad przeprowadzona jedną z poniższych metod: metodą ruletki, metodą turniejową, metodą rankingową. Krzyżowanie jednopunktowe, wielopunktowe, wielowymiarowe, zliczające-1, ewolucja powiązao. Mutacja wymiana bitu, wstawienie bitu, usunięcie genu, mutacja infekcją wirusową, mutacja różnicowaniem lub naśladowaniem. str. 2
3 2. Analiza funkcji Minimalizowana funkcja celu: f(x1,x2,x3) = a 1 x 1 + a 2 x 2 + a 3 x 3 warunki ograniczające: Łatwo zauważyd, że wartośd funkcji będzie najmniejsza, gdy przy parametrach decydujących a 1, a 2 oraz a 3 jak w poniższej tabeli współrzędne x 1, x 2, x 3 będą osiągały następujące wartości: Parametry decydujące Punkt minimum Zdefiniowanie parametrów algorytmu a) Parametry wejściowe: Liczba osobników (chromosomów) w jednym pokoleniu (populacji, iteracji algorytmu): POP_SIZE Liczba iteracji algorytmu (liczba pokoleo, generacji): MAX_ITER Rodzaj selekcji: seltype Rodzaj krzyżowania: crosstype Rodzaj mutacji: muttype Prawdopodobieostwo krzyżowania (o ile wymagane w danej metodzie krzyżowania): CROSS_PROBAB Prawdopodobieostwo mutacji (o ile wymagane w danej metodzie mutacji): MUT_PROBAB b) Parametry wyjściowe: Znalezione współrzędne x1,x2,x3 minimum analizowanej funkcji Wartośd analizowanej funkcji dla znalezionego minimum: f(x1,x2,x3) 4. Realizacja programowa założenia, wybór platformy i narzędzi Implementacja algorytmu genetycznego została wykonana w języku C++ z tekstowym (konsola) interfejsem użytkownika. Do implementacji posłużył program Visual C Professional firmy Microsoft. 5. Interakcja zaimplementowanego algorytmu z użytkownikiem Zaimplementowany algorytm wczytuje od użytkownika kolejno dane wymienione w punkcie 3., następnie przeprowadza niezbędne przetwarzanie (MAX_ITER iteracji algorytmu genetycznego) i prezentuje na ekranie wyniki swojego działania. Podczas przetwarzania na ekranie widoczny jest procentowy wskaźnik postępu, więc z góry wiadomo, na jakim etapie przetwarzania jest program (istotne, gdy poda się np. setki tysięcy pokoleo jako daną wejściową). Przykładowy wynik działania programu przedstawiono poniżej. str. 3
4 6. Wyniki badań i wnioski Ciężko jest stwierdzid która metoda selekcji/krzyżowania/mutacji jest najlepsza z uwagi na to, że algorytm za każdym razem daje inny wynik (z uwagi na czynnik losowy, który jest istotą algorytmów genetycznych), jednak poczynione obserwacje pozwalają wysnud ogólny wniosek, że wszystkie zaimplementowane metody selekcji/krzyżowania/mutacji dają zadowalające wyniki, tj. algorytm jest zbieżny dla każdej kombinacji metod selekcji/krzyżowania/mutacji. Minimum analizowanej funkcji jest zawsze znajdowane, jednak z dokładnością jego lokalizacji przez algorytm jest różnie. Dla parametrów a 1 =a 2 =a 3 =1 analizowana funkcja przyjmuje postad f(x1,x2,x3) = x1 + x2 + x3. Jest zatem oczywiste, że wówczas minimum funkcji znajduje się dla x1,x2,x3 jak najmniejszych, co przy zadanych ograniczeniach równa się: Rzeczywiste minimum funkcji: f(,,) = Wg tego kryterium zostało przeprowadzonych kilka testów praktycznych implementacji AG. Wyniki przedstawiono poniżej (z uwagi na mnogośd zaimplementowanych metod ograniczono się do niektórych ich kombinacji): Wielkość populacji (POP_SIZE) Ilość pokoleń (MAX_ITER) selekcja krzyżowanie mutacja prawd. krzyż. [%] Ruletka Jednopunktowe Wymiana bitu Ruletka Jednopunktowe Wymiana bitu Ruletka Jednopunktowe Wymiana bitu turniejowa Jednopunktowe Wymiana bitu Rankingowa Jednopunktowe Wymiana bitu Rankingowa Jednopunktowe Wymiana bitu Rankingowa Jednopunktowe Wymiana bitu prawd. mutacji [%] x1,x2,x f(x1,x2,x3) str
5 Ruletka wielowymiarowe Usunięcie genu Rankingowa ewolucja powiązao naśladowaniem turniejowa zliczające-1 różnicowaniem turniejowa wielopunktowe wstawienie bitu turniejowa wielopunktowe wstawienie bitu Ruletka Jednopunktowe usunięcie genu turniejowa ewolucja powiązao naśladowaniem Wnioski (komentarz do wyników): w powyższej tabeli starano się ukazad możliwie jak najwięcej scenariuszy działania AG. Wnioski jakie płyną z obserwacji wyników są następujące: im większa populacja (jedno pokolenie), tym wyniki są lepsze (porównaj przypadek 2 i 3, przypadek 14), im więcej pokoleo (iteracji AG), tym wynik dokładniejszy (porównaj przypadek 6 i 7), duża liczba iteracji AG przy niewielkiej populacji daje słaby wynik przypadek 13. Wynika to stąd, że tak naprawdę poza chromosomem ulegającemu elitaryzmowi mamy tutaj tylko jeden regularny chromosom, więc ciężko mówid tu o rozmnażaniu i pokoleniowości, a zarazem o zbieżności AG w takim przypadku, duża liczba iteracji oraz liczna populacja (przypadek 7) daje bardzo dobre wyniki, jednak jest to okupione długim czasem obliczeo (kilkadziesiąt sekund na procesorze 2,2 GHz, 1,5 GB RAM), prawdopodobieostwo wystąpienia mutacji i krzyżowania ma znaczący wpływ na wynik - porównaj przypadek 1 i 2. Bardzo liczna populacja przy bardzo niewielu pokoleniach (iteracjach AG) daje optymalny wynik (przypadek 13) jest to spowodowane tym, że jako wynik jest tutaj brany chromosom poddany elitaryzmowi, więc najlepszy z chromosomów. Wada: duża zajętośd pamięci RAM, długi czas przetwarzania. Bardzo nieliczna populacja i mało pokoleo daje bardzo słabe rezultaty -> przypadek 11 Każda zaimplementowana metoda selekcji/krzyżowania/mutacji daje zadowalający wynik (błąd maksymalnie kilka procent) przy dobrze dobranych pozostałych parametrach, Przybliżona (z uwagi na brak powtarzalności działania AG) minimalna wielkośd populacji zapewniająca zadowalający wynik: Przybliżona (z uwagi na brak powtarzalności działania AG) minimalna liczba pokoleo (iteracji AG) zapewniająca zadowalający wynik: 50 Dla pokazania, że zaimplementowany AG działa również dla innych a i, poniżej przedstawiono podobną tabelę dla a 1 =-1, a 2 =-2, a 3 =4 Analizowana funkcja: f(x 1,x 2,x 3 ) = -x 1-2x 2 +4x 3 Jest zatem oczywiste, że wówczas minimum funkcji znajduje się dla x1 oraz x2 jak największych oraz x3 jak najmniejszego co przy zadanych ograniczeniach równa się: str. 5
6 Rzeczywiste minimum funkcji: f(5.12,5.12,) = Wielkość populacji (POP_SIZE) Ilość pokoleń (MAX_ITER) selekcja krzyżowanie mutacja prawd. krzyż. [%] turniejowa zliczające-1 różnicowaniem rankingowa ewolucja powiązao usunięcie genu ruletka wielopunktowe wstawienie bitu ruletka wielopunktowe naśladowaniem 15 - prawd. mutacji [%] x1,x2,x f(x1,x2,x3) Reprezentacja chromosomu Przyjęte kodowanie: binarne. Długośd chromosomu: 8 bitów/gen (8 bitów/zmienną analizowanej funkcji). 24 bity/chromosom. Długośd chromosomu wyznaczona zostala w następujący sposób: Zał. 3 zmienne (x 1,x 2,x 3 ) => długośd chromosomu: 24 bity const unsigned int CHROM_LENGHT = 24; typedef struct unsigned short gen[chrom_lenght]; unsigned short seltourgroup; unsigned short selrankval; chromosom; // długośc chromosomu // chromosom // geny // grupa w której jest chromosom (selekcja turniejowa) // ranga chromosomu (selekcja rankingowa) 8. Reprezentacja populacji chromosomów (jedno pokolenie i MAX_ITER pokoleń) typedef struct // para rodzicielska unsigned int mom; unsigned int dad; parentcouple; typedef struct chromosom* pop; parentcouple* parents; // pojedyncze pokolenie // POP_SIZE chromosomów // POP_SIZE-1 par rodzicielskich str. 6
7 population; population* tpop; tpop = new population[max_iter]; for(int i=0; i<max_iter; i++) tpop[i].pop = new chromosom[pop_size]; tpop[i].parents = new parentcouple[pop_size-1]; Komentarz: jedno pokolenie zawiera POP_SIZE chromosomów oraz POP_SIZE-1 par rodzicielskich. Par rodzicielskich jest o 1 mniej niż chromosomów, bo jeden chromosom (najlepiej przystosowany) jest bezpośrednio kopiowany do następnej populacji, więc potrzeba jedynie POP_SIZE-1 potomków. Z każdej pary rodzicielskiej powstaje jeden potomek. 9. Główna funkcja AG int main() srand((int)time(null)); loadparams(); firstpop(); // wczytanie parametrów // wygenerowanie pierwszej populacji for(int i=0; i<max_iter-1; i++) // generowanie nowej populacji elitism(i); selection(i); crossing(i); mutatation(i); // progress(i); showres(); cleanup(); // wyniki // porządki Powyżej przedstawiono główną funkcję (main()) oraz główną pętlę zaimplementowanego AG. Kolejno następuje: wczytanie parametrów od użytkownika, wygenerowanie pierwszej populacji, następnie w pętli następuje tworzenie kolejnych pokoleo w procesach kolejno: elitaryzmu, selekcji, krzyżowania i mutacji. Funkcja progres(i) pokazuje procentowy wskaźnik postępu obliczeo na ekranie. Po wyjściu z głównej pętli następuje wyświetlenie wyników działania AG oraz porządki (dealokacja pamięci zajętej przez dynamicznie utworzone tablice). 10. Kod źródłowy zaimplementowanego AG Kod programu składa się z pięciu plików: - main.c -> główny plik programu, pętla główna, - guni.h -> plik nagłówkowy generatora liczb pseudolosowych o rozkładzie równomiernym, - guni.c -> plik źródłowy generatora liczb pseudolosowych o rozkładzie równomiernym, - genalg.h -> plik nagłówkowy AG - genalg.c -> plik źródłowy AG str. 7
8 main.c: #include <iostream> #include <ctime> #include "genalg.h" #include "guni.h" using namespace std; int main() srand((int)time(null)); loadparams(); firstpop(); // wczytanie parametrów // wygenerowanie pierwszej populacji for(int i=0; i<max_iter-1; i++) // generowanie nowej populacji elitism(i); selection(i); crossing(i); mutatation(i); // progress(i); showres(); cleanup(); // wyniki // porządki guni.h: #ifndef _GUNI_H_ #define _GUNI_H_ /////////////////////////////////////////////////////////////////////////////////////////////// // klasa guni // // // // rozklad rownomierny w przedziale 0-1 // // generator mieszany // // X(n+1) = (a * X(n) + c) mod m // // a=11 // // X(0) = seed <= jadro (ziarno) generatora // // c=7 // // m=1997 // /////////////////////////////////////////////////////////////////////////////////////////////// class guni int seed; // jadro generatora int temp; double result; // wynik losowania public: ; guni(); // konstruktor double getrand(); #endif guni.c: #include <iostream> #include <ctime> #include "guni.h" using namespace std; guni::guni() // konstruktor srand((int)time(null)); seed = rand() % 100; // losowe jadro generatora z zakresu 0-99 temp = seed; // zmienna pomocnicza str. 8
9 double guni::getrand() temp = (11 * temp + 7) % 1997; result = temp/1997.; // przeskalowanie na zakres (0-1), kropka na koncu -> niejawny casting return result; genalg.h: #ifndef _GENALG_ #define _GENALG_ void cleanup(); void progress(int); void loadparams(); void firstpop(); void elitism(int); void selection(int); void crossing(int); void mutatation(int); void showres(); // porządki // licznik procentowy (odpowiednik progress bara) // wczytanie wielkosci populacji (jedno pokolenie) i ilości generacji (pokoleń) // tworzy pierwsza populacje // elitaryzm // selekcja // krzyżowanie // mutacja // pokazanie wyniku algorytmu, x1,x2,x3 oraz f(x1,x2,x3) // stałe const unsigned int CHROM_LENGHT = 24; // długośc chromosomu const unsigned int VAR_NR = 3; // liczba zmiennych optymalizacji (x1, x2, x3) const double XI_THR = 5.12; // granica przedziału xi // extern int POP_SIZE; extern int MAX_ITER; extern double* tfitfunval; // wielkość populacji // max liczba iteracji (warunek stopu) // wartości funkcji przystosowania dla pokolenia typedef struct double a1; double a2; double a3; aival; typedef struct double x1; double x2; double x3; xival; typedef struct // para rodzicielska unsigned int mom; unsigned int dad; parentcouple; typedef struct unsigned short gen[chrom_lenght]; unsigned short seltourgroup; unsigned short selrankval; chromosom; typedef struct chromosom* pop; parentcouple* parents; population; extern population* tpop; // chromosom // geny // grupa w której jest chromosom (selekcja turniejowa) // ranga chromosomu (selekcja rankingowa) // pojedyncze pokolenie // POP_SIZE chromosomów // POP_SIZE-1 par rodzicielskich // MAX_ITER pokoleń // wartość funkcji dopasowania + indeks chromosomu // przydatna struktura gdy chcemy posortować pokolenie wg wartości funkcji przystosowania typedef struct double fitval; unsigned int chind; indfitv; extern enum selectiontype; extern selectiontype seltype; extern enum crossingtype; extern crossingtype crosstype; str. 9
10 extern enum mutationtype; extern mutationtype muttype; extern aival ai; extern xival xi; // a1,a2,a3 // x1,x2,x3 #endif //_GENALG_ genalg.c: #include <iostream> #include <vector> #include <algorithm> #include "genalg.h" #include "guni.h" using namespace std; aival ai; xival xi; selectiontype seltype; crossingtype crosstype; mutationtype muttype; int POP_SIZE; int MAX_ITER; population* tpop = NULL; double* tfitfunval = NULL; double MUT_PROBAB = 0; // prawd. mutacji double CROSS_PROBAB = 0; // prawd. krzyzowania double fitfunval(xival val); double chfitfunval(chromosom ch); xival ch2xi(chromosom ch); void progress(int iter) static int cnt = 0; static int result = 0; if(cnt++ == 0) cout << "\n\n\n"; result = int((double(iter) / double(max_iter)) * 100); cout << "=============== " << result << "%\t=============== " << "\r"; bool cond(indfitv arg1, indfitv arg2) return arg1.fitval < arg2.fitval; enum selectiontype st_none, st_roulette, st_tournament, st_ranking, ; enum crossingtype ct_none, ct_onepoint, ct_manypoints, ct_multidimensional, ct_countingminusone, ct_evolutionoflinks, ; enum mutationtype mt_none, mt_replacebit, mt_insertbit, mt_remgen, mt_infectionvirus, mt_diff, mt_imitation ; void load_ai() for(int i=0; i<3; i++) cout << "Podaj a" << i+1 << ": "; str. 10
11 if(i == 0) cin >> ai.a1; if(i == 1) cin >> ai.a2; cin >> ai.a3; void chooseselmode() seltype = st_none; int temp = 0; bool fcorrectsel = false; while(fcorrectsel == false) fcorrectsel = true; cout << "\nwybor metody selekcji\n" << "\t1 - metoda ruletki\n" "\t2 - metoda turniejowa\n" "\t3 - metoda rankingowa\n\n" "Twoj wybor: "; cin >> temp; switch(temp) case 1: seltype = st_roulette; case 2: seltype = st_tournament; case 3: seltype = st_ranking; default: cout << "zly nr metody!\n"; fcorrectsel = false; void choosecrosstype() crosstype = ct_none; int temp = 0; bool fcorrectcross = false; while(fcorrectcross == false) fcorrectcross = true; cout << "\nwybor krzyzowania\n" << "\t1 - jednopuntkowe\n" "\t2 - wielopunktowe\n" "\t3 - wielowymiarowe\n" "\t4 - zliczajace-1\n" "\t5 - ewolucja powiazan\n\n" "Twoj wybor: "; cin >> temp; switch(temp) case 1: crosstype = ct_onepoint; case 2: crosstype = ct_manypoints; case 3: crosstype = ct_multidimensional; case 4: crosstype = ct_countingminusone; case 5: crosstype = ct_evolutionoflinks; default: cout << "zly nr metody!\n"; fcorrectcross = false; str. 11
12 void choosemuttype() muttype = mt_none; int temp = 0; bool fcorrectmut = false; while(fcorrectmut == false) fcorrectmut = true; cout << "\nwybor mutacji\n" << "\t1 - wymiana bitu\n" "\t2 - wstawienie bitu\n" "\t3 - usuniecie genu\n" "\t4 - infekcja wirusowa\n" "\t5 - roznicowaniem\n" "\t6 - nasladowaniem\n\n" "Twoj wybor: "; cin >> temp; switch(temp) case 1: muttype = mt_replacebit; case 2: muttype = mt_insertbit; case 3: muttype = mt_remgen; case 4: muttype = mt_infectionvirus; case 5: muttype = mt_diff; case 6: muttype = mt_imitation; default: cout << "zly nr metody!\n"; fcorrectmut = false; void loadparams() load_ai(); // wczytanie a1, a2, a3 cout << "Podaj wielkosc populacji (jedno pokolenie): "; bool fcorrinp = false; while(fcorrinp == false) cin >> POP_SIZE; if(pop_size <= 0) fcorrinp = false; cout << "Zla wielkosc populacji! Podaj jeszcze raz: "; continue; fcorrinp = true; fcorrinp = false; cout << "Podaj ilosc generacji (pokolen): "; while(fcorrinp == false) cin >> MAX_ITER; if(max_iter <= 0) fcorrinp = false; cout << "Zla ilosc generacji! Podaj jeszcze raz: "; continue; fcorrinp = true; tpop = new population[max_iter]; for(int i=0; i<max_iter; i++) tpop[i].pop = new chromosom[pop_size]; tpop[i].parents = new parentcouple[pop_size-1]; tfitfunval = new double[pop_size]; str. 12
13 chooseselmode(); // wybór metody selekcji choosecrosstype(); // wybór metody krzyzowania choosemuttype(); // wybór metody mutacji void firstpop() guni g1stpop; unsigned short tmpt[chrom_lenght] = ; for(int j=0; j<pop_size; j++) double tmp = g1stpop.getrand(); tmp *= ; int tmpi = int(tmp); for(int i=0; i<chrom_lenght; i++) tmpt[chrom_lenght-i-1] = tmpi % 2; tmpi /= 2; for(int i=0; i<chrom_lenght; i++) tpop[0].pop[j].gen[i] = tmpt[i]; void elitism(int popnr) // liczymy wartosc funkcji przystosowania // F(ch(x)) = -[a1x1 + a2x2 + a3x3] // chromosom o max F jest kopiowany do nastepnej populacji bez zmian double maxf = ; double tempf = 0; unsigned short maxf_ind = 0; for(int i=0; i<pop_size; i++) tempf = chfitfunval(tpop[popnr].pop[i]); tfitfunval[i] = tempf; if(tempf >= maxf) maxf = tempf; maxf_ind = i; // chromosom o tym numerze ulegnie elitaryzmowi for(int k=0; k<chrom_lenght; k++) tpop[(popnr + 1) % MAX_ITER].pop[0].gen[k] = tpop[popnr].pop[maxf_ind].gen[k]; void selection(int popnr) double minfitv, maxfitv, fitfunvrange, fitvsum; // koło ruletki dla selekcji metodą koła ruletki double* tthrroulette = new double[pop_size + 1]; tthrroulette[0] = 0; tthrroulette[pop_size] = 1; // koło ruletki dla selekcji metodą rankingową double* tthrrankroulet = new double[pop_size + 1]; tthrrankroulet[0] = 0; tthrrankroulet[pop_size] = 1; guni genselection; double group; unsigned int gracnt = 0, grbcnt = 0; double maxfitgra = , maxfitgrb = ; unsigned int maxfitgraind = 0, maxfitgrbind = 0; bool fonegroup = true; unsigned int sumofrank = 0; vector <indfitv> tfitval; switch(seltype) case st_roulette: //min fdop: minfitv = ; for(int i=0; i<pop_size; i++) if(tfitfunval[i] < minfitv) minfitv = tfitfunval[i]; str. 13
14 //max fdop: maxfitv = ; for(int i=0; i<pop_size; i++) if(tfitfunval[i] > maxfitv) maxfitv = tfitfunval[i]; fitfunvrange = maxfitv - minfitv; // zakres zmienności wartości funkcji dopasowania if(minfitv <= 0) for(int i = 0; i<pop_size; i++) tfitfunval[i] += (-minfitv) + 1; // suma fitvsum = 0; for(int i = 0; i<pop_size; i++) fitvsum += tfitfunval[i]; for(int i = 1; i<pop_size; i++) tthrroulette[i] = tthrroulette[i-1] + tfitfunval[i-1]/fitvsum; for(int i=0; i<(pop_size-1); i++) // losowanie par rodzicielskich unsigned int momind = 0, dadind = 0; while(momind == dadind) double mom = genselection.getrand(); for(int j=0; j<pop_size; j++) if(mom < tthrroulette[j+1]) momind = j; momind++; double dad = genselection.getrand(); dadind = 0; for(int j=0; j<pop_size; j++) if(dad < tthrroulette[j+1]) dadind = j; dadind++; tpop[popnr].parents[i].mom = momind; tpop[popnr].parents[i].dad = dadind; case st_tournament: for(int pnr=0; pnr<(pop_size-1); pnr++) while(fonegroup == true) // losowanie grup for(int i=0; i<pop_size; i++) group = genselection.getrand(); if(group >= 0.5) // gra tpop[popnr].pop[i].seltourgroup = 1; //grb tpop[popnr].pop[i].seltourgroup = 2; str. 14
15 // sprawdzenie, czy liczebnośc każdej grupy jest niezerowa for(int i=0; i<pop_size; i++) if(tpop[popnr].pop[i].seltourgroup == 1) gracnt++; grbcnt++; if((gracnt == 0) (grbcnt == 0)) fonegroup = true; fonegroup = false; maxfitgra = ; maxfitgrb = ; // najlepiej dopasowany chromosom z gra for(int i=0; i<pop_size; i++) double tmp = chfitfunval(tpop[popnr].pop[i]); if(tpop[popnr].pop[i].seltourgroup == 1) if(tmp >= maxfitgra) maxfitgra = tmp; maxfitgraind = i; // najlepiej dopasowany chromosom z grb if(tpop[popnr].pop[i].seltourgroup == 2) if(tmp >= maxfitgrb) maxfitgrb = tmp; maxfitgrbind = i; // przypisanie wyznaczonych rodziców tpop[popnr].parents[pnr].mom = maxfitgraind; tpop[popnr].parents[pnr].dad = maxfitgrbind; fonegroup = true; case st_ranking: // wypełnienie wektora struktur z wartosciami funkcji dopasowania dla populacji i indeksami chromosomów for(int i=0; i<pop_size; i++) indfitv tmp; tmp.fitval = chfitfunval(tpop[popnr].pop[i]); tmp.chind = i; tfitval.push_back(tmp); //posortowanie tego wektora sort(tfitval.begin(),tfitval.end(), cond); // przydzielenie rang chromosomom w populacji // wieksza ranga = wieksza wartosc funkcji przystosowania for(int i=0; i<pop_size; i++) tpop[popnr].pop[tfitval[i].chind].selrankval = i+1; sumofrank += (i+1); for(int i = 1; i<pop_size; i++) tthrrankroulet[i] = tthrrankroulet[i-1] + double(tpop[popnr].pop[i-1].selrankval)/sumofrank; for(int i=0; i<(pop_size-1); i++) // losowanie par rodzicielskich unsigned int momind = 0, dadind = 0; while(momind == dadind) str. 15
16 double mom = genselection.getrand(); for(int j=0; j<pop_size; j++) if(mom < tthrrankroulet[j+1]) momind = j; momind++; double dad = genselection.getrand(); dadind = 0; for(int j=0; j<pop_size; j++) if(dad < tthrrankroulet[j+1]) dadind = j; dadind++; tpop[popnr].parents[i].mom = momind; tpop[popnr].parents[i].dad = dadind; delete[] tthrroulette; delete[] tthrrankroulet; void crossing(int popnr) guni gencross; unsigned short onepointk = 0; unsigned short twopointk1 = 0, twopointk2 = 0; double draw = 0; double iscross = 0; chromosom mom, dad, child, child2; static unsigned int crprobcnt = 0; if(crprobcnt == 0) cout << "Podaj prawdopodobienstwo zajscia krzyzowania w % (0-100) "; while(true) cin >> CROSS_PROBAB; if((cross_probab < 0) (CROSS_PROBAB > 100)) cout << "Zla wartosc prawdopodobienstwa! Podaj jeszcze raz: "; CROSS_PROBAB /= 100; crprobcnt++; switch(crosstype) case ct_onepoint: for(int i=1; i<pop_size; i++) // losowanie punktu podziału onepointk = 1 + int((chrom_lenght - 1) * gencross.getrand()); // rodzice mom = tpop[popnr].pop[tpop[popnr].parents[i-1].mom]; dad = tpop[popnr].pop[tpop[popnr].parents[i-1].dad]; iscross = gencross.getrand(); if(iscross < CROSS_PROBAB) draw = gencross.getrand(); str. 16
17 if(draw <= 0.5) // childa for(int j=0; j<onepointk; j++) child.gen[j] = mom.gen[j]; for(int j=onepointk; j<chrom_lenght; j++) child.gen[j] = dad.gen[j]; // childb for(int j=0; j<onepointk; j++) child.gen[j] = dad.gen[j]; for(int j=onepointk; j<chrom_lenght; j++) child.gen[j] = mom.gen[j]; draw = gencross.getrand(); if(draw <= 0.5) // childa child = mom; // childb child = dad; // wygenerowany potomek wchodzi do następnej populacji // potem jeszcze bedzie podlegal mutacji tpop[popnr+1].pop[i] = child; case ct_manypoints: for(int i=1; i<pop_size; i++) // losowanie punktów podziału, twopointk1 < twopointk2 do twopointk1 = 1 + int((chrom_lenght - 1) * gencross.getrand()); twopointk2 = 1 + int((chrom_lenght - 1) * gencross.getrand()); while (twopointk2 <= twopointk1); // rodzice mom = tpop[popnr].pop[tpop[popnr].parents[i-1].mom]; dad = tpop[popnr].pop[tpop[popnr].parents[i-1].dad]; if(iscross < CROSS_PROBAB) draw = gencross.getrand(); if(draw <= 0.5) // childa for(int j=0; j<twopointk1; j++) child.gen[j] = mom.gen[j]; for(int j=twopointk1; j<twopointk2; j++) child.gen[j] = dad.gen[j]; for(int j=twopointk2; j<chrom_lenght; j++) child.gen[j] = mom.gen[j]; // childb for(int j=0; j<twopointk1; j++) child.gen[j] = dad.gen[j]; for(int j=twopointk1; j<twopointk2; j++) child.gen[j] = mom.gen[j]; for(int j=twopointk2; j<chrom_lenght; j++) str. 17
18 child.gen[j] = dad.gen[j]; draw = gencross.getrand(); if(draw <= 0.5) // childa child = mom; // childb child = dad; // wygenerowany potomek wchodzi do następnej populacji // potem jeszcze bedzie podlegal mutacji tpop[popnr+1].pop[i] = child; case ct_multidimensional: for(int i=1; i<pop_size; i++) // rodzice mom = tpop[popnr].pop[tpop[popnr].parents[i-1].mom]; dad = tpop[popnr].pop[tpop[popnr].parents[i-1].dad]; unsigned short momx1[chrom_lenght/var_nr]; unsigned short momx2[chrom_lenght/var_nr]; unsigned short momx3[chrom_lenght/var_nr]; unsigned short dadx1[chrom_lenght/var_nr]; unsigned short dadx2[chrom_lenght/var_nr]; unsigned short dadx3[chrom_lenght/var_nr]; // podział ojca i matki na wymiary (zmienne optymalizacji) for(int j=0; j<chrom_lenght/var_nr; j++) momx1[j] = mom.gen[j]; momx2[j] = mom.gen[j+8]; momx3[j] = mom.gen[j+16]; dadx1[j] = dad.gen[j]; dadx2[j] = dad.gen[j+8]; dadx3[j] = dad.gen[j+16]; for(int j=0; j<var_nr; j++) double iscross = gencross.getrand(); if(iscross <= CROSS_PROBAB) // cross draw = gencross.getrand(); // losowanie punktu podziału onepointk = 1 + int(((chrom_lenght/var_nr) - 1) * gencross.getrand()); if(draw <= 0.5) // childa for(int k=(j*8); k<(onepointk + j*8); k++) child.gen[k] = mom.gen[k]; for(int k=(onepointk + j*8); k<((j+1)*8); k++) child.gen[k] = dad.gen[k]; // childb for(int k=(j*8); k<(onepointk + j*8); k++) child.gen[k] = dad.gen[k]; for(int k=(onepointk + j*8); k<((j+1)*8); k++) child.gen[k] = mom.gen[k]; // don't cross draw = gencross.getrand(); str. 18
19 if(draw <= 0.5) for(int k=(j*8); k<((j+1)*8); k++) child.gen[k] = mom.gen[k]; for(int k=(j*8); k<((j+1)*8); k++) child.gen[k] = dad.gen[k]; // wygenerowany potomek wchodzi do następnej populacji // potem jeszcze bedzie podlegal mutacji tpop[popnr+1].pop[i] = child; case ct_countingminusone: for(int i=1; i<pop_size; i++) // vector przechowujący indeksy różniących się bitów potomków vector <unsigned short> vdiffind; // rodzice mom = tpop[popnr].pop[tpop[popnr].parents[i-1].mom]; dad = tpop[popnr].pop[tpop[popnr].parents[i-1].dad]; child = mom; child2 = dad; for(unsigned short j=0; j<chrom_lenght; j++) if(child.gen[j]!= child2.gen[j]) vdiffind.push_back(j); // swap unsigned short tmp; double isswap = 0; for(unsigned int j=0; j<vdiffind.size(); j++) isswap = gencross.getrand(); if(isswap <= 0.5) tmp = child2.gen[vdiffind[j]]; child2.gen[vdiffind[j]] = child.gen[vdiffind[j]]; child.gen[vdiffind[j]] = tmp; double whichchild = gencross.getrand(); // wygenerowany potomek wchodzi do następnej populacji // potem jeszcze bedzie podlegal mutacji if(whichchild <= 0.5) tpop[popnr+1].pop[i] = child; tpop[popnr+1].pop[i] = child2; case ct_evolutionoflinks: // rodzicami jest cała populacja for(int i=1; i<pop_size; i++) unsigned short fillpos = 0; unsigned short nextstartpos = 0; // pozycja wypełnienia while(fillpos < CHROM_LENGHT) fillpos += (1 + unsigned short(chrom_lenght*gencross.getrand())); // nr losowanego chromosomu unsigned short chid = unsigned short(pop_size*gencross.getrand()); for(int j=nextstartpos; j<chrom_lenght; j++) child.gen[j] = tpop[popnr].pop[chid].gen[j]; nextstartpos = j+1; str. 19
20 if(j == fillpos) // wygenerowany potomek wchodzi do następnej populacji // potem jeszcze bedzie podlegal mutacji tpop[popnr+1].pop[i] = child; void mutatation(int popnr) chromosom mutatedch; guni genmut; static unsigned int mutprobcnt = 0; if(mutprobcnt == 0 && muttype == mt_replacebit) cout << "Podaj prawdopodobienstwo zajscia mutacji w % (0-100) "; while(true) cin >> MUT_PROBAB; if((mut_probab < 0) (MUT_PROBAB > 100)) cout << "Zla wartosc prawdopodobienstwa! Podaj jeszcze raz: "; MUT_PROBAB /= 100; mutprobcnt++; switch(muttype) case mt_replacebit: for(int i=1; i<pop_size; i++) mutatedch = tpop[popnr+1].pop[i]; double ismutatedgen; for(int j=0; j<chrom_lenght; j++) ismutatedgen = genmut.getrand(); if(ismutatedgen <= MUT_PROBAB) if(mutatedch.gen[j] == 1) mutatedch.gen[j] = 0; mutatedch.gen[j] = 1; tpop[popnr+1].pop[i] = mutatedch; case mt_insertbit: for(int i=1; i<pop_size; i++) mutatedch = tpop[popnr+1].pop[i]; unsigned short inspoint = unsigned short(chrom_lenght*genmut.getrand()); unsigned short insbit = unsigned short(0.5 + genmut.getrand()); mutatedch.gen[inspoint] = insbit; tpop[popnr+1].pop[i] = mutatedch; case mt_remgen: for(int i=1; i<pop_size; i++) mutatedch = tpop[popnr+1].pop[i]; // ktory gen wywalić? unsigned short gen2rem = unsigned short(var_nr*genmut.getrand()); // wywalamy gen (zerujemy jego bity) str. 20
21 for(int j=gen2rem*8; j<((gen2rem+1)*8); j++) mutatedch.gen[j] = 0; // chromosom wraca do swojego pokolenia tpop[popnr+1].pop[i] = mutatedch; case mt_infectionvirus: for(int i=1; i<pop_size; i++) mutatedch = tpop[popnr+1].pop[i]; tpop[popnr+1].pop[i] = mutatedch; case mt_diff: case mt_imitation: const int mi = 3; chromosom worstch[mi]; vector <indfitv> tfitval; // wypełnienie wektora struktur z wartosciami funkcji dopasowania dla populacji i indeksami chromosomów for(int i=0; i<pop_size; i++) indfitv tmp; tmp.fitval = chfitfunval(tpop[popnr].pop[i]); tmp.chind = i; tfitval.push_back(tmp); //posortowanie tego wektora sort(tfitval.begin(),tfitval.end(), cond); // mi najgorszych osobników for(int i=0; i<mi; i++) worstch[i] = tpop[popnr].pop[tfitval[i].chind]; double profilevector[chrom_lenght] = ; for(int i=1; i<pop_size; i++) mutatedch = tpop[popnr+1].pop[i]; for(int j=0; j<mi; j++) for(int k=0; k<chrom_lenght; k++) if(mutatedch.gen[k]!= worstch[j].gen[k]) profilevector[k] += double(1)/double(mi); double rnd; if(muttype == mt_diff) for(int j=0; j<chrom_lenght; j++) rnd = genmut.getrand(); if(rnd < (1 - profilevector[j])) if(mutatedch.gen[j] == 1) mutatedch.gen[j] = 0; mutatedch.gen[j] = 1; if(muttype == mt_imitation) for(int j=0; j<chrom_lenght; j++) rnd = genmut.getrand(); if(rnd < profilevector[j]) if(mutatedch.gen[j] == 1) str. 21
SCHEMAT ROZWIĄZANIA ZADANIA OPTYMALIZACJI PRZY POMOCY ALGORYTMU GENETYCZNEGO
SCHEMAT ROZWIĄZANIA ZADANIA OPTYMALIZACJI PRZY POMOCY ALGORYTMU GENETYCZNEGO. Rzeczywistość (istniejąca lub projektowana).. Model fizyczny. 3. Model matematyczny (optymalizacyjny): a. Zmienne projektowania
Bardziej szczegółowoAlgorytmy genetyczne. Materiały do laboratorium PSI. Studia niestacjonarne
Algorytmy genetyczne Materiały do laboratorium PSI Studia niestacjonarne Podstawowy algorytm genetyczny (PAG) Schemat blokowy algorytmu genetycznego Znaczenia, pochodzących z biologii i genetyki, pojęć
Bardziej szczegółowoAlgorytmy genetyczne w optymalizacji
Algorytmy genetyczne w optymalizacji Literatura 1. David E. Goldberg, Algorytmy genetyczne i ich zastosowania, WNT, Warszawa 1998; 2. Zbigniew Michalewicz, Algorytmy genetyczne + struktury danych = programy
Bardziej szczegółowoPLAN WYKŁADU OPTYMALIZACJA GLOBALNA OPERATOR KRZYŻOWANIA ETAPY KRZYŻOWANIA
PLAN WYKŁADU Operator krzyżowania Operator mutacji Operator inwersji Sukcesja Przykłady symulacji AG Kodowanie - rodzaje OPTYMALIZACJA GLOBALNA Wykład 3 dr inż. Agnieszka Bołtuć OPERATOR KRZYŻOWANIA Wymiana
Bardziej szczegółowoAlgorytmy genetyczne. Materiały do laboratorium PSI. Studia stacjonarne i niestacjonarne
Algorytmy genetyczne Materiały do laboratorium PSI Studia stacjonarne i niestacjonarne Podstawowy algorytm genetyczny (PAG) Schemat blokowy algorytmu genetycznego Znaczenia, pochodzących z biologii i genetyki,
Bardziej szczegółowoProjektowanie klas c.d. Projektowanie klas przykład
Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej
Bardziej szczegółowoJęzyk ludzki kod maszynowy
Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza
Bardziej szczegółowoAlgorytmy genetyczne. Paweł Cieśla. 8 stycznia 2009
Algorytmy genetyczne Paweł Cieśla 8 stycznia 2009 Genetyka - nauka o dziedziczeniu cech pomiędzy pokoleniami. Geny są czynnikami, które decydują o wyglądzie, zachowaniu, rozmnażaniu każdego żywego organizmu.
Bardziej szczegółowo1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Bardziej szczegółowoALGORYTMY GENETYCZNE ćwiczenia
ćwiczenia Wykorzystaj algorytmy genetyczne do wyznaczenia minimum globalnego funkcji testowej: 1. Wylosuj dwuwymiarową tablicę 100x2 liczb 8-bitowych z zakresu [-100; +100] reprezentujących inicjalną populację
Bardziej szczegółowoDariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b)
Bardziej szczegółowoWstęp do programowania
wykład 6 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Losowanie liczb całkowitych Dostępne biblioteki Najprostsze losowanie liczb całkowitych można wykonać za pomocą funkcji
Bardziej szczegółowoPodstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Bardziej szczegółowoKurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016
Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,
Bardziej szczegółowoTablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119
Tablice Tablica to struktura danych, która może przechowywać wiele wartości tego samego typu. Na przykład tablica może zawierać: 10 wartości typu int opisujących liczbę studentów przyjętych na kierunek
Bardziej szczegółowoZadanie 5 - Algorytmy genetyczne (optymalizacja)
Zadanie 5 - Algorytmy genetyczne (optymalizacja) Marcin Pietrzykowski mpietrzykowski@wi.zut.edu.pl wersja 1.0 1 Cel Celem zadania jest zapoznanie się z Algorytmami Genetycznymi w celu rozwiązywanie zadania
Bardziej szczegółowoMETODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Bardziej szczegółowoOpis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja
Opis zagadnieo 1-3 Iteracja, rekurencja i ich realizacja Iteracja Iteracja to czynnośd powtarzania (najczęściej wielokrotnego) tej samej instrukcji (albo wielu instrukcji) w pętli. Mianem iteracji określa
Bardziej szczegółowoWstęp do programowania
wykład 7 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2016/2017 Losowanie liczb całkowitych Dostępne biblioteki Najprostsze losowanie liczb całkowitych można wykonać za pomocą funkcji
Bardziej szczegółowoProgramowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)
Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Część 1. Teoria Wyjaśnij pojęcia, podaj przykład: klasa obiekt konstruktor destruktor kapsułkowanie (hermetyzacja) wskaźnik this
Bardziej szczegółowoProgramowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44
Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia
Bardziej szczegółowoAlgorytmy ewolucyjne - algorytmy genetyczne. I. Karcz-Dulęba
Algorytmy ewolucyjne - algorytmy genetyczne I. Karcz-Dulęba Algorytmy klasyczne a algorytmy ewolucyjne Przeszukiwanie przestrzeni przez jeden punkt bazowy Przeszukiwanie przestrzeni przez zbiór punktów
Bardziej szczegółowoZajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 5 Algorytmy i wskaźniki dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Plan Zapis i odczyt z plików tekstowych O tablicach ciąg dalszy Referencje
Bardziej szczegółowoStrefa pokrycia radiowego wokół stacji bazowych. Zasięg stacji bazowych Zazębianie się komórek
Problem zapożyczania kanałów z wykorzystaniem narzędzi optymalizacji Wprowadzenie Rozwiązanie problemu przydziału częstotliwości prowadzi do stanu, w którym każdej stacji bazowej przydzielono żądaną liczbę
Bardziej szczegółowoAlgorytm Genetyczny. zastosowanie do procesów rozmieszczenia stacji raportujących w sieciach komórkowych
Algorytm Genetyczny zastosowanie do procesów rozmieszczenia stacji raportujących w sieciach komórkowych Dlaczego Algorytmy Inspirowane Naturą? Rozwój nowych technologii: złożone problemy obliczeniowe w
Bardziej szczegółowoMateriał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje
Podstawy informatyki Informatyka stosowana - studia niestacjonarne - Zajęcia nr 4 Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w
Bardziej szczegółowowykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i
Bardziej szczegółowoAlgorytm genetyczny (genetic algorithm)-
Optymalizacja W praktyce inżynierskiej często zachodzi potrzeba znalezienia parametrów, dla których system/urządzenie będzie działać w sposób optymalny. Klasyczne podejście do optymalizacji: sformułowanie
Bardziej szczegółowoJęzyki programowania - podstawy
Języki programowania - podstawy Andrzej Dudek Wydział Techniczno Informatyczny W Jeleniej Górze Dudek A. Informatyka przemysłowa tendencje i wyzwania 26.10.2015 1 /24 Algorytm określony sposób rozwiązania
Bardziej szczegółowoProgramowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41
Programowanie w C++ Wykład 2 Katarzyna Grzelak 5 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Reprezentacje liczb w komputerze K.Grzelak (Wykład 1) Programowanie w C++ 2 / 41 Reprezentacje
Bardziej szczegółowoAlgorytmy ewolucyjne. Łukasz Przybyłek Studenckie Koło Naukowe BRAINS
Algorytmy ewolucyjne Łukasz Przybyłek Studenckie Koło Naukowe BRAINS 1 Wprowadzenie Algorytmy ewolucyjne ogólne algorytmy optymalizacji operujące na populacji rozwiązań, inspirowane biologicznymi zjawiskami,
Bardziej szczegółowoZadania laboratoryjne i projektowe - wersja β
Zadania laboratoryjne i projektowe - wersja β 1 Laboratorium Dwa problemy do wyboru (jeden do realizacji). 1. Water Jug Problem, 2. Wieże Hanoi. Water Jug Problem Ograniczenia dla każdej z wersji: pojemniki
Bardziej szczegółowoTypy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1
Typy złożone Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy podstawowe Typy całkowite: char short int long Typy zmiennopozycyjne float double Modyfikatory : unsigned, signed Typ wskaźnikowy
Bardziej szczegółowoWstęp do programowania
wykład 5 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2016/2017 Zadanie o kotach z poprzedniego wykładu # include < iostream > using namespace std ; int main (){ int rozmiar_ rodzinki,
Bardziej szczegółowo2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych
2. Tablice Tablica to struktura danych przechowująca elementy jednego typu (jednorodna). Dostęp do poszczególnych elementów składowych jest możliwy za pomocą indeksów. Rozróżniamy następujące typy tablic:
Bardziej szczegółowoProgramowanie obiektowe W3
Programowanie obiektowe W3 Przegląd typów strukturalnych w C++ : tablice statyczne i dynamiczne Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki Typy złożone: tablice
Bardziej szczegółowoPodstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne
1 Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion,
Bardziej szczegółowoTemat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
Bardziej szczegółowoIMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji
Bardziej szczegółowowykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy
i obiekty Programowanie i obiekty uzupełnienie notatek: dr Jerzy Białkowski i obiekty 1 2 3 4 i obiekty Obiektowość języka C++ Na tym wykładzie poznamy: ˆ Klasa (w języku C++ rozszerzenie struktury, typ
Bardziej szczegółowoZajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 2 Programowanie strukturalne dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Pętla while #include using namespace std; int main ()
Bardziej szczegółowoPodstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej
Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok
Bardziej szczegółowoAlgorytmy genetyczne
Politechnika Łódzka Katedra Informatyki Stosowanej Algorytmy genetyczne Wykład 2 Przygotował i prowadzi: Dr inż. Piotr Urbanek Powtórzenie Pytania: Jaki mechanizm jest stosowany w naturze do takiego modyfikowania
Bardziej szczegółowoMetody Rozmyte i Algorytmy Ewolucyjne
mgr inż. Wydział Matematyczno-Przyrodniczy Szkoła Nauk Ścisłych Uniwersytet Kardynała Stefana Wyszyńskiego Podstawowe operatory genetyczne Plan wykładu Przypomnienie 1 Przypomnienie Metody generacji liczb
Bardziej szczegółowoKontrola przebiegu programu
Kontrola przebiegu programu Wykład 9 Instrukcje sterujące: pętle rozgałęzienia skoki PRZYPOMINAJKA Zadanie : Zaprojektuj rekurencyjny przepis na wyznaczenie największej takiej liczby m, że 2 m jest podzielnikiem
Bardziej szczegółowoPodstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD
programowania Wykład: 5 Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD programowania w C++ Instrukcje sterujące 2 dr Artur Bartoszewski
Bardziej szczegółowoPodstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:
Podstawy Informatyki Metalurgia, I rok Historia Lata 0-te XX w język C (do pisania systemów operacyjnych) "The C programming language" B. Kernighan, D. Ritchie pierwszy standard Koniec lat 80 standard
Bardziej szczegółowoLABORATORIUM 4: Algorytmy ewolucyjne cz. 2 wpływ operatorów krzyżowania i mutacji na skuteczność poszukiwań AE
Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny, Politechnika Śląska www.imio.polsl.pl METODY HEURYSTYCZNE LABORATORIUM 4: Algorytmy ewolucyjne cz. 2 wpływ operatorów krzyżowania
Bardziej szczegółowoWykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Operacje dyskowe - zapis do pliku #include #include
Bardziej szczegółowoAlgorytmy genetyczne. Dariusz Banasiak. Katedra Informatyki Technicznej Wydział Elektroniki
Dariusz Banasiak Katedra Informatyki Technicznej Wydział Elektroniki Obliczenia ewolucyjne (EC evolutionary computing) lub algorytmy ewolucyjne (EA evolutionary algorithms) to ogólne określenia używane
Bardziej szczegółowoMechanizm dziedziczenia
Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia
Bardziej szczegółowoProgramowanie - wykład 4
Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include
Bardziej szczegółowoObliczenia ewolucyjne - plan wykładu
Obliczenia ewolucyjne - plan wykładu Wprowadzenie Algorytmy genetyczne Programowanie genetyczne Programowanie ewolucyjne Strategie ewolucyjne Inne modele obliczeń ewolucyjnych Podsumowanie Ewolucja Ewolucja
Bardziej szczegółowoPodstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++
Podstawy Informatyki Metalurgia, I rok Wykład 6 Krótki kurs C++ Historia Lata 70-te XX w język C (do pisania systemów operacyjnych) "The C programming language" B. Kernighan, D. Ritchie pierwszy standard
Bardziej szczegółowo// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.
Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy
Bardziej szczegółowoECLIPSE wnioski z dwóch pierwszych laboratoriów
PODSTAWY PROGRAMOWANIA 3-4 WYKŁAD 22-10-2015 ECLIPSE wnioski z dwóch pierwszych laboratoriów Dodanie pliku i konfiguracji startowej (każdy uruchamiany program powinien mieć własna konfigurację startową)
Bardziej szczegółowoPodstawy Programowania Podstawowa składnia języka C++
Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include
Bardziej szczegółowoWstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)
Języki i Paradygmaty Programowania Laboratorium 1 Obiekty i klasy C++ Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać) UWAGA! Umiejętność tworzenia
Bardziej szczegółowoPodstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.
M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza
Bardziej szczegółowoProgramowanie Obiektowew języku C++ Zadania L4
Programowanie Obiektowew języku C++ Zadania L4 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki
Bardziej szczegółowoOperatory na rzecz typu TString
Operatory na rzecz typu TString Dopiszmy w definicji klasy operator[], dzięki któremu potraktujemy obiekt jak tablicę class TString { public: char& operator[]( size_t n ); const char& operator[]( size_t
Bardziej szczegółowoLiczby całkowite i rzeczywiste
Wykład 4(20 marzec 2014r.) Liczby całkowite i rzeczywiste Paulina Rogowiecka Klaudia Kamińska Adrianna Znyk 1 Spis treści: Czynniki pierwsze metoda próbnych dzieleń Pierwszość liczby naturalnej algorytmy
Bardziej szczegółowoProgramowanie i struktury danych
Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne
Bardziej szczegółowoPodstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy
1 Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com
Bardziej szczegółowoWykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe
Wykład 15 Wprowadzenie do języka na bazie a Literatura Podobieństwa i różnice Literatura B.W.Kernighan, D.M.Ritchie Język ANSI Kompilatory Elementarne różnice Turbo Delphi FP Kylix GNU (gcc) GNU ++ (g++)
Bardziej szczegółowoPodstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16
M. Trzebiński C++ 1/16 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IFJ PAN 6lipca2015 Uruchomienie maszyny w CC1 M. Trzebiński C++ 2/16
Bardziej szczegółowotablica: dane_liczbowe
TABLICE W JĘZYKU C/C++ tablica: dane_liczbowe float dane_liczbowe[5]; dane_liczbowe[0]=12.5; dane_liczbowe[1]=-0.2; dane_liczbowe[2]= 8.0;... 12.5-0.2 8.0...... 0 1 2 3 4 indeksy/numery elementów Tablica
Bardziej szczegółowoSzablony klas, zastosowanie szablonów w programach
Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do
Bardziej szczegółowoDYNAMICZNE PRZYDZIELANIE PAMIECI
DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne
Bardziej szczegółowoStrategie ewolucyjne (ang. evolu4on strategies)
Strategie ewolucyjne (ang. evolu4on strategies) Strategia ewolucyjna (1+1) W Strategii Ewolucyjnej(1 + 1), populacja złożona z jednego osobnika generuje jednego potomka. Kolejne (jednoelementowe) populacje
Bardziej szczegółowo> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki
> C++ dynamiczna alokacja/rezerwacja/przydział pamięci Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 1429536600 > Dzisiejsze zajęcia sponsorują słówka: new oraz delete
Bardziej szczegółowoMETODY HEURYSTYCZNE wykład 3
METODY HEURYSTYCZNE wykład 3 1 Przykład: Znaleźć max { f (x)=x 2 } dla wartości całkowitych x z zakresu 0-31. Populacja w chwili t: P(t)= {x t 1,...x t n} Założenia: - łańcuchy 5-bitowe (x=0,1,...,31);
Bardziej szczegółowoAlgorytmy stochastyczne, wykład 02 Algorytmy genetyczne
Algorytmy stochastyczne, wykład 02 Algorytmy genetyczne J. Piersa Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika 2014-02-27 1 Mutacje algorytmu genetycznego 2 Dziedzina niewypukła abstrakcyjna
Bardziej szczegółowoProgramowanie proceduralne w języku C++ Pętle, tablice
Programowanie proceduralne w języku C++ Pętle, tablice Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki
Bardziej szczegółowoWstęp do programowania
wykład 4 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Pętle wykonujące się podaną liczbę razy Jeśli chcemy wykonać pewien fragment programu określoną liczbę razy, możemy użyć
Bardziej szczegółowo1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE
1. Proste typy danych- ciąg dalszy 2. Typy złożone danych : TABLICE Wykład 3 ZMIENNE PROSTE: TYPY WBUDOWANE Typy zmiennoprzecinkowe: float double long double Różne rozmiary bajtowe. W konsekwencji różne
Bardziej szczegółowoModyfikacje i ulepszenia standardowego algorytmu genetycznego
Modyfikacje i ulepszenia standardowego algorytmu genetycznego 1 2 Przypomnienie: pseudokod SGA t=0; initialize(p 0 ); while(!termination_condition(p t )) { evaluate(p t ); T t =selection(p t ); O t =crossover(t
Bardziej szczegółowoAlgorytmy genetyczne
Politechnika Łódzka Katedra Informatyki Stosowanej Algorytmy genetyczne Wykład 2 Przygotował i prowadzi: Dr inż. Piotr Urbanek Powtórzenie Pytania: Jaki mechanizm jest stosowany w naturze do takiego modyfikowania
Bardziej szczegółowoWstęp do Programowania 2
Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:
Bardziej szczegółowoNa ekranie monitora zostaną wyświetlone w dwu liniach teksty Pierwsza linia Druga linia
Struktura programu W programach napisanych w C++ litery wielkie i małe są rozróżniane i często po nauce Pascala są przyczyną błędów. Program napisany w języku C++ składa się zazw yczaj z następujących
Bardziej szczegółowoWYKŁAD 3 (13 MARZEC 2014) LICZBY CAŁKOWITE I RZECZYWISTE. Bartosz Łakomy i Dariusz Dobiesz
WYKŁAD 3 (13 MARZEC 2014) LICZBY CAŁKOWITE I RZECZYWISTE Bartosz Łakomy i Dariusz Dobiesz SPIS TREŚCI: Liczby parzyste i nieparzyste Liczby podzielne lub niepodzielne przez zadane podzielniki NWD algorytm
Bardziej szczegółowoWykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest
Bardziej szczegółowoWstęp do Informatyki
Wstęp do Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 11 1 / 52 Pętla for # i n c l u d e
Bardziej szczegółowotyp y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury
typy złożone- tablice wielowymiarowe, struktury Wykład 6 Deklarowanie wskaźników nazwa_typu * nazwa_wskaznika; WSKAŹNIKI: PRZYPOMNIENIE Przypisywanie wskaźnikom wartości double * pn = &zmienna_typu_double;
Bardziej szczegółowoProgramowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
Bardziej szczegółowo6. Klasyczny algorytm genetyczny. 1
6. Klasyczny algorytm genetyczny. 1 Idea algorytmu genetycznego została zaczerpnięta z nauk przyrodniczych opisujących zjawiska doboru naturalnego i dziedziczenia. Mechanizmy te polegają na przetrwaniu
Bardziej szczegółowoZasady programowania Dokumentacja
Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika
Bardziej szczegółowoPodstawy programowania, Poniedziałek , 8-10 Projekt, część 1
Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem
Bardziej szczegółowoJęzyki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński
Języki programowania Część siódma Przetwarzanie plików amorficznych Konwencja języka C Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie
Bardziej szczegółowoZaawansowane programowanie w C++ (PCP)
Zaawansowane programowanie w C++ (PCP) Wykład 6 - szablony. dr inż. Robert Nowak - p. 1/15 Kolekcje i algorytmy» Deklaracja szablonu y Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania
Bardziej szczegółowoLaboratorium 03: Podstawowe konstrukcje w języku Java [2h]
1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie
Bardziej szczegółowo8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.
8. Wektory Przykłady 8.1. Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. Uwaga! Kod poniżej. To zadanie można rozwiązać przy użyciu wiedzy
Bardziej szczegółowoAlgorytmy ewolucyjne. wprowadzenie
Algorytmy ewolucyjne wprowadzenie Gracjan Wilczewski, www.mat.uni.torun.pl/~gracjan Toruń, 2005 Historia Podstawowy algorytm genetyczny został wprowadzony przez Johna Hollanda (Uniwersytet Michigan) i
Bardziej szczegółowowykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,
, Programowanie, uzupełnienie notatek: dr Jerzy Białkowski , 1 2 3 4 , Wczytywanie liczb , Wczytywanie liczb 1 #include 2 #include < s t d l i b. h> 3 4 int main ( ) { 5 int rozmiar, numer
Bardziej szczegółowo3 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 3 1/8 Język C Instrukcja laboratoryjna Temat: Instrukcje warunkowe, pętle. 3 Przygotował: mgr inż. Maciej Lasota 1) Instrukcje warunkowe. Instrukcje warunkowe pozwalają zdefiniować warianty
Bardziej szczegółowoWskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:
Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie
Bardziej szczegółowoWyszukiwanie największej spośród czterech liczb. Przykładowe rozwiązanie
Wyszukiwanie największej spośród czterech liczb Użytkownik podaje cztery liczby rzeczywiste. Podaj algorytm znajdowania największej spośród nich. (Np.: po wprowadzeniu liczb: 12 7 18.5 9 program powinien
Bardziej szczegółowoAbstrakcyjne struktury danych w praktyce
Abstrakcyjne struktury danych w praktyce Wykład 13 7.4 notacja polska A.Szepietowski Matematyka dyskretna rozdział.8 stos kompilacja rozłączna szablony funkcji Przypomnienie Drzewo binarne wyrażenia arytmetycznego
Bardziej szczegółowoWykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik
Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor
Bardziej szczegółowoProgramowanie Procedurale
Programowanie Procedurale Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 6 Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 1 / 27 Zbiór ctime zawiera deklarcję
Bardziej szczegółowo