Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- breed [escuelas escuela]
- breed [colegios colegio]
- breed [companias compania]
- breed [estudiantes estudiante]
- companias-own[ nivel ]
- estudiantes-own[ habilidad edad ]
- to configurar-companias[cantidad]
- create-companias cantidad
- ask companias[
- py:run "import numpy as np"
- let distribucion_prob py:runresult "int(np.random.normal(0.5, 0.2, 1)[0]*5)"
- if distribucion_prob <= 0[
- set distribucion_prob 1
- ]
- set shape "factory"
- set color blue
- set size 2
- set nivel distribucion_prob
- set label distribucion_prob
- ]
- let posicion_x -20
- let posicion_y 0
- ;; máximo 28
- ask companias[
- set posicion_x posicion_x + 5
- if (posicion_x = 20)[
- set posicion_y posicion_y + 5
- set posicion_x -15
- ]
- set xcor posicion_x
- set ycor posicion_y
- ]
- end
- to configurar-escuelas[cantidad]
- create-escuelas cantidad
- ask escuelas[
- set shape "house colonial"
- set color pink
- set size 2
- ]
- let posicion_x -20
- let posicion_y -15
- ;; maximo 9
- ask escuelas[
- set posicion_x posicion_x + 5
- if (posicion_x = 0)[
- set posicion_y posicion_y + 5
- set posicion_x -15
- ]
- set xcor posicion_x
- set ycor posicion_y
- ]
- end
- to configurar-colegios[cantidad]
- create-colegios cantidad
- ask colegios[
- set shape "house colonial"
- set color green
- set size 2
- ]
- let posicion_x 0
- let posicion_y -15
- ;; maximo 9
- ask colegios[
- set posicion_x posicion_x + 5
- if (posicion_x = 20)[
- set posicion_y posicion_y + 5
- set posicion_x 5
- ]
- set xcor posicion_x
- set ycor posicion_y
- ]
- end
- ;; crear-estudiante
- ;; Parámetros:
- ;; * destreza: Es el número al azar generado por la institución de acuerdo a su distribución; este es
- ;; asignado a la habilidad del estudiante.
- ;;
- ;; * color-institucion: Es el color de la institución que lo generó
- ;; Retorna:
- ;; Nada, solo crea un estudiante con los parámetros enviados
- to crear-estudiantes[cantidad]
- create-estudiantes cantidad[
- set shape "person"
- set size 1
- set color white
- ]
- end
- ;; SEGUNDA PARTE
- __includes [ "configuracion.nls" ]
- extensions [ py ]
- globals[ PIB-alto PIB-bajo]
- to setup
- clear-all
- py:setup py:python
- reset-ticks ; Se reinicia el contador de ticks
- configurar-companias cantidad-companias
- configurar-escuelas cantidad-escuelas
- configurar-colegios cantidad-colegios
- crear-estudiantes cantidad-estudiantes
- end
- to mover-estudiantes
- ask estudiantes[
- vida-laboral
- set heading random 360
- forward 1
- ;; si es de color blanco, primero se educa. De lo contrario busca trabajo
- ifelse (color = white)[
- evaluar-educacion
- ][
- evaluar-companias who
- ]
- ]
- calcular-pib
- cumplir-anios
- crear-nuevos-estudiantes
- tick
- end
- ;; se aumenta la edad en 1 cada 12 meses
- to cumplir-anios
- if ((ticks mod 12) = 0)[
- ask estudiantes[
- set edad edad + 1
- ]
- ]
- end
- ;; esta función crea nuevos estudiantes a partir de una distribución normal con media 10, y desviación 0.1
- to crear-nuevos-estudiantes
- if nuevos-estudiantes = true[
- if ((ticks mod 12) = 0)[
- py:run "import numpy as np"
- let cantidad_nuevos_estudiantes 10
- set cantidad_nuevos_estudiantes py:runresult "int(np.random.normal(10, 0.1, 1)[0])"
- crear-estudiantes cantidad_nuevos_estudiantes
- ]
- ]
- end
- ;; vida-laboral
- ;; Condición de si se excede de 40 años vivo, se muere laboralmente.
- to vida-laboral
- ;; si el switch en la vista de ejecutar esta en ON se evalúa la condición
- if limite-vida-laboral = true[
- ;; si la edad es mayor que 44(528 meses) años, laboralmente muere
- if edad > 44[
- die
- ]
- ]
- end
- ;; evaluar-educacion
- ;; Camina a lo largo del mundo buscando una institución educativa,
- ;; la cual le asigna un nivel de habilidad de acuerdo a su nivel
- ;; como institución.
- to evaluar-educacion
- ;; se evalúan las escuelas
- ask escuelas[
- ;; se calcula la distancia de cada escuela al estudiante
- let distancia distance myself
- ;; si la distancia es menor a 1 se ingresa a estudiar
- if (distancia < 1)[
- ;; se calcula una probabilidad de 1 a 5 la cual dictará el nivel que alcanzó el estudiante
- py:run "import numpy as np"
- py:run "import random"
- let distribucion_prob py:runresult "int(np.random.normal(0.4, 0.1, 1)[0]*5)"
- ;; se asigna una edad al azar entre 18 y 20 años
- let edad_asignada py:runresult "int(random.uniform(18,20))"
- ;; se asignan al estudiante las variables:
- ;; color: Color de la institución de donde salió
- ;; habilidad: distribucion_prob calculada
- ;; label: distribucion_prob calculada
- ask myself[
- set color [color] of myself
- set habilidad distribucion_prob
- set edad edad_asignada
- set label distribucion_prob
- ]
- ]
- ]
- ;; se evalúan los colegios
- ask colegios[
- ;; se calcula la distancia de cada colegio al estudiante
- let distancia distance myself
- ;; si la distancia es menor a 1 se ingresa a estudiar
- if (distancia < 1)[
- ;; se calcula una probabilidad de 1 a 5 la cual dictará el nivel que alcanzó el estudiante
- py:run "import numpy as np"
- py:run "import random"
- let distribucion_prob py:runresult "int(np.random.normal(0.8, 0.2, 1)[0]*5)"
- ;; se asigna una edad al azar entre 18 y 20 años
- let edad_asignada py:runresult "int(random.uniform(18,20))"
- ;; se asignan al estudiante las variables:
- ;; color: Color de la institucion de donde salio
- ;; habilidad: distribucion_prob calculada
- ;; label: distribucion_prob calculada
- ask myself[
- set color [color] of myself
- set habilidad distribucion_prob
- set label distribucion_prob
- set edad edad_asignada
- ]
- ]
- ]
- end
- ;; evaluar-companias
- ;; cada compañía evalúa la distancia al estudiante y si cumple con las condiciones, este se vincula a
- ;; la compañía.
- to evaluar-companias[quien]
- ask companias[
- ;; se calcula la distancia de la compañía al estudiante
- let distancia distance myself
- ;; si la distancia es menor a 1 se evalúa si se realiza el vínculo con esta.
- if (distancia < 1)[
- ;; se extrae la habilidad del estudiante
- let estudiante_nivel [habilidad] of myself
- ;; se extrae el nivel requerido por la compañía
- let nivel_compania nivel
- ;; si el nivel de la compañía esta uno por debajo, igual o uno por encima de la habilidad del estudiante,
- ;; este se vincula a la compañía. De lo contratio No.
- if ((estudiante_nivel - 1) = nivel_compania) or (estudiante_nivel = nivel_compania) or ((estudiante_nivel + 1) = nivel_compania)[
- py:run "import numpy as np"
- ;; se dejó 0.3 como media porque 30/100 = 0.3 el 30 es porque es la edad media para conseguir empleo
- let distribucion_prob py:runresult "np.random.normal(0.3, 0.1, 1)[0]"
- ;; edad_en_probabilidad se divide entre 100 para convertir la edad a un valor entre 0 y 1.
- let edad_en_probabilidad [edad] of myself / 100
- ;; la idea es que se representan los años como probabilidad(número entre 0 y 1), osea si alguien tiene 20 años
- ;; 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
- ;; la condición de edad_en_probabilidad < distribucion_prob va a entrar al condicional. El objetivo de esto es que
- ;; entre más edad se tenga, es más díficil cambiar de empleo.
- if edad_en_probabilidad < distribucion_prob [
- ;; se eliminan todos los vinculos ya existentes del estudiante
- ask myself [ask my-in-links [die]]
- ;; se crea el nuevo vínculo entre la nueva compañía y el estudiante
- create-link-with turtle quien
- ]
- ]
- ]
- ]
- end
- ;; esto calcula el PIB en puntos aportado por las compañías, lo que se hace es que se cuentan cuantos
- ;; empleados estan vinculados a una compañia y se multiplica por el nivel de ésta, pues éste es el máximo
- ;; aporte que pueden realizar los empleados. Por ejemplo si una empresa de nivel 3 contrata 4 empleados
- ;; de cualquier nivel(entre 2 y 4) lo que aporta cada uno son 3 puntos porque eso es lo que recibe
- ;; de la empresa. En total estos 4 empleados aportan al PIB 12 puntos.
- to calcular-pib
- set PIB-bajo 0 ; compañias con menos de 3 puntos
- set PIB-alto 0 ; compañias con igual o mas de 3 puntos.
- ask companias[
- let cuenta 0
- set cuenta count my-links ;; se cuenta cuantos empleados hay vinculados.
- ifelse (nivel < 3)[
- set PIB-bajo PIB-bajo + (nivel * cuenta)
- ][
- set PIB-alto PIB-alto + (nivel * cuenta)
- ]
- ]
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement