Guest User

Untitled

a guest
Jan 10th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.09 KB | None | 0 0
  1. library(ggplot2)
  2. library(genalg)
  3. library(GA)
  4. library(foreach)
  5. #ALGORITMI GENETICI
  6. #Un capital de 8 miliarde de lei este disponibil pentru amplasarea unor unitati productive
  7. #in 3 localitati, L1,L2,L3. Costul amplasarii depinde de fiecare localitate avand valorile
  8. #1,3 miliarde L1, 1,2 miliarde L2 si 1,7 miliarde L3
  9. #Profiturile unitare asociate investitiilor din fiecare localitate sunt
  10. #0,34 miliarde L1, 0,32 L2, 0.5 pentru L3
  11. #Sa se stabileasca ce localitati trebuie alese si cate unitati productive xi trebuie construite in fiecare localitate
  12. #pentru ca beneficiul total sa fie maxim
  13. #Rezolvare
  14. #Pas1: definirea cromozonilor si codificarea
  15. # max 0,34x1+0,32x2+0,5x3 pe restrictie 1.3x1+1.2x2+1.7x3<=8, xi>=0 , i=1,3
  16. #Trebuie sa vedem numarul maxim de unitati productive din fiecare localitate
  17. #x2=x3=0 avem 1.3*6=7,8<=8 => x1 max =6
  18. #daca x1=x3=0 avem 1.2*6=7.2<=8 x2 max=6
  19. #daca x1=x2=0 avem 1.7*4=6,8=>x3 max =4
  20. #scriem 6 din baza 10 in baza 2 si este 110
  21. #scriem 4 din baza 10 in baza 2 si este 100
  22. #Un cromozom este obtinut prin concatenarea lui x1,x2,x3 care au 3 biti in baza 2 un cromozom va fi x=x1x2x3 si are 9 biti
  23. #Spatiul de cautare al solutiilor este submultimea {0,1}^9 formata din solutiile admisibile ale problemei
  24. #fiecarui cromozom i se asociaza o functie de aptitudine care masoara performanta cromozomului
  25. #in acest caz functia de aptitudine masoara beneficiul total cand investitia se incadreaza in 8 miliarde si 0 in caz contrar
  26. #f(x1,x2,x3)={0.34x1+0.32x2+0.5x3, cand e satisfacuta R1 si 0 in caz contrar) R1 e cea cu profitul
  27. #populatia initiala si selectia
  28. #se considera o populatie formata aleator din 4 cromozomi
  29. #se calculeaza functia de aptitudine si proportia pentru generatia urmatoare(numarul mediu al descendentilor fiecarui cromozom)
  30. # Cromozomul i f(xi) ni
  31. # x1 x2 x3
  32. # 001 001 001 1.16 1.16/1.2=0.96
  33. # 000 001 001 0.82 0.82/1.2=0.68
  34. # 010 000 001 1.18 1.18/1.2=0.98
  35. # 000 010 010 1.64 1.64/1.2=1.36
  36. #Performanta totala 4.8
  37. #performanta medie 4.8/4=1.2
  38. #f(1,1,1)= 0.34+0.32+0.5=1.16
  39. #f(0,1,1)= 0.32+0.5=0.82
  40. #f(2,0,1)= 0.34*2+ 0.5=1.18
  41. #f(0,2,2)=1+0.64=1.64
  42. #selectia: aleator cromozomul cu performanta cea mai mare adica cel mai apt este cromozomul 4 cu perf 1.64
  43. #apare aleator in locul altui cromozom de exemplu in locul primului cromozom si trebuie sa vedem ce se intampla
  44. #Cromozomii f(xi) ni
  45. #000 010 010 1.64 1.64/1.32=1.24
  46. #000 001 001 0.82 0.82/1.32=0.62
  47. #010 000 001 1.18 1.18/1.32=0.89
  48. #000 010 010 1.64 1.64/1.32=1.24
  49. #Perf total= 5.28
  50. #Perf medie= 1.32
  51. #Etapa 3 incrucisarea
  52. #se va face o incrucisare aleatoare intre cromozomii 2 si 3 in pozitia a 4-a
  53. #pozitia poate fi fixata
  54. # 000 0|01 001 => 000 0 00 001
  55. # 010 0|00 001 => 0100 01 001
  56. #Cromozomi f(xi) ni
  57. #000 010 010 1.64 1.24
  58. #000 000 001 0.5 0.5/1.32=0.37
  59. #010 001 001 1.5 1.5/1.32=1.13
  60. #000 010 010 1.64 1.24
  61. #total 5,28
  62. #medie 1,32
  63. #etapa 4 mutatia - se efectueaza aleator o mutatie la bitul 4 al primului cromozom
  64. #se mai obtine un tabel
  65. #Cromozomi f(xi) ni
  66. #000 110 010 0 0
  67. #000 000 001 0.5 0.5/0.91=0.54
  68. #010 001 001 1.5 0.64
  69. #000 010 010 1.64 1.80
  70. #Total 3,64
  71. #Medie 0,91
  72. #selectia a doua - aleator in locul primului cromozom apare cromozomul 4 cu aptitudinea cea mai mare
  73. #iar in locul cromozomului 2 apare cromozomul 3 cu aptitudinea imediat descrescatoare
  74. #Cromozomi f(xi) ni
  75. #000 010 010 1.64 1.64/1.57=1.04
  76. #010 001 001 1.5 0.95
  77. #010 001 001 1.5 0.95
  78. #000 010 010 1.64 1.04
  79. #Total 6.28
  80. #Media 1.57
  81. #continuand prin acest mod se ajunge la cromozomul 000 001 100
  82. #x1*=0, x2*=1,x3*=4 f(0,1,4)=0.32+2=2,32 miliarde
  83. ##############################
  84. ##############################
  85. #sa se determine minimul functiei de o variabila f(x)=|x|+cos(x),xE[-20,20]
  86. f<-function(x) abs(x)+cos(x)
  87. f
  88. min<- -20
  89. max<- 20
  90. curve(f,min,max)
  91. #functia fitness(functia de aptitudine) trebuie sa aiba mereu valori pozitive
  92. fitness<-function(x) -f(x)
  93. #vrem sa minimizam f
  94. functiega<- ga(type="real-valued",fitness=fitness,min=min,max=max)
  95. functiega
  96. #o medie a valoriilor functiile de evaluare pentru toata populatia
  97. #si valoarea cea mai buna
  98. plot(functiega)
  99. summary(functiega)
  100. #elitism numarul de indivizi cei mai performanti care supravietuiesc la fiecare generatie (5% din totalul populatiei supravietuieste)
  101. #probabilitatea de incrucisare(crossover probability)
  102. #Sa se determine maximul functiei f(x)=(x^2+x)cosx,xE[-10,10]
  103. f<-function(x) (x^2+x)*cos(x)
  104. min<- -10
  105. max<- 10
  106. curve(f,min,max)
  107.  
  108. functiega<- ga(type="real-valued",fitness=f,min=min,max=max)
  109. #trebuie sa-l maximizam pe f de aceea il punem la fitness
  110. plot(functiega)
  111. summary(functiega)
  112. #problema rucsacului
  113. #iti vei petrece o luna in excursie greutatea maxima a unui rucsac este de 20kg
  114. #ai la dispozitie un numar de obiecte de supravietuire fiecare avand un numar de puncte
  115. #obiectivul este de a maximiza numarul de puncte
  116. #Obiect Nr.puncte Greutate
  117. #Briceag 10 1
  118. #Fasole 20 5
  119. #cartofi 15 10
  120. #Ceapa 2 1
  121. #sacdedormit 30 7
  122. #sfoara 10 5
  123. #busola 30 1
  124. date<-data.frame(obiect=c("briceag","fasole","cartofi","ceapa","sacdedormit","sfoara","busola"),
  125. puncte=c(10,20,15,2,30,10,30),greutate=c(1,5,10,1,7,5,1))
  126. greutatelimita<-20
  127. evalfunc<-function(x){current_solution_puncte<-x%*%date$puncte
  128. current_solution_greutate<- x%*%date$greutate
  129. if(current_solution_greutate>greutatelimita) return(0)
  130. else return(-current_solution_puncte)}
  131. #inmultirea a doi vectori %*%
  132. #algoritmul gen alg optimizeaza o functie de minim si noi avem obiectivul sa maximizam puncte
  133. #trebuie sa fixam numarul de iteratii
  134. iter=100
  135. ga<-rbga.bin(size=7,popSize=200,iter=iter,mutationChance=0.01,elitism=T,evalFunc=evalfunc)
  136. #size e marimea cromozomului, 7 gene pentru ca 7 obiecte, elitism=T 5% sa traiasca
  137. cat(summary(ga))
  138. #1 inseamna ca ia obiectul, 0 inseamna ca nu-l ia
  139. solutie<-c(1,1,0,1,1,1,1)
  140. date[solutie==1,]
  141. cat(solutie%*%date$puncte)
Advertisement
Add Comment
Please, Sign In to add comment