Advertisement
Guest User

Untitled

a guest
Aug 20th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.86 KB | None | 0 0
  1. breed [escuelas escuela]
  2. breed [colegios colegio]
  3. breed [companias compania]
  4. breed [estudiantes estudiante]
  5.  
  6. companias-own[ nivel ]
  7. estudiantes-own[ habilidad edad ]
  8.  
  9. to configurar-companias[cantidad]
  10. create-companias cantidad
  11. ask companias[
  12. py:run "import numpy as np"
  13. let distribucion_prob py:runresult "int(np.random.normal(0.5, 0.2, 1)[0]*5)"
  14. if distribucion_prob <= 0[
  15. set distribucion_prob 1
  16. ]
  17.  
  18. set shape "factory"
  19. set color blue
  20. set size 2
  21. set nivel distribucion_prob
  22. set label distribucion_prob
  23. ]
  24. let posicion_x -20
  25. let posicion_y 0
  26. ;; máximo 28
  27. ask companias[
  28. set posicion_x posicion_x + 5
  29. if (posicion_x = 20)[
  30. set posicion_y posicion_y + 5
  31. set posicion_x -15
  32. ]
  33. set xcor posicion_x
  34. set ycor posicion_y
  35. ]
  36. end
  37.  
  38. to configurar-escuelas[cantidad]
  39. create-escuelas cantidad
  40. ask escuelas[
  41. set shape "house colonial"
  42. set color pink
  43. set size 2
  44. ]
  45.  
  46. let posicion_x -20
  47. let posicion_y -15
  48. ;; maximo 9
  49. ask escuelas[
  50. set posicion_x posicion_x + 5
  51. if (posicion_x = 0)[
  52. set posicion_y posicion_y + 5
  53. set posicion_x -15
  54. ]
  55. set xcor posicion_x
  56. set ycor posicion_y
  57. ]
  58. end
  59.  
  60. to configurar-colegios[cantidad]
  61. create-colegios cantidad
  62. ask colegios[
  63. set shape "house colonial"
  64. set color green
  65. set size 2
  66. ]
  67.  
  68. let posicion_x 0
  69. let posicion_y -15
  70. ;; maximo 9
  71. ask colegios[
  72. set posicion_x posicion_x + 5
  73. if (posicion_x = 20)[
  74. set posicion_y posicion_y + 5
  75. set posicion_x 5
  76. ]
  77. set xcor posicion_x
  78. set ycor posicion_y
  79. ]
  80. end
  81.  
  82. ;; crear-estudiante
  83. ;; Parámetros:
  84. ;; * destreza: Es el número al azar generado por la institución de acuerdo a su distribución; este es
  85. ;; asignado a la habilidad del estudiante.
  86. ;;
  87. ;; * color-institucion: Es el color de la institución que lo generó
  88. ;; Retorna:
  89. ;; Nada, solo crea un estudiante con los parámetros enviados
  90. to crear-estudiantes[cantidad]
  91. create-estudiantes cantidad[
  92. set shape "person"
  93. set size 1
  94. set color white
  95. ]
  96. end
  97. ;; SEGUNDA PARTE
  98. __includes [ "configuracion.nls" ]
  99. extensions [ py ]
  100.  
  101. globals[ PIB-alto PIB-bajo]
  102.  
  103. to setup
  104. clear-all
  105. py:setup py:python
  106. reset-ticks ; Se reinicia el contador de ticks
  107.  
  108. configurar-companias cantidad-companias
  109. configurar-escuelas cantidad-escuelas
  110. configurar-colegios cantidad-colegios
  111. crear-estudiantes cantidad-estudiantes
  112. end
  113.  
  114. to mover-estudiantes
  115. ask estudiantes[
  116. vida-laboral
  117.  
  118. set heading random 360
  119. forward 1
  120. ;; si es de color blanco, primero se educa. De lo contrario busca trabajo
  121. ifelse (color = white)[
  122. evaluar-educacion
  123. ][
  124. evaluar-companias who
  125. ]
  126. ]
  127. calcular-pib
  128. cumplir-anios
  129. crear-nuevos-estudiantes
  130. tick
  131. end
  132.  
  133. ;; se aumenta la edad en 1 cada 12 meses
  134. to cumplir-anios
  135. if ((ticks mod 12) = 0)[
  136. ask estudiantes[
  137. set edad edad + 1
  138. ]
  139. ]
  140. end
  141.  
  142. ;; esta función crea nuevos estudiantes a partir de una distribución normal con media 10, y desviación 0.1
  143. to crear-nuevos-estudiantes
  144. if nuevos-estudiantes = true[
  145. if ((ticks mod 12) = 0)[
  146. py:run "import numpy as np"
  147. let cantidad_nuevos_estudiantes 10
  148. set cantidad_nuevos_estudiantes py:runresult "int(np.random.normal(10, 0.1, 1)[0])"
  149. crear-estudiantes cantidad_nuevos_estudiantes
  150. ]
  151. ]
  152.  
  153. end
  154.  
  155. ;; vida-laboral
  156. ;; Condición de si se excede de 40 años vivo, se muere laboralmente.
  157. to vida-laboral
  158. ;; si el switch en la vista de ejecutar esta en ON se evalúa la condición
  159. if limite-vida-laboral = true[
  160. ;; si la edad es mayor que 44(528 meses) años, laboralmente muere
  161. if edad > 44[
  162. die
  163. ]
  164. ]
  165. end
  166.  
  167. ;; evaluar-educacion
  168. ;; Camina a lo largo del mundo buscando una institución educativa,
  169. ;; la cual le asigna un nivel de habilidad de acuerdo a su nivel
  170. ;; como institución.
  171. to evaluar-educacion
  172. ;; se evalúan las escuelas
  173. ask escuelas[
  174.  
  175. ;; se calcula la distancia de cada escuela al estudiante
  176. let distancia distance myself
  177.  
  178. ;; si la distancia es menor a 1 se ingresa a estudiar
  179. if (distancia < 1)[
  180. ;; se calcula una probabilidad de 1 a 5 la cual dictará el nivel que alcanzó el estudiante
  181. py:run "import numpy as np"
  182. py:run "import random"
  183.  
  184. let distribucion_prob py:runresult "int(np.random.normal(0.4, 0.1, 1)[0]*5)"
  185.  
  186. ;; se asigna una edad al azar entre 18 y 20 años
  187. let edad_asignada py:runresult "int(random.uniform(18,20))"
  188.  
  189. ;; se asignan al estudiante las variables:
  190. ;; color: Color de la institución de donde salió
  191. ;; habilidad: distribucion_prob calculada
  192. ;; label: distribucion_prob calculada
  193. ask myself[
  194. set color [color] of myself
  195. set habilidad distribucion_prob
  196. set edad edad_asignada
  197. set label distribucion_prob
  198. ]
  199. ]
  200. ]
  201.  
  202. ;; se evalúan los colegios
  203. ask colegios[
  204. ;; se calcula la distancia de cada colegio al estudiante
  205. let distancia distance myself
  206.  
  207. ;; si la distancia es menor a 1 se ingresa a estudiar
  208. if (distancia < 1)[
  209. ;; se calcula una probabilidad de 1 a 5 la cual dictará el nivel que alcanzó el estudiante
  210. py:run "import numpy as np"
  211. py:run "import random"
  212.  
  213. let distribucion_prob py:runresult "int(np.random.normal(0.8, 0.2, 1)[0]*5)"
  214.  
  215. ;; se asigna una edad al azar entre 18 y 20 años
  216. let edad_asignada py:runresult "int(random.uniform(18,20))"
  217.  
  218. ;; se asignan al estudiante las variables:
  219. ;; color: Color de la institucion de donde salio
  220. ;; habilidad: distribucion_prob calculada
  221. ;; label: distribucion_prob calculada
  222. ask myself[
  223. set color [color] of myself
  224. set habilidad distribucion_prob
  225. set label distribucion_prob
  226. set edad edad_asignada
  227. ]
  228. ]
  229. ]
  230. end
  231.  
  232. ;; evaluar-companias
  233. ;; cada compañía evalúa la distancia al estudiante y si cumple con las condiciones, este se vincula a
  234. ;; la compañía.
  235. to evaluar-companias[quien]
  236. ask companias[
  237. ;; se calcula la distancia de la compañía al estudiante
  238. let distancia distance myself
  239.  
  240. ;; si la distancia es menor a 1 se evalúa si se realiza el vínculo con esta.
  241. if (distancia < 1)[
  242. ;; se extrae la habilidad del estudiante
  243. let estudiante_nivel [habilidad] of myself
  244.  
  245. ;; se extrae el nivel requerido por la compañía
  246. let nivel_compania nivel
  247.  
  248. ;; si el nivel de la compañía esta uno por debajo, igual o uno por encima de la habilidad del estudiante,
  249. ;; este se vincula a la compañía. De lo contratio No.
  250. if ((estudiante_nivel - 1) = nivel_compania) or (estudiante_nivel = nivel_compania) or ((estudiante_nivel + 1) = nivel_compania)[
  251. py:run "import numpy as np"
  252.  
  253. ;; se dejó 0.3 como media porque 30/100 = 0.3 el 30 es porque es la edad media para conseguir empleo
  254. let distribucion_prob py:runresult "np.random.normal(0.3, 0.1, 1)[0]"
  255.  
  256. ;; edad_en_probabilidad se divide entre 100 para convertir la edad a un valor entre 0 y 1.
  257. let edad_en_probabilidad [edad] of myself / 100
  258.  
  259. ;; la idea es que se representan los años como probabilidad(número entre 0 y 1), osea si alguien tiene 20 años
  260. ;; la variable edad_en_probabilidad será igual a 0.2 y como la distribución normal está entre 0.2 y 0.4 al evaluar
  261. ;; la condición de edad_en_probabilidad < distribucion_prob va a entrar al condicional. El objetivo de esto es que
  262. ;; entre más edad se tenga, es más díficil cambiar de empleo.
  263. if edad_en_probabilidad < distribucion_prob [
  264. ;; se eliminan todos los vinculos ya existentes del estudiante
  265. ask myself [ask my-in-links [die]]
  266.  
  267. ;; se crea el nuevo vínculo entre la nueva compañía y el estudiante
  268. create-link-with turtle quien
  269. ]
  270.  
  271. ]
  272. ]
  273. ]
  274. end
  275.  
  276. ;; esto calcula el PIB en puntos aportado por las compañías, lo que se hace es que se cuentan cuantos
  277. ;; empleados estan vinculados a una compañia y se multiplica por el nivel de ésta, pues éste es el máximo
  278. ;; aporte que pueden realizar los empleados. Por ejemplo si una empresa de nivel 3 contrata 4 empleados
  279. ;; de cualquier nivel(entre 2 y 4) lo que aporta cada uno son 3 puntos porque eso es lo que recibe
  280. ;; de la empresa. En total estos 4 empleados aportan al PIB 12 puntos.
  281. to calcular-pib
  282. set PIB-bajo 0 ; compañias con menos de 3 puntos
  283. set PIB-alto 0 ; compañias con igual o mas de 3 puntos.
  284. ask companias[
  285. let cuenta 0
  286. set cuenta count my-links ;; se cuenta cuantos empleados hay vinculados.
  287.  
  288. ifelse (nivel < 3)[
  289. set PIB-bajo PIB-bajo + (nivel * cuenta)
  290. ][
  291. set PIB-alto PIB-alto + (nivel * cuenta)
  292. ]
  293. ]
  294. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement