6 Taller 6 : Modelo de Trafico
6.1 Taller 6 : setup
Comenzaremos configurando el mundo luego las parcelas y finalmente colocaremos los agentes (carros) en el mundo.
La configuración del mundo es la siguiente:
El procedimiento de setup es el siguiente:
breed[cars car]
to setup
clear-all
ask patches [ setup-patches ]
setup-cars
reset-ticks
end
to setup-patches
end
to setup-cars
end
Definimos una raza para los carros y los esqueletos de los procedimientos de setup de parcelas y agentes (CARROS)
el procedimiento setup-patches es el siguiente:
to setup-patches
if pycor > -2 and pycor < 2 [ set pcolor white]
end
Construya en la interfaz el botón setup , al oprimirlo verá lo siguiente:
la banda blanca es la carretera por donde circularán los carros, ahora colocaremos los carros sobre la carretera, construya un deslizador llamado num-cars:
y ahora definiremos el procedimiento setup-cars:
to setup-cars
create-cars num-cars [
set shape "car"
set color blue
set heading 90
move-to one-of patches with [ pycor = 0 and not any? cars-here]
]
end
6.2 Taller 6 : go
Inicialmente dotaremos a cada carro de velocidad ( variable speed), y de dos variables que controlan la velocidad de los carros (speed-min y speed-limit):
cars-own [
speed
speed-min
speed-limit
]
y dos deslizadores acceleration y deceleration:
Inicializaremos las tres variables anteriormente mencionadas en el procedimiento setup-cars de la siguiente manera:
set speed 0.1 + random-float 0.9
set speed-limit 1
set speed-min 0*
Los carros se moveran en la carretera siguiendo las siguientes dos sencillas reglas:
- si no hay ningún carro adelante acelere
- si hay un carro adelante frene y evite pegarle al de adelante.
Entonces el procedimiento go es el siguiente:
to go
;; si hay un carro al frente obtenga su velocidad y frene un poco
ask turtles [
let car-ahead one-of turtles-on patch-ahead 1
ifelse car-ahead != nobody
[ slow-down-car car-ahead ]
[ speed-up-car ] ;; sino, acelere
;; mantenga los límites de velocidad
if speed < speed-min [ set speed speed-min ]
if speed > speed-limit [ set speed speed-limit ]
fd speed
]
tick
end
to slow-down-car [ car-ahead ]
set speed [ speed ] of car-ahead - deceleration
end
to speed-up-car
set speed speed + acceleration
end
Listo, construya los botones step and go en la interfaz y observe el modelo funcionando:
el listado completo del modelo es el siguiente:
breed[cars car]
cars-own [
speed
speed-min
speed-limit
]
to setup
clear-all
ask patches [setup-patches]
setup-cars
reset-ticks
end
to setup-patches
if pycor > -2 and pycor < 2 [ set pcolor white]
end
to setup-cars
create-cars num-cars [
set shape "car"
set color blue
set heading 90
set speed 0.1 + random-float 0.9
set speed-limit 1
set speed-min 0
move-to one-of patches with [ pycor = 0 and not any? cars-here]
]
end
to go
;; si hay un carro al frente obtenga su velocidad y frene un poco
ask turtles [
let car-ahead one-of turtles-on patch-ahead 1
ifelse car-ahead != nobody
[ slow-down-car car-ahead ]
[ speed-up-car ] ;; sino, acelere
;; mantenga los límites de velocidad
if speed < speed-min [ set speed speed-min ]
if speed > speed-limit [ set speed speed-limit ]
fd speed
]
tick
end
to slow-down-car [ car-ahead ]
set speed [ speed ] of car-ahead - deceleration
end
to speed-up-car
set speed speed + acceleration
end
El modelo completo lo puede ensayar en el siguiente applet: