不满足重新着色条件的随机补丁会重新着色
Random patches that do not satisfy recoloring condition get recolored
我正在研究一个模型,在这个模型中,代理代表从事团队项目的个人团队。安装程序生成工作量为 1 的滑块百分比,以及技能从 0 到 1 不等的代理。当代理遇到工作量为 != 0 的补丁时,他们会被要求重新着色补丁,他们选择的颜色取决于在他们的技能上。
预期的操作发生了 - 员工根据他们的技能重新着色补丁,但问题是他们在没有工作量的情况下随机重新着色补丁。带有“quality_of_work”1、2 或 3 的补丁总和应等于 'count whereiswork',但即使 5% 或 10% 的补丁已设置好,我也得到了大部分充满颜色的补丁。为什么会这样?
提前感谢您的任何反馈!
to go
if all? patches [ workload = 0 ] [ stop ]
ask employees [move]
ask leaders [move]
ask employees-on patches with [workload != 0] [recolor]
tick
end
to recolor
ask employees with [skills < 0.3] [
set pcolor sky
set workload 0
set quality_of_work 1
]
ask employees with [skills > 0.3 and skills <= 0.6] [
set pcolor violet
set workload 0
set quality_of_work 2
]
ask employees with [skills > 0.61 and skills <= 1] [
set pcolor red
set workload 0
set quality_of_work 3
]
set whereiswork patches with [workload > 0]
set sloppy count patches with [quality_of_work = 1 ]
set mediocre count patches with [quality_of_work = 2]
set great count patches with [quality_of_work = 3]
end
问题是您的限制并不像您认为的那样适用。你有:
to go
...
ask employees-on patches with [workload != 0] [recolor]
end
to recolor
ask employees with [skills < 0.3] [
set pcolor sky
set workload 0
set quality_of_work 1
]
...
end
go 过程中的 ask
适用于工作量为 0 的补丁上的所有员工。假设您在这个 tick 中有两个这样的员工(称他们为 A 和 B)。 ask
指示他们每个 运行 重新着色程序。假设 A 先行(请注意,ask
运行 每次都以随机顺序通过代理集)。因此,员工 A 跳转到重新着色程序,然后找到每个技能 < 0.3 的员工,并告诉这些员工为他们的补丁着色等等。然后员工 B 出现并告诉他们所有人再做一次。如果您有 N 名员工满足条件,那么补丁每次着色 N 次。
所以你的重新着色程序应该从个体员工海龟的角度来写。在那种情况下,它更像是“如果我的技能 < 0.3 则为我的补丁天空着色”。看起来像:
to recolor
if skills < 0.3
[ set pcolor sky
set workload 0
set quality_of_work 1
]
...
end
这个嵌套的提问问题很常见,所以我通常建议 NetLogo 初学者将提问和指令放在同一个程序中。类似于:
to go
...
recolor
end
to recolor
ask employees-on patches with [workload != 0]
[ if skills < 0.3
[ set pcolor sky
set workload 0
set quality_of_work 1
]
...
]
...
end
或者,您可以使用技巧来提醒自己重新着色过程是海龟过程。您可以对其进行注释(这是在 NetLogo 模型库中所做的)或者您可以以提醒您的方式命名该过程(例如 recolor-my-patch)。
我正在研究一个模型,在这个模型中,代理代表从事团队项目的个人团队。安装程序生成工作量为 1 的滑块百分比,以及技能从 0 到 1 不等的代理。当代理遇到工作量为 != 0 的补丁时,他们会被要求重新着色补丁,他们选择的颜色取决于在他们的技能上。
预期的操作发生了 - 员工根据他们的技能重新着色补丁,但问题是他们在没有工作量的情况下随机重新着色补丁。带有“quality_of_work”1、2 或 3 的补丁总和应等于 'count whereiswork',但即使 5% 或 10% 的补丁已设置好,我也得到了大部分充满颜色的补丁。为什么会这样?
提前感谢您的任何反馈!
to go
if all? patches [ workload = 0 ] [ stop ]
ask employees [move]
ask leaders [move]
ask employees-on patches with [workload != 0] [recolor]
tick
end
to recolor
ask employees with [skills < 0.3] [
set pcolor sky
set workload 0
set quality_of_work 1
]
ask employees with [skills > 0.3 and skills <= 0.6] [
set pcolor violet
set workload 0
set quality_of_work 2
]
ask employees with [skills > 0.61 and skills <= 1] [
set pcolor red
set workload 0
set quality_of_work 3
]
set whereiswork patches with [workload > 0]
set sloppy count patches with [quality_of_work = 1 ]
set mediocre count patches with [quality_of_work = 2]
set great count patches with [quality_of_work = 3]
end
问题是您的限制并不像您认为的那样适用。你有:
to go
...
ask employees-on patches with [workload != 0] [recolor]
end
to recolor
ask employees with [skills < 0.3] [
set pcolor sky
set workload 0
set quality_of_work 1
]
...
end
go 过程中的 ask
适用于工作量为 0 的补丁上的所有员工。假设您在这个 tick 中有两个这样的员工(称他们为 A 和 B)。 ask
指示他们每个 运行 重新着色程序。假设 A 先行(请注意,ask
运行 每次都以随机顺序通过代理集)。因此,员工 A 跳转到重新着色程序,然后找到每个技能 < 0.3 的员工,并告诉这些员工为他们的补丁着色等等。然后员工 B 出现并告诉他们所有人再做一次。如果您有 N 名员工满足条件,那么补丁每次着色 N 次。
所以你的重新着色程序应该从个体员工海龟的角度来写。在那种情况下,它更像是“如果我的技能 < 0.3 则为我的补丁天空着色”。看起来像:
to recolor
if skills < 0.3
[ set pcolor sky
set workload 0
set quality_of_work 1
]
...
end
这个嵌套的提问问题很常见,所以我通常建议 NetLogo 初学者将提问和指令放在同一个程序中。类似于:
to go
...
recolor
end
to recolor
ask employees-on patches with [workload != 0]
[ if skills < 0.3
[ set pcolor sky
set workload 0
set quality_of_work 1
]
...
]
...
end
或者,您可以使用技巧来提醒自己重新着色过程是海龟过程。您可以对其进行注释(这是在 NetLogo 模型库中所做的)或者您可以以提醒您的方式命名该过程(例如 recolor-my-patch)。