Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fitness <-function (obiekt)
- {
- #pozycja 1. pojemność silnika: 1.8L, 2.3L, 3L
- #pozycja 2. kierownica: plastikowa, skóra sztuczna, skóra naturalna
- #pozycja 3. wygłuszenie silnika: minimalne, średnie, maksymalne
- #pozycja 4. rodzaj skrzyni: manualna, półautomatyczna, automatyczna
- #pozycja 5. rodzaj foteli: welurowe, skórzane, alcantara
- #pozycja 6. napęd: na przednie koła, 4x4 dołączany automatycznie, 4x4 stały
- #pozycja 7. kamerka: brak, cofania, cofania oraz w zderzaku przednim
- komfort_jazdy = -70*obiekt[1] + 25*obiekt[2] + 30* obiekt[3] + 70*obiekt[4] + 15*obiekt[5] + 2*obiekt[6] + 20*obiekt[7]
- cena = 800*obiekt[1] + 100*obiekt[2] + 20*obiekt[3] + 900*obiekt[4] + 250*obiekt[5] + 650*obiekt[6] + 150*obiekt[7]
- ocena = komfort_jazdy/cena - abs((obiekt[1]/obiekt[3]) - 0.55)
- return (ocena);
- }
- wyswietlac=TRUE
- liczbaobiektow=100
- liczbagenow=7
- liczbageneracji=100
- obiekty=matrix(nrow=liczbaobiektow, ncol=liczbagenow) #populacja, uwaga na typy zmiennych
- #losowa inicjalizacja populacji
- set.seed(as.integer(Sys.time()))
- for(i in c(1:liczbaobiektow))
- {
- #wype-nij losowymi wartosciami
- obiekty[i,] = floor(3*runif(liczbagenow))+1
- }
- for(g in c(0:liczbageneracji))
- {
- if(wyswietlac) print(sprintf("generacja %d",g))
- #Ocena
- best=1 #zawiera indeks wyznaczajacy pozycje najlepszego objektu w populacji
- for(i in c(1:liczbaobiektow))
- {
- if(fitness(obiekty[best,])<fitness(obiekty[i,]))
- {
- best=i
- }
- }
- #Reprodukcja (podejscie Elitarne) z Mutacja
- for(i in c(1:liczbaobiektow))
- {
- #nie krzyzuj najlepszego (best) sie z soba samym
- if(i!=best)
- {
- for(j in c(1:liczbagenow))
- {
- #krzyzowanie - losowo podmieniaj gen j na gen z objektu najlepszego
- if(runif(1)<=0.6)
- obiekty[i,j]=obiekty[best,j];
- #Mutacja losowa
- if(runif(1)<=0.3) #ten zapis oznacza, ze 1/2 genow sa zmieniane
- obiekty[i,j]=floor(3*runif(1))+1
- }
- }
- #if(wyswietlac) print(obiekty[i,])
- }
- if(wyswietlac) print(sprintf("Fitness: %f",fitness(obiekty[best,])))
- if(fitness(obiekty[best,])>0.0178) break
- }
- print(obiekty[best,])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement