0

I'm trying to reflect turtles of patches depending on the pcolor scale-color. Basically, I'm using a slider in my modell, where the scale-color of patches can be adjusted from black to white. If a turtle in the shape of a ray hits a patch, another turtle in the shape of the dot will be created.

Depending on the color, a different amount of dots should be created, or the probability of creating a dot should be different. So if a patch is black, more dots should be created, if a patch is white, less dots should be created, like in the climate change modell: https://ccl.northwestern.edu/netlogo/models/ClimateChange

I'm stuck at this problem. Can somebody help me with this problem? Here is my code:

extensions [ gis ]

globals [
  wien-grenzen
  temperature
]

turtles-own [
  birth-tick
]

patches-own [
  random-n
  centroid
  ID
  patch-type
]

breed [rays ray]
breed [IRs IR]
breed [heats heat]
breed [CO2s CO2]
breed [trees tree]
breed [industries industry]

to setup
  clear-all
  set-default-shape rays "ray"
  set-default-shape IRs "ray"
  set-default-shape heats "dot"
  set-default-shape CO2s "CO2-molecule"
  set-default-shape trees "tree"
  set-default-shape industries "industry"
  setup-map
  set-surface
  set temperature 0
  reset-ticks
  plot temperature
end

to setup-map
  clear-all
  ask patches [
    set pcolor 37
  ]
  set wien-grenzen gis:load-dataset "Bezirksgrenzen.shp"
  gis:set-world-envelope (gis:envelope-of wien-grenzen)
  let i 1
  foreach gis:feature-list-of wien-grenzen [ feature ->
    ask patches gis:intersecting feature [
;      set centroid gis:location-of gis:centroid-of feature
;      ask patch item 0 centroid item 1 centroid [
;        set ID i
;      ]
      set ID i
    ]
    set i i + 1
  ]
  gis:set-drawing-color white
  gis:draw wien-grenzen 1.5
end

to set-surface
  let maxG 5
  let maxLG 10
  let maxGr 15
  let maxVal 20
  ask patches with [ID > 0] [
    ifelse ID = 13 [
      set maxG 17
      set maxLG 18
      set maxGr 19
    ][
      set maxG 5
      set maxLG 10
      set maxGr 15
    ]

    set random-n random-float maxVal

    ifelse random-n <= maxG [
      gis:set-drawing-color gray + 1
      set pcolor gray + 1
    ][
      ifelse random-n <= maxLG [
        gis:set-drawing-color gray + 2.5
        set pcolor gray + 2.5
      ][
        ifelse random-n <= maxGr [
          gis:set-drawing-color green + 1
          set pcolor green + 1
        ][
          gis:set-drawing-color green + 2.5
          set pcolor green + 2.5
        ]
      ]
    ]
  ]
  ask patches with [pcolor = gray + 1]
    [ update-albedo-sealed ]
  ask patches with [pcolor = gray + 2.5]
    [ update-albedo-building-regular ]
  ask patches with [pcolor = green + 1]
    [ update-albedo-grassland ]
  ask patches with [pcolor = green + 2.5]
    [ update-albedo-building-greened ]
  gis:set-drawing-color white
  gis:draw wien-grenzen 1.5
end

to go
  run-sunshine
  run-CO2
  run-heat
  tick
  plot temperature
  ask trees [
    catch-CO2s
  ]
  ask industries [
    emmit-CO2s
  ]
  ask turtles with [shape = "dot"][if [ pcolor ] of patch-ahead 6 != gray [set heading heading - 100 ]]
  if ticks > 5000 [stop]
end

to update-albedo-sealed ;; patch procedure
  set pcolor scale-color gray albedo-sealed 0 1
end

to update-albedo-building-regular ;; patch procedure
  set pcolor scale-color gray albedo-building-regular 0 1
end

to update-albedo-grassland ;; patch procedure
  set pcolor scale-color green albedo-grassland 0 1
end

to update-albedo-building-greened ;; patch procedure
  set pcolor scale-color green albedo-building-greened 0 1
end

to radiate
   if 10 * sun-brightness > random 50 [
     hatch-rays 1 [
     set color 48
     set heading 150 + random 60]
   ]
end

to run-sunshine
  ask rays [
    if not can-move? 0.2 [ die ]
    fd 0.2
  ]
  create-sunshine
  encounter-earth
end

to create-sunshine
  if 10 * sun-brightness > random 50 [
    create-rays 1 [
      set heading 370
      set color 48
      setxy (random 60) + min-pxcor max-pycor
      set size 1.2
;      setxy (min-pxcor + 2) 22.6
    ]
  ]
end

to encounter-earth
  ask rays with [ID > 0] [
       ifelse 10 * albedo-sealed > random 10
      [ set heading 180 - heading ]
      [ rt random 45 - random 45
        set color red + random 4
        set breed heats ]
      ]
    ask rays with [ID > 0] [
       ifelse 10 * albedo-building-regular > random 10
      [ set heading 180 - heading  ]
      [ rt random 45 - random 45
        set color red + random 4
        set breed heats ]
      ]
    ask rays with [ID > 0] [
       ifelse 10 * albedo-grassland > random 10
      [ set heading 180 - heading  ]
      [ rt random 45 - random 45
        set color red + random 4
        set breed heats ]
      ]
    ask rays with [ID > 0] [
       ifelse 10 * albedo-building-greened > random 10
      [ set heading 180 - heading  ]
      [ rt random 45 - random 45
        set color red + random 4
        set breed heats ]
      ]
;  ]
end

to run-heat
  set temperature 0.99 * temperature + 0.01 * (12 + 0.01 * count heats)
  ask heats
  [
    let dist 0.5 * random-float 1
    ifelse can-move? dist
      [ fd dist ]
      [ set heading 180 - heading
    set birth-tick ticks
      ask heats [if ticks - birth-tick > 200 [die] ]
    ]
  ]
;;  ask dots [
;   set colorhere pcolor patch-here   ; sets value of the variable colorhere to color of patch on which dot is presently at
;   set colorahead pcolor patch-ahead 0.5   ; sets value of the variable colorahead to color of patch ahead of the dot at distance of 0.5 units from the dot
;   ifelse colorhere = colorahead
;      [ fd 0.1]     ; the dot moves forward if the colors are same
;      [ set heading 100 fd 0.1]  ; the dot changes direction and moves away
;]
end


to add-tree
  let created false
  while [ not created ] [
    create-trees 50 [
      set color green
      set size 1.1
      setxy random-xcor random-ycor
      ifelse ID > 0 [
        set created true
      ] [
        die
      ]
    ]
  ]
end

to remove-tree
  repeat 10 [
    if any? trees [
      ask one-of trees [ die ]
    ]
  ]
end

to add-industry
  let created false
  while [ not created ] [
    create-industries 10 [
      set size 2.1
      setxy random-xcor random-ycor
      ifelse ID > 0 [
        set created true
      ] [
        die
      ]
    ]
  ]
end

to remove-industry
  repeat 10 [
    if any? industries [
      ask one-of industries [ die ]
    ]
  ]
end

to add-CO2
  let i 1
  create-CO2s 25 [
    setxy random-xcor random-ycor
  ]
end

to remove-CO2
  repeat 25 [
    if any? CO2s [
      ask one-of CO2s [ die ]
    ]
  ]
end

to run-CO2
  ask CO2s [
    rt random 51 - 25
    let dist 0.05 + random-float 0.1
    if [pycor <= 0.5] of patch-ahead dist
      [ set heading 180 - heading ]
    fd dist
    ;setxy xcor 0.996 * ycor
     setxy random-xcor random-ycor
  ]
end

to catch-CO2s
  let prey one-of CO2s-here
  if prey != nobody
    [ ask prey [ die ]
    ]
end

to emmit-CO2s
  if random 100 > 95 [
  hatch-CO2s 1 [
    set size 1
    set color green
  ]
  ]
end
TobiCook
  • 99
  • 2
  • 9
  • 1
    You need to describe your specific problem (and preferably cut down your code to what is relevant). What does your existing code do that's wrong? eg error message (and what the message is at what line), or describe what happens now when the ray hits the wall – JenB Jan 18 '20 at 00:13
  • As Jen indicates, "I'm stuck" isn't a question. – Seth Tisue Jan 21 '20 at 23:05

0 Answers0