龟陷在Netlogo中

时间:2018-08-17 13:32:06

标签: netlogo

当我运行模型(基于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

0 个答案:

没有答案