ALGORYTM GENETYCZNY 1C

Wielkość: px
Rozpocząć pokaz od strony:

Download "ALGORYTM GENETYCZNY 1C"

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 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ółowo

Algorytmy genetyczne. Materiały do laboratorium PSI. Studia niestacjonarne

Algorytmy 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ółowo

Algorytmy genetyczne w optymalizacji

Algorytmy 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ółowo

PLAN WYKŁADU OPTYMALIZACJA GLOBALNA OPERATOR KRZYŻOWANIA ETAPY KRZYŻOWANIA

PLAN 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ółowo

Algorytmy genetyczne. Materiały do laboratorium PSI. Studia stacjonarne i niestacjonarne

Algorytmy 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ółowo

Projektowanie klas c.d. Projektowanie klas przykład

Projektowanie 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ółowo

Język ludzki kod maszynowy

Ję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ółowo

Algorytmy genetyczne. Paweł Cieśla. 8 stycznia 2009

Algorytmy 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ółowo

1. 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ść 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ółowo

ALGORYTMY GENETYCZNE ćwiczenia

ALGORYTMY 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ółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz 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ółowo

Wstęp do programowania

Wstę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ółowo

Podstawy programowania skrót z wykładów:

Podstawy 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ółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs 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ółowo

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Tablice. 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ółowo

Zadanie 5 - Algorytmy genetyczne (optymalizacja)

Zadanie 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ółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY 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ółowo

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Opis 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ółowo

Wstęp do programowania

Wstę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ółowo

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Programowanie 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ółowo

Programowanie 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 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ółowo

Algorytmy ewolucyjne - algorytmy genetyczne. I. Karcz-Dulęba

Algorytmy 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ółowo

Zaję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 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ółowo

Strefa pokrycia radiowego wokół stacji bazowych. Zasięg stacji bazowych Zazębianie się komórek

Strefa 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ółowo

Algorytm 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 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ółowo

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Materiał 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ółowo

wykł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

wykł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ółowo

Algorytm genetyczny (genetic algorithm)-

Algorytm 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ółowo

Języki programowania - podstawy

Ję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ółowo

Programowanie 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 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ółowo

Algorytmy ewolucyjne. Łukasz Przybyłek Studenckie Koło Naukowe BRAINS

Algorytmy 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ółowo

Zadania laboratoryjne i projektowe - wersja β

Zadania 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ółowo

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Typy 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ółowo

Wstęp do programowania

Wstę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ółowo

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

2. 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ółowo

Programowanie obiektowe W3

Programowanie 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ółowo

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Podstawy 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ółowo

Temat: 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. 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ółowo

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

IMIĘ 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ółowo

wykł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

wykł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ółowo

Zaję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 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ółowo

Podstawy 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 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ółowo

Algorytmy genetyczne

Algorytmy 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ółowo

Metody Rozmyte i Algorytmy Ewolucyjne

Metody 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ółowo

Kontrola przebiegu programu

Kontrola 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ółowo

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy 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ółowo

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

Podstawy 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ółowo

LABORATORIUM 4: Algorytmy ewolucyjne cz. 2 wpływ operatorów krzyżowania i mutacji na skuteczność poszukiwań AE

LABORATORIUM 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ółowo

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykł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ółowo

Algorytmy genetyczne. Dariusz Banasiak. Katedra Informatyki Technicznej Wydział Elektroniki

Algorytmy 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ółowo

Mechanizm dziedziczenia

Mechanizm dziedziczenia Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia

Bardziej szczegółowo

Programowanie - wykład 4

Programowanie - 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ółowo

Obliczenia ewolucyjne - plan wykładu

Obliczenia 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ółowo

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

Podstawy 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.

// 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ółowo

ECLIPSE wnioski z dwóch pierwszych laboratoriów

ECLIPSE 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ółowo

Podstawy Programowania Podstawowa składnia języka C++

Podstawy 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ółowo

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

Wstę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ółowo

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy 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ółowo

Programowanie Obiektowew języku C++ Zadania L4

Programowanie 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ółowo

Operatory na rzecz typu TString

Operatory 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ółowo

Liczby całkowite i rzeczywiste

Liczby 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ółowo

Programowanie i struktury danych

Programowanie 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ółowo

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

Podstawy 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ółowo

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Wykł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ółowo

Podstawy 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

Podstawy 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ółowo

tablica: dane_liczbowe

tablica: 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ółowo

Szablony klas, zastosowanie szablonów w programach

Szablony 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ółowo

DYNAMICZNE PRZYDZIELANIE PAMIECI

DYNAMICZNE 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ółowo

Strategie ewolucyjne (ang. evolu4on strategies)

Strategie 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. 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ółowo

METODY HEURYSTYCZNE wykład 3

METODY 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ółowo

Algorytmy stochastyczne, wykład 02 Algorytmy genetyczne

Algorytmy 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ółowo

Programowanie proceduralne w języku C++ Pętle, tablice

Programowanie 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ółowo

Wstęp do programowania

Wstę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ółowo

1 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 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ółowo

Modyfikacje i ulepszenia standardowego algorytmu genetycznego

Modyfikacje 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ółowo

Algorytmy genetyczne

Algorytmy 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ółowo

Wstęp do Programowania 2

Wstę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ółowo

Na ekranie monitora zostaną wyświetlone w dwu liniach teksty Pierwsza linia Druga linia

Na 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ółowo

WYKŁ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 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ółowo

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykł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ółowo

Wstęp do Informatyki

Wstę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ółowo

typ 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

typ 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ółowo

Programowanie 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 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ółowo

6. Klasyczny algorytm genetyczny. 1

6. 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ółowo

Zasady programowania Dokumentacja

Zasady 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ółowo

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Podstawy 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ółowo

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Ję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ółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane 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ółowo

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Laboratorium 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ółowo

8. 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 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ółowo

Algorytmy ewolucyjne. wprowadzenie

Algorytmy 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ółowo

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

wykł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ółowo

3 Przygotował: mgr inż. Maciej Lasota

3 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ółowo

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Wskaź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ółowo

Wyszukiwanie największej spośród czterech liczb. Przykładowe rozwiązanie

Wyszukiwanie 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ółowo

Abstrakcyjne struktury danych w praktyce

Abstrakcyjne 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ółowo

Wykł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. 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ółowo

Programowanie Procedurale

Programowanie 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