From 1bc931619569a8969141e833754cb1d28ded3295 Mon Sep 17 00:00:00 2001 From: benoitgaudou Date: Wed, 4 Dec 2019 19:25:21 +0700 Subject: [PATCH] Addition of traffic model in the model library. --- .../Toy Models/Traffic/includes/voit.png | Bin 0 -> 5649 bytes .../Toy Models/Traffic/includes/voit_blue.png | Bin 0 -> 15677 bytes .../Toy Models/Traffic/includes/voit_red.png | Bin 0 -> 15448 bytes .../Netlogo - Traffic model - 1 road.gaml | 131 ++++++++++++++ .../Netlogo - Traffic model - 2 roads.gaml | 167 ++++++++++++++++++ 5 files changed, 298 insertions(+) create mode 100644 msi.gama.models/models/Toy Models/Traffic/includes/voit.png create mode 100644 msi.gama.models/models/Toy Models/Traffic/includes/voit_blue.png create mode 100644 msi.gama.models/models/Toy Models/Traffic/includes/voit_red.png create mode 100644 msi.gama.models/models/Toy Models/Traffic/models/Netlogo - Traffic model - 1 road.gaml create mode 100644 msi.gama.models/models/Toy Models/Traffic/models/Netlogo - Traffic model - 2 roads.gaml diff --git a/msi.gama.models/models/Toy Models/Traffic/includes/voit.png b/msi.gama.models/models/Toy Models/Traffic/includes/voit.png new file mode 100644 index 0000000000000000000000000000000000000000..6d57a2423998c9ba4bc08945d0742539f4468d9a GIT binary patch literal 5649 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 literal 0 HcmV?d00001 diff --git a/msi.gama.models/models/Toy Models/Traffic/includes/voit_blue.png b/msi.gama.models/models/Toy Models/Traffic/includes/voit_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..03deca562d904b8aaf1f2a3667dc16cb09bc5cfd GIT binary patch literal 15677 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 MW2=9PPrBdwKYOHB>Hq)$ literal 0 HcmV?d00001 diff --git a/msi.gama.models/models/Toy Models/Traffic/includes/voit_red.png b/msi.gama.models/models/Toy Models/Traffic/includes/voit_red.png new file mode 100644 index 0000000000000000000000000000000000000000..064a768995f3f2344d2d4875b4a856f20b36ebfa GIT binary patch literal 15448 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 C)S8C? literal 0 HcmV?d00001 diff --git a/msi.gama.models/models/Toy Models/Traffic/models/Netlogo - Traffic model - 1 road.gaml b/msi.gama.models/models/Toy Models/Traffic/models/Netlogo - Traffic model - 1 road.gaml new file mode 100644 index 0000000000..931972a549 --- /dev/null +++ b/msi.gama.models/models/Toy Models/Traffic/models/Netlogo - Traffic model - 1 road.gaml @@ -0,0 +1,131 @@ +/*** +* Name: NetlogoTrafficmodel +* Author: Benoit Gaudou (for the reimplementation), Wilensky, U. (for the original model) +* Description: This model is a reimplementation of the Netlogo model "Traffic model" +* Wilensky, U. (1997). NetLogo Traffic Basic model. http://ccl.northwestern.edu/netlogo/models/TrafficBasic. +* Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL. +* It has been implemented with the Netlogo platform: +* Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. +* Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL. +* Tags: traffic, transport, congestion, netlogo +***/ + +model NetlogoTrafficmodel + +global torus: true { + int pavement_width <- 50; + int pavement_height <- 9; + + geometry shape <- rectangle(pavement_width * 2, pavement_height * 2); + image_file voit_image_file <- image_file("../includes/voit.png"); + image_file voit_red_image_file <- image_file("../includes/voit_red.png"); + + int y_road <- 4; + car sample_car; + + int nb_cars <- 25 parameter: true; + float acceleration <- 0.0045 min: 0.0 max: 0.01 parameter: true; + float deceleration <- 0.026 min: 0.0 max: 0.1 parameter: true; + + float max_speed <- 50.0; + + init { + list road <- pavement where(each.grid_y = y_road); + create car number: nb_cars { + pavement free_pavement <- one_of(road where(empty(car inside self))); + if(free_pavement != nil) { + my_pavement <- free_pavement; + location <- my_pavement.location; + } else { + do die; + } + heading <- 0.0; + } + + sample_car <- one_of(car); + ask sample_car { + color <- #red; + icon <- voit_red_image_file; + } + } +} + +grid pavement height: pavement_height width: pavement_width { + init { + if( (grid_y >= 3) and (grid_y <=5) ) { + color <- #white; + } else { + color <- #black; + } + } +} + +species car skills: [moving] { + float speed_limit; + float speed_min; + rgb color; + image_file icon; + pavement my_pavement; + + init { + color <- #blue; + icon <- voit_image_file; + speed <- 0.1 +rnd(0.9); + speed_limit <- 1.0; + speed_min <- 0.0; + } + + reflex patch_ahead { + my_pavement <- pavement first_with(each overlaps self); + pavement next_pavement <- pavement first_with( + (each.grid_y = my_pavement.grid_y) and + (each.grid_x = (my_pavement.grid_x + signum(cos(heading))) mod pavement_width) + ); + car car_ahead <- first(car inside next_pavement); + if(car_ahead != nil) { + do slow_down(car_ahead); + } else { + do speed_up; + } + + do move heading: heading; + } + + action slow_down(car car_ahead) { + speed <- max(speed_min, car_ahead.speed - deceleration) ; + } + + action speed_up { + speed <- min(speed + acceleration, speed_limit); + } + + aspect rect { + draw rectangle(1.5,1) rotated_by heading color: color border: #black; + } + + aspect icon { + draw icon at: location size: 3 rotate: heading ; + } +} + +experiment NetlogoTrafficmodel type: gui { + float minimum_cycle_duration <- 0.01; + + output { + layout #vertical; + + display road type: opengl { + grid pavement; + species car aspect: icon; + + } + + display sp { + chart "speed" type: series { + data "red car" value: sample_car.speed * max_speed color: #red; + data "min speed" value: car min_of(each.speed) * max_speed color: #blue; + data "max speed" value: car max_of(each.speed) * max_speed color: #green; + } + } + } +} diff --git a/msi.gama.models/models/Toy Models/Traffic/models/Netlogo - Traffic model - 2 roads.gaml b/msi.gama.models/models/Toy Models/Traffic/models/Netlogo - Traffic model - 2 roads.gaml new file mode 100644 index 0000000000..1a6b95c5b9 --- /dev/null +++ b/msi.gama.models/models/Toy Models/Traffic/models/Netlogo - Traffic model - 2 roads.gaml @@ -0,0 +1,167 @@ +/*** +* Name: NetlogoTrafficmodel2 +* Author: Benoit Gaudou +* Description: This model is a variation of the "Netlogo - Traffic model - 1 road.gaml" in order to be able +* to visualise the impacts of parameters on the congestion and compare 2 scenarios of acceleration-deceleration. +* It is based on the Netlogo model "Traffic model". +* Wilensky, U. (1997). NetLogo Traffic Basic model. http://ccl.northwestern.edu/netlogo/models/TrafficBasic. +* Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL. +* It has been implemented with the Netlogo platform: +* Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. +* Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL. +* Tags: traffic, transport, congestion, netlogo +***/ + +model NetlogoTrafficmodel + +global torus: true { + int pavement_width <- 50; + int pavement_height <- 14; + + geometry shape <- rectangle(pavement_width * 2, pavement_height * 2); + image_file voit_image_file <- image_file("../includes/voit.png"); + image_file voit_red_image_file <- image_file("../includes/voit_red.png"); + image_file voit_blue_image_file <- image_file("../includes/voit_blue.png"); + + int y_road1 <- 4; + int y_road2 <- 10; + list cars_on_road1; + list cars_on_road2; + car sample_car1; + car sample_car2; + list road1; + list road2; + + int nb_cars <- 25; + float acceleration1 <- 0.0045 min: 0.0 max: 0.01 parameter: true; + float deceleration1 <- 0.026 min: 0.0 max: 0.1 parameter: true; + float acceleration2 <- 0.0005 min: 0.0 max: 0.01 parameter: true; + float deceleration2 <- 0.004 min: 0.0 max: 0.1 parameter: true; + float max_speed <- 50.0; + + init { + road1 <- pavement where(each.grid_y = y_road1); +// cars_on_road1 <- create_cars_on_road(nb_cars, road1); + cars_on_road1 <- create_cars_on_road(1, road1, acceleration1, deceleration1); + sample_car1 <- pick_sample(cars_on_road1, #red, voit_red_image_file); + + road2 <- pavement where(each.grid_y = y_road2); +// cars_on_road2 <- create_cars_on_road(nb_cars, road2); + cars_on_road2 <- create_cars_on_road(1, road2, acceleration2, deceleration2); + sample_car2 <- pick_sample(cars_on_road2, #blue, voit_blue_image_file); + } + + reflex create_cars when: (length(car) < nb_cars * 2) and every(10 #cycles) { + do create_cars_on_road(1, road1, acceleration1, deceleration1); + do create_cars_on_road(1, road2, acceleration2, deceleration2); + } + + list create_cars_on_road(int num_cars, list road, float acc, float dec){ + create car number: num_cars returns: cars_on_road { + pavement free_pavement <- one_of(road where(empty(car inside self))); + if(free_pavement != nil) { + my_pavement <- free_pavement; + location <- my_pavement.location; + acceleration <- acc; + deceleration <- dec; + } else { + do die; + } + heading <- 0.0; + } + + return cars_on_road; + } + + car pick_sample(list cars, rgb col, image_file _icon) { + car a_car <- one_of(cars); + ask a_car { + color <- col; + icon <- _icon; + } + return a_car; + } + + +} + +grid pavement height: pavement_height width: pavement_width { + init { + if( (grid_y >= y_road1 - 1) and (grid_y <= y_road1 + 1) ) or + ( (grid_y >= y_road2 - 1) and (grid_y <= y_road2 + 1)) { + color <- #white; + } else { + color <- #black; + } + } +} + +species car skills: [moving] { + float speed_limit; + float speed_min; + float acceleration; + float deceleration; + rgb color; + image_file icon; + pavement my_pavement; + + init { + color <- #blue; + icon <- voit_image_file; + speed <- 0.1 +rnd(0.9); + speed_limit <- 1.0; + speed_min <- 0.0; + } + + reflex patch_ahead { + my_pavement <- pavement first_with(each overlaps self); + pavement next_pavement <- pavement first_with( + (each.grid_y = my_pavement.grid_y) and + (each.grid_x = (my_pavement.grid_x + signum(cos(heading))) mod pavement_width) + ); + car car_ahead <- first(car inside next_pavement); + if(car_ahead != nil) { + do slow_down(car_ahead); + } else { + do speed_up; + } + + do move heading: heading; + } + + action slow_down(car car_ahead) { + speed <- max(speed_min, car_ahead.speed - deceleration) ; + } + + action speed_up { + speed <- min(speed + acceleration, speed_limit); + } + + aspect rect { + draw rectangle(1.5,1) rotated_by heading color: color border: #black; + } + + aspect icon { + draw icon at: location size: 3 rotate: heading ; + } +} + +experiment NetlogoTrafficmodel type: gui { + float minimum_cycle_duration <- 0.01; + + output { + layout #vertical; + display road { + grid pavement /*lines: #black*/; + species car aspect: icon; + + } + + display sp { + chart "speed" type: series { + data "red car" value: sample_car1.speed * max_speed color: sample_car1.color; + data "blue car" value: sample_car2.speed * max_speed color: sample_car2.color; + } + } + } +}