Netlogo 不满足重新着色条件的随机面片将重新着色

Netlogo 不满足重新着色条件的随机面片将重新着色,netlogo,Netlogo,我正在研究一个模型,在这个模型中,代理代表一个团队中的个人,在一个团队项目中工作。安装程序生成工作负载为1的修补程序和技能从0到1不等的代理程序的百分比。当代理遇到具有工作负载的修补程序时!=0时,他们被要求重新着色补丁,他们选择的颜色取决于他们的技能 预期的操作会发生-员工会根据他们的技能重新调用补丁,但问题是他们会在没有工作负载的情况下随机调用补丁。“工作质量”为1、2或3的补丁总数应等于“count Where is work”,但即使有5%或10%的补丁设置为工作,我也会得到大多数填充颜

我正在研究一个模型,在这个模型中,代理代表一个团队中的个人,在一个团队项目中工作。安装程序生成工作负载为1的修补程序和技能从0到1不等的代理程序的百分比。当代理遇到具有工作负载的修补程序时!=0时,他们被要求重新着色补丁,他们选择的颜色取决于他们的技能

预期的操作会发生-员工会根据他们的技能重新调用补丁,但问题是他们会在没有工作负载的情况下随机调用补丁。“工作质量”为1、2或3的补丁总数应等于“count Where is work”,但即使有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
要走了
如果有的话?修补程序[工作负载=0][停止]
询问员工[移动]
询问领导[行动]
在[workload!=0][Recoor]的补丁上询问员工
打上钩
结束
回忆
询问具有[技能<0.3]的员工[
设置彩色天空
将工作负载设置为0
将工作质量设置为1
]
询问具有[技能>0.3、技能0.61和技能0]的员工
使用[quality_of_work=1]设置粗略计数修补程序
使用[工作质量=2]设置中等数量补丁
使用[工作质量=3]设置大量补丁
结束

问题在于,您的限制并不像您认为的那样适用。你有:

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
这种嵌套询问问题非常常见,因此我通常建议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
要走了
...
回忆
结束
回忆
在[workload!=0]的修补程序上询问员工
[如果技能<0.3
[设置彩色天空
将工作负载设置为0
将工作质量设置为1
]
...
]
...
结束

或者,您可以使用技巧提醒自己recolor过程是海龟过程。您可以对其进行注释(这是在NetLogo模型库中完成的),也可以以提醒您的方式命名过程(如recolor my patch)。

问题在于您的限制不适用于您认为适用的方式。你有:

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
这种嵌套询问问题非常常见,因此我通常建议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
要走了
...
回忆
结束
回忆
在[workload!=0]的修补程序上询问员工
[如果技能<0.3
[设置彩色天空
将工作负载设置为0
将工作质量设置为1
]
...
]
...
结束

或者,您可以使用技巧提醒自己recolor过程是海龟过程。您可以对其进行评论(这是在NetLogo模型库中完成的),或者您可以以提醒您的方式命名该过程(例如recolor my patch)。

我不确定我是否理解您在这里期望的行为。您要求员工根据员工的技能(而不是补丁的工作量)为补丁上色,并让他们四处走动。这会给很多补丁上色。谢谢你的评论。我认为“询问具有[workload!=0][Reclor]的修补程序上的员工”将作为“Reclor”功能出现的先决条件,仅当他们所在的修补程序的工作量大于0时才着色。我不确定我是否理解您在这里期望的行为。您要求员工根据员工的技能(而不是补丁的工作量)为补丁上色,并让他们四处走动。这会给很多补丁上色。谢谢你的评论。我认为“询问员工使用[workload!=0][Reclor]的修补程序”将作为“Reclor”功能出现的先决条件,只有在他们使用的修补程序的工作量大于0时才进行着色。非常感谢您提供详细和快速的响应!感谢您的专业知识和好意:)非常感谢您的详细快速回复!感谢您的专业知识和好意:)