首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不满足重新着色条件的随机补丁将重新着色

不满足重新着色条件的随机补丁将重新着色
EN

Stack Overflow用户
提问于 2020-11-19 22:54:04
回答 1查看 33关注 0票数 0

我正在研究一个模型,在这个模型中,代理代表一个团队,该团队正在处理一个小组项目。安装程序会生成工作量为1的补丁程序和技能从0到1的补丁程序的滑块百分比。当座席遇到工作负荷为!= 0的补丁程序时,系统会要求他们对补丁程序重新着色,他们选择的颜色取决于他们的技能。

预期的操作发生了-员工根据他们的技能重新着色补丁,但问题是他们随机重新着色补丁而没有工作负载。带有"quality_of_work“1、2或3的补丁的总和应该等于”count when work“,但即使有5%或10%的补丁设置了work,我也会让大部分补丁填充颜色。为什么会发生这种情况?

提前感谢您的反馈!

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-20 07:46:04

问题是,您的限制并不是以您认为的方式应用。您必须:

代码语言:javascript
复制
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的补丁上的所有员工。假设您在此标记中有两个这样的员工(称为A和B)。ask指示它们各自运行重新着色过程。假设A首先运行(请注意,ask每次都以随机顺序运行代理集)。因此,员工A跳到重新着色过程,然后找到技能< 0.3的每个员工,并告诉这些员工给他们的补丁着色,以此类推。然后,员工B出现了,并告诉他们所有人都要再做一次。如果您有N个满足条件的员工,那么补丁将在每个刻度中着色N次。

因此,您的重新着色过程应该从单个员工的角度来编写。在这种情况下,它更像是“如果我有技能< 0.3,那么给我的补丁上色天空”。这看起来像是:

代码语言:javascript
复制
to recolor
  if skills < 0.3
  [ set pcolor sky
    set workload 0
    set quality_of_work 1
  ]
  ...
end

这种嵌套的询问问题非常常见,所以我通常建议NetLogo初学者将询问和指令放在同一个过程中。类似于:

代码语言:javascript
复制
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 -my-patch)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64914168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档