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