如何杀死和再生每一定数量的蜱虫海龟

  • 本文关键字:海龟 何杀死 再生 netlogo
  • 更新时间 :
  • 英文 :


我正在处理的模型模拟了一组在团队项目中工作的工人。我正试图添加一个名为";更换"预期结果是:

打开时:该品种现有员工中有30%的海龟死亡,同样数量的新海龟也被引进。

关闭时:没有海龟死亡,所有在设置中生成的海龟都将从头到尾参与该项目。

杀死海龟的目的是海龟自己的变量";技能"我试图模拟一个场景,人们从公司辞职,雇佣新员工,这将导致技能水平的变化。

如果能更容易地每20次改变30%海龟的技能水平,而不是杀死/再生,那将是完美的,但我无法理解。

我对这个问题的尝试如下所示。它运行时没有任何错误,但我确认它不会在每一组蜱虫中杀死/繁殖30%的海龟。任何有用的指导都将不胜感激。

to go
if all? patches [ workload = 0 ] [ stop ]
ifelse replacement [hire] [continue]
recolor
tick
end
to hire
if ticks > 0 and ticks mod 20 = 0 [
ask n-of (count employees * 0.30) employees [die]
create-turtles number_of_workers * 0.30 [
set breed employees
setxy random-xcor random-ycor
set shape "person"
set color black
set size 1
set skills random-float 1]
]
ask employees [move]
ask leaders [move]
end
to continue
ask employees [move]
ask leaders [move]
end

我最终自己找到了答案。删除";刻度>0和"0";从雇佣功能解决了它:(

根据您对问题的描述,我不确定为什么删除if ticks > 0 and解决了它;替换";变量设置为false,则不会调用雇用过程。

不管怎样,你还问过每20次就改变一次技能集的问题。你可以这样做:

to go
if all? patches [ workload = 0 ] [ stop ]
if replacement? and ticks mod 20 = 0 [hire]
move-people
recolor
tick
end
to hire
ask n-of (count employees * 0.30) employees
[ set breed employees
set skills random-float 1
]
end
to move-people
ask employees [move]
ask leaders [move]
end

我还以一种旨在使调试更容易的方式进行了轻微的重组。你在两个";雇佣;以及";继续";程序。很明显,你希望这种情况总是发生,所以这在";去";程序(我更改了名称以便于描述(。

现在;雇佣;程序只是改变现有员工的技能。但是,请注意,任何其他变量(如引线、尺寸、颜色和位置(都不受影响。如果你采用这种方法,你可能想以某种方式表明他们是新员工。

";雇佣;程序现在被明确地称为";更换"开关打开,同时也是20个刻度的倍数。如果你在调用过程中有部分条件("go"(,而在过程本身中有部分情况("hire"(,那么你很容易忘记你没有看到的那一半的存在。

最新更新