当我运行模型(基于netlogo库的Traffic Grid Goal模型)时,由于某种原因,很多乌龟都卡在了中间。
我注意到被卡住的那个人一直在改变航向。
我认为问题在于“要报告”代码。我该怎么解决?
globals
[
grid-x-inc ;;per definire la gramdezza degli isolati (quadrati verd)
grid-y-inc
intersections
manholesO ;; tombini sulle strade orizzontali
manholesV ;; tombini sulle strade verticali
roads
]
turtles-own
[
speed
work
house
goal ;; direzione
;up-car?
]
patches-own
[
intersection? ;;vero se è intersezione tra due strade
manholes? ;;vero se è tombino
tempo-svuotamento ;; da definire bene
]
to setup
ca
setup-globals
setup-patches
;let goal-candidates patches with [ pcolor = white ] ;;indica dove devono essere localizzate casa e lavoro
let goal-candidates patches with [
pcolor = 67 and any? neighbors with [ pcolor = white ]
]
create-turtles persone
[
set size 1
set color black
set shape "car"
set house one-of goal-candidates ;;crea la tartaruga casa
set work one-of goal-candidates with [ self != [ house ] of myself] ;;crea una localizzazione diversa per ogni tartaruga
set goal work ;;crea direzione attuale
set speed 1
setup-person
]
reset-ticks
end
;;con setup globals si definiscono le dimensioni della griglia in questo caso non è modificabile
to setup-globals
set grid-x-inc world-width / 7
set grid-y-inc world-height / 7
end
;;con ask patches definisco le pacth che rappresentano i quadrati intorno alle strade con set road le strade
to setup-patches
ask patches ;;caratteristiche generali delle patch verdi
[ set intersection? false
set manholes? false
set pcolor 67
]
set roads patches with ;;definisco quali sono le strade attraverso le coordinate
[(floor((pxcor + max-pxcor - floor(grid-x-inc - 0))
mod grid-x-inc) = 0) or
(floor((pycor + max-pycor) mod grid-y-inc) = 0)]
ask roads [ set pcolor 9.9 ]
;;vado a definire le intersezioni, capire bene
set intersections roads with ;; definisco quali sono le intersezioni attraverso le coordinate
[(floor((pxcor + max-pxcor - floor(grid-x-inc - 0 )) mod grid-x-inc) = 0) and
(floor((pycor + max-pycor) mod grid-y-inc) = 0)]
set manholesO roads with ;;definisco quali sono i tombini sulle strade orizzonatli
[(floor((pxcor + max-pxcor - floor(grid-x-inc - 0 )) mod grid-x-inc) = 4) and
(floor((pycor + max-pycor) mod grid-y-inc) = 0 )]
set manholesV roads with ;;definisco quali sono i tombini sulle strade verticali
[(floor((pycor + max-pycor - floor(grid-y-inc - 0)) mod grid-y-inc) = 4) and
(floor((pxcor + max-pxcor) mod grid-x-inc) = 0 )]
;chiedere prof perchè i tombini non vanno su una colonna
setup-intersections
setup-manholesO
setup-manholesV
end
to setup-intersections
ask intersections
[
set intersection? true
set manholes? false
]
end
to setup-manholesO
if setup-manholesO? [
ask manholesO
[ set pcolor 109
set manholes? true
set tempo-svuotamento 0
]]
end
to setup-manholesV
if setup-manholesV? [
ask manholesV
[ set pcolor 2
set manholes? true
set tempo-svuotamento 0
]]
end
to setup-person
put-on-roads ;;mettere persone sulla strada
; ifelse intersection? [
; ifelse random 3 = 0
; [ set up-car? true ]
; [ set up-car? false ]
; ]
; [ ; if the turtle is on a vertical road (rather than a horizontal one)
; ifelse (floor ((pxcor + max-pxcor - floor(grid-x-inc - 1)) mod grid-x-inc) = 0)
; [ set up-car? true ]
; [ set up-car? false ]
; ]
; ifelse up-car?
; [ set heading 180 ]
; [ set heading 90 ]
end
;;si mettono le persone sulla strada
to put-on-roads
move-to one-of roads with [ not any? turtles-on self ]
end
to go
tick
ask turtles
[ face next-patch ;;per andare verso la direzione quindi definisce il movimento
fd speed ;; riconosco speed come una caratterstica di velocità della turtles
variation-speed
;fd 1
]
attappamento
ask manholesO [ ;;il tempo di svuotamento aumento di 1 ogni tick
set tempo-svuotamento tempo-svuotamento + 1
allagamentoO
]
ask manholesV
[set tempo-svuotamento tempo-svuotamento + 1
allagamentoV]
end
to allagamentoO ;; il tombino cambia colore dopo 300 tick per tombini orizzontali
if setup-manholesO? [
ifelse tempo-svuotamento >= 600
[ifelse tempo-svuotamento >= 3000
[set pcolor 103]
[set pcolor 107]
]
[set pcolor 2]]
end
to allagamentoV ;; il tombino cambia colore dopo 300 tick per tombini verticali
if setup-manholesV? [
ifelse tempo-svuotamento >= 600
[ifelse tempo-svuotamento >= 3000
[set pcolor 103]
[set pcolor 107]
]
[set pcolor 2]]
end
to variation-speed
ifelse [pcolor] of patch-ahead 1 = 103
[set speed 0]
[ifelse pcolor = 107
[set speed 0.5]
[set speed 1]
]
end
to attappamento
ask turtles [ if any? turtles-on manholesO [set tempo-svuotamento tempo-svuotamento + 2] ]
ask turtles [ if any? turtles-on manholesV [set tempo-svuotamento tempo-svuotamento + 2] ]
end
to-report next-patch
;;gli if indicano il cambio di direzione
if goal = house and (member? patch-here [ neighbors ] of house) [ set goal work ]
if goal = work and (member? patch-here [ neighbors ] of work) [ set goal house ]
;;qui per farli passare sui tombini modificare con i colori che si impostano
let choices neighbors with [ pcolor = white or pcolor = 2 or pcolor = 107 or pcolor = 2 ]
let choice min-one-of choices [ distance [ goal ] of myself ] ;;fai fare la distanza minima alla tartaruga
report choice
end