如何让乌龟随着年龄的增长逐渐变大?

问题描述 投票:0回答:2

我正在研究一个由鱼类、鲨鱼和浮游生物组成的生态系统模型。鱼吃浮游生物来获取能量,鲨鱼则吃鱼。然而,我需要鲨鱼和鱼随着年龄的增长而变大。然而,当我使用下面的代码时,鲨鱼和鱼并没有逐渐增加;它们一开始很小,但经过几次蜱虫后,它们立即长到最大的尺寸。

我已经尝试了以下代码,但正如我所解释的,鱼和鲨鱼的尺寸并不是逐渐变大,而是在几秒钟后立即变大。

to sharkGrow
  ask sharks
  [
    set age age + 1
    ifelse age < 12
    [
      set size size + 0.01 ; Growth rate
    ]
    [
      set size 12 ; Maximum size limit
    ]
  ]
end

to fishGrow
  ask fishes
  [
    set age age + 1
    ifelse age < 10
    [
      set size size + 0.1
    ]
    [
      set size 6
    ]
  ]
end

我有在主程序中调用的这两个子程序。

variables netlogo agent
2个回答
0
投票

很容易看出您的成长模式(从尺寸 1 开始)是

1.01、1.02、1.03 ... 1.10、1.11、12.0(!!!) 从 1.11 到 12.0 的跳跃是因为 1+12*0.01 不是 12

如果每个刻度调用此方法,鲨鱼将在 12 个刻度内达到最大尺寸,这通常相当快。 如果你想让鲨鱼继续逐渐成长,你需要大幅增加你的

if
声明的价值。

类似的东西

to sharkGrow
  ask sharks
  [
    set age age + 1
    ifelse age < 110
    [
      set size size + 0.1 ; Growth rate
    ]
    [
      set size 12 ; Maximum size limit
    ]
  ]
end

将从尺寸1平滑成长到尺寸1+110*0.1=12。


0
投票

你的代码工作得很好,鱼和鲨鱼都会变大。我认为唯一的问题是,您只是看不到差异(除非您的代码中其他地方有错误)。与最终尺寸相比,尺寸的增加很小。

假设您从 0 岁开始,体型为 1,您的鲨鱼将从体型 1(年龄=0)增长到体型 1.11(年龄=11),然后突然增加到体型 12(年龄=0) = 12)。鱼也是如此,但不太重要。

要进行测试,您可以右键单击其中一条鲨鱼/鱼并检查它(或使用命令中心中的

inspect one-of sharks
)。您可以在检查窗口的属性中找到大小。以低速开始模拟,看看尺寸如何增加。

因此,要解决您的问题,您需要调整尺寸的增加。如果您想逐渐增加,我建议将其缩放到您的最终尺寸(增加= Final_size / Final_age)。

所以对于你的代码来说,这可能看起来像:

to sharkGrow
  ask sharks
  [
    set age age + 1
    ifelse age < 12
    [
      set size size + 12 / 12 ; Growth rate
    ]
    [
      set size 12 ; Maximum size limit
    ]
  ]
end

to fishGrow
  ask fishes
  [
    set age age + 1
    ifelse age < 10
    [
      set size size + 6 / 10
    ]
    [
      set size 6
    ]
  ]
end
© www.soinside.com 2019 - 2024. All rights reserved.