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:

  1. si no hay ningún carro adelante acelere
  2. 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: