Saludos!, Aquí John Balwit en el curso de complejidad
Voy a repasar algunas soluciones del
conjunto final de problemas y soluciones del nivel avanzado
y esto también será divertido cuando construyamos una aplicación netlogo
desde el inicio y veremos cuál es mi aproximación a la construcción de modelos
obviamente hay diferentes maneras de hacerlo
y una de las cosas importantes es que cuando empiecen a programar exploren
no tengan miedo de cometer errores porque esa es la mejor manera de aprender
de cientos de errores
he revisado estos modelos
cientos y cientos de veces y estoy seguro que voy a cometer errores
construyendo éste
pero es parte de programar.
Nivel Avanzado: voy a hacer
un modelo que
usa el crecimiento de poblacion basada en agentes
que no se basa en ecuaciones, de hecho vamos a hacer pequeñas entidades
que se reproducen y vamos a ver
si este comportamiento creado
es lo que dice el modelo logístico de población
o que reporta que se comporta asi que vamos de un modo obtener
este comportamiento derivado
del comportamiento actual de los agentes
que es de hecho interesante filosóficamente
que este tipo de modelamiento es de bajo nivel
y que el comportamiento real emerge
de las propiedades e interacciones de los agentes, asi que
empecemos: este es logo y esto es lo que se obtiene cuando empiezas, una interfaz simple
...
cuando empiezo un nuevo modelo siempre
pongo un boton de setup (inicio)
y usualmente
un boton de steps (pasos) en un modelo como éste
y un botón de go (ir)
obviamente estos botones se refieren a procedimientos que aún no escribo
y también son cuidadoso de
alinear todos los elementos con la misma cantidad de espacios entre los botones
es solo mi manera de hacerlo
también pongo etiquetas
en mis modelos así puedo recordar que son
en el futuro, así que ahí vamos.
eso es lo basico y ahora estoy interesado en tomar un modelo
y ahora veamos que necesitamos crear
un conjunto de agentes y queremos que
se reproduzcan y entonces vamos a graficarlos
en un gráfico para poder ver la curva sigmoidal, así que vamos a plotearlos
vamos a sacar lo básico fuera del camino
y vamos a llamar a este gráfico
"population" (población)
...
sabemos que
va a haber un eje de población versus tiempo y es siempre una buena idea etiquetar inmediatamente
el
eje, así no se olvida
...
ok
ya los preliminares están listos
lo que vamos a hacer ahora en inicializar el modelo y vamos a crear
algunos agentes así que vamos al código
y les escribimos
"to setup"
y empezamos a escribir.
Sabemos que necesitamos crear un número definido
inicialmente. Probablemente necesitemos
una barra (slider) para eso, pero podemos empezar
hagámos una barra inmediatamente,
y así podemos ya quitarnos esto por ahora
volvemos a la interfaz y hacemos una barra
y la llamamos "initialpop" (población inicial)
usualmente copio eso
y vamos a
crear una cantidad
de población inicial en el modelo y entonces cuando tengamos la oportunidad
le voy a asignar
a estas entidades nuevas algunas propiedades como por ejemplo, el color
a verde
asignar la forma a digamos un círculo
y definir su tamaño
inicialmente viene con un tamaño definido de 1
Ahora voy ..
Existe un problema ahora con esto y voy a
mostrarles esto porque
La inicialización (setup) funciona y vamos a crear 50 individuos por defecto, asi que
lo que tengo en mente es
Se dieron cuenta que tenemos 20 ahí
y parece que hay solo 1 agente creado, pero hay 27
que están todos ahí
pero estan todos unos encima de otros
para moverlos entre si
tendremos que hacer
lo que haremos es decirles a cada uno que avanzaran
10 unidades a posiciones aleatorias y veremos que
ahora están dispersos de manera aleatoria
Aun así no es completamente lo que queremos, aún parece demasiado
ordenado, como
artificial, y además aún no nos hemos sacado el agente inicial (del centro)
lo que me recuerda que siempre que inicializamos
siempre debemos inicializar con la palabra "clear-all" (limpiar todo)
cuyo abreviatura es simplemente la palabra "CA"
que lo limpa todo
y en vez de usar este comando "create" (crear) que es la manera
mas fácil de
crear una población de agentes
vamos a usar algo diferente y este es el modo
de pedir por parches (patches)
y pedir por un numero específico de parches si tienen suficiente
en la población inicial
para preguntar cuantos parches
se
crearán
y por supuesto una vez que me decido a quién me refiero, me refiero a parches
y porqué les pido que hagan este
modo de crear, es como decir:
"oigan 12 parches
cada uno de ustedes va a contener 1 agente y entonces
decirle a ese agente que ponga el color a verde, la forma de circulo
que se mueva 10 hacia adelante" ahora no necesitamos este avance de 10
así que veamos si esto funciona
nos aseguramos que
asigne aleatoriamente los parches cada vez que lo pedimos
y aleatoriamente solicite un cierto numero de parches
27 en este caso u 80 en otro caso
Ahora voy a poner una población inicial
de parches que podemos controlar con esa línea de código
Oks, asi que en el próximo paso
voy a
es pensar "que es lo que queremos hacer con los agentes"
y preguntarles a estos parches
(agentes) o puntos verdes
y que lo que queremos es básicamente hacer
y necesitamos es que sean capaces de "morir"
y no queremos que tengamos una reproducción que no se "sobreponga" así
tener una generación padre que de a luz a otra generación
y si otras generaciones padres mueren debemos tener los medios de tener traza de generaciones
asi que también vamos
a necesitar que se creen dispersas, así
no van a terminar todas una encima de la otra
y será facil mantener traza de éstas visualmente si necesitamos
que estén en su propio parche
okay, no necesitamos tener cualquier tipo de crianza posible, pero no queremos
hacerlo mas complicado, pero queremos ver como lo podemos hacer
vamos a decir
que en cada paso en el tiempo se reproducirán
vamos a poner "step" para hacer todas las cosas que necesitamos hacer
así que esto es de algún modo un pseudocódigo
voy a decir que necesitamos
reproducir
padres necesitan morir
y los que queden se deben dispersar
así que ya estamos
estos van a ser nombres de procedimentos que no he escrito
así que este procedimiento en este paso (step) va a llamar a estos procedimientos, entonces
pensemos como la reproducción va a trabajar