每只海龟都需要从同一座席集中选择不同的座席

时间:2018-08-25 10:36:04

标签: netlogo heading agentset

我的犬种(amministrazione spurgatori)有问题。 我需要每个人都从同一个特工集中选择一个不同的目标(带有segnalato的人孔吗?= true),但是它们都朝向相同的补丁。 我认为问题是“ to direzione amministrazione”中的代码,但我不确定。 有什么建议么? 预先谢谢

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;; CARATTERISTICHE ;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

globals
[
  grid-x-inc                                                          ;;per definire la grandezza degli isolati (quadrati verd)
  grid-y-inc
  intersections
  manholesO                                                            ;; tombini sulle strade orizzontali
  manholesV                                                            ;; tombini sulle strade verticali
  roads
  valore-Scenario-degrado
]

turtles-own
[
ufficio
segnalati
work
house
goal
speed
applicazione?
]

breed [cittadini cittadino]
breed [amministrazione spurgatore]

patches-own
[
 intersection?                                                          ;;vero se è intersezione tra due strade                                                             ;;vero se è tombino
 ostruzione-da-rifiuti                                                      ;; da definire bene
 segnalato?
]


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;; PROCEDURA DI SETUP ;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup
  ca
  reset-ticks
  setup-globals
  setup-patches
  set-Scenario-Degrado
  let goal-candidates patches with [
    pcolor = 37 and any? neighbors with [ pcolor = white]
  ]


 create-cittadini n-of-cittadini
  [
    set size 1
    set color black
    set shape "car"
    set speed 0.07
    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
    move-to house
    set applicazione? false
     ]

  ask n-of NOALLATESSERADELTIFOSO cittadini [set applicazione? true]

  create-amministrazione n-of-spurgatori
  [
    set size 1
    set color red
    set shape "person"
    set speed speed
    set ufficio one-of goal-candidates

    set goal ufficio
    move-to ufficio
  ]

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 pcolor 37
    ]
 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 white ]

  ;;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 )]


  setup-intersections
  setup-manholesO
  setup-manholesV


end

to setup-intersections
  ask intersections
  [
   set intersection? true
  ]
end

to setup-manholesO
  if setup-manholes? [
  ask manholesO
 [  set pcolor 109
    set segnalato? false
    set ostruzione-da-rifiuti 0
  ]
  ]
end

to setup-manholesV
  if setup-manholes? [
  ask manholesV
 [  set pcolor 109
    set segnalato? false
    set ostruzione-da-rifiuti 0
  ]
  ]
end

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;; PROCUDERA DI AVVIO ;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:

to go
tick
  network
  go-cittadini
  go-amministrazione
  ask manholesO [                                                          ;;il tempo di svuotamento aumento di 1 ogni tick
    ostruzioneO
  ]
  ask manholesV
  [
  ostruzioneV
  ]

  attappamento
end

to network
  if Metodo-diffusione-applicazione = "Passaparola"
[
    ask cittadini with [applicazione? = true]
    [if any? cittadini in-radius 1 with [applicazione? = false] and random-float 1.0 < Probabilità-connessione
      [create-link-with one-of other cittadini in-radius 1 with [ applicazione? = false ]
      ]
 ]
  ]



    end

to segnalazione
  ask cittadini with [applicazione? = true]
  [
 if [pcolor] of patch-ahead 2 = 103 [
      ask patch-ahead 2 [set segnalato? true]
    ]
  ]

    end


to go-cittadini

 ask cittadini
  [face next-patch                                                      ;;per andare verso la direzione quindi definisce il movimento (forse non serve up-car?)
    fd speed
    variation-speed
    direzione-cittadini
    segnalazione
    ask link-neighbors [ set applicazione? true ]
      ]
  ask cittadini  with [applicazione? =  true][ ask in-link-neighbors
  [ set applicazione? true]
  ]

end

to go-amministrazione
  ask amministrazione
  [
    face next-patch2
    fd 0.05
    direzione-amministrazione
  ]
end

to direzione-cittadini
  if goal = house and (member? patch-here [ neighbors4 ] of house) [ set goal work ]
  if goal = work and (member? patch-here [ neighbors4 ] of work) [ set goal house ]
end

to direzione-amministrazione

  set segnalati patches with [segnalato? = true]

  if not any? patches with [segnalato? =  true] [set goal ufficio]
  if any? patches with [segnalato? = true ] [set goal one-of segnalati]

  if count patches with [segnalato? = true] > 1 [
    set goal min-one-of (patches with [segnalato? = true]) [distance myself]
  ]

  spurgo

end

to spurgo

  ask amministrazione [
    if [segnalato?] of patch-here = true [
      set ostruzione-da-rifiuti 0
      set segnalato? false
  ]
  ]

end


to variation-speed
  if rain? [
  ifelse [pcolor] of patch-ahead 2 = 103
  [set speed 0]
  [ifelse pcolor = 107
    [set speed 0.025]
    [set speed 0.05]
  ]
  ]


end

to ostruzioneO                                                              ;; il tombino cambia colore in base al livello di ostruzione
  if setup-manholes?  [
    ifelse ostruzione-da-rifiuti >= 600

      [ifelse ostruzione-da-rifiuti >= 1200
        [set pcolor 103]
        [set pcolor 107]
      ]
  [set pcolor 109]
  ]
end


to ostruzioneV                                                               ;; il tombino cambia colore in base al livello di ostruzione
if setup-manholes? [
  ifelse ostruzione-da-rifiuti >= 600

      [ifelse ostruzione-da-rifiuti >= 1200
        [set pcolor 103]
        [set pcolor 107]
      ]
  [set pcolor 109]
  ]
end


to attappamento
  ask cittadini [ if any? cittadini-on manholesO [set ostruzione-da-rifiuti ostruzione-da-rifiuti + valore-Scenario-degrado] ]
  ask cittadini [ if any? cittadini-on manholesV [set ostruzione-da-rifiuti ostruzione-da-rifiuti + valore-Scenario-degrado] ]

end

to set-Scenario-degrado
  if Scenario-degrado = "Basso" [
    set valore-Scenario-degrado random-float (2 - 0) + 0
  ]
  if Scenario-degrado = "Medio" [
    set valore-Scenario-degrado random (4 - 2) + 2
  ]
  if Scenario-degrado = "Alto" [
    set valore-Scenario-degrado random-float (6 - 4) + 4
  ]
end

to-report next-patch

  let choices neighbors with [ pcolor = white or pcolor = 109 or pcolor = 107 or pcolor = 103]                      ;;qui per farli passare sui tombini modificare con i colori che si impostano

  let choice min-one-of choices [ distance [goal] of myself ]                                                   ;;fai fare la distanza alla tartaruga
  report choice
end



 to-report next-patch2

  let choices neighbors with [ pcolor = white or pcolor = 109 or pcolor = 107 or pcolor = 103 ]                      ;;qui per farli passare sui tombini modificare con i colori che si impostano

  let choice min-one-of choices [ distance [goal] of myself ]                                                   ;;fai fare la distanza alla tartaruga
  report choice
end

1 个答案:

答案 0 :(得分:3)

首先,请编辑您的问题,而不要写下更新的答案。这是代码的更干净版本。

master

我所做的是:

  1. 首先将to go-amministrazione ask amministrazione [ face next-patch2 fd 0.05 direzione-amministrazione ] end to direzione-amministrazione set segnalati patches with [segnalato?] if-else any? segnalati [ set goal one-of segnalati set goal min-one-of segnalati [distance myself] ] [ set goal ufficio ] spurgo end 替换为patches with [segnalato? = true]-您不需要= true位(也可以说patches with [segnalato?]而不是= false)
  2. 用segnalati替换所有其他not(因为您实际上定义了此补丁集-一旦定义了补丁集,就应该使用该名称,以便NetLogo不必继续重新创建补丁集以进行计数它
  3. 认识到,如果只有一个segnalato,那么它也是最接近的segnalato
  4. 将逻辑流合并到单个patches with [segnalato? = true]语句中,因此NetLogo仅具有一个真实性评估评估,而不是三个

看看这段代码,您显然可以删除if-else行,并具有相同的效果。

说了这么多,我看不出这段代码在逻辑上有什么问题。每个amministrazione应该选择最接近的segnalato作为其目标。

我要做的是创建更多的segnalato,然后手动检查segnalato附近的几个amministrazione,以查看它是否选择了正确的。可能是因为您碰巧在不存在任何电子信息文物的位置创建隔离器,所以该电子信息文物最终大多选择了相同的电子隔离子,因为它恰好位于中央。