首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何限制食肉动物“吃掉”猎物的数量并重新计算残余物?

如何限制食肉动物“吃掉”猎物的数量并重新计算残余物?
EN

Stack Overflow用户
提问于 2018-07-17 09:52:40
回答 1查看 42关注 0票数 1

在我的程序中,每只海龟(即葡萄糖和细菌)都有自己的变量,称为质量。该程序规定,葡萄糖和细菌的初始质量为1 mmol。正在进行的程序说葡萄糖会被水解和分解.因此,glucose_mass将不同于最初的1 mmol。细菌的起始步骤是,当细菌摄入一种葡萄糖时,细菌的质量就会从最初的1 mmol加葡萄糖的质量(在to divide_hydrolyzed_glucose过程中确定的随机数)增长到一个固定的数目(即0.3)。我如何限制细菌可以消耗的glucose_mass (最大摄取率)?(1 tick=1小时)以及如何设置猎物的剩余glucose_mass?例如,如果细菌只能吃(摄取) 0.0207 mmol葡萄糖/h,而水解的glucose_mass为0.6mmol,那么细菌只能使用0.0207的glucose_mass。剩余的glucose_mass必须重新计算为(0.6 - 0.0207)。我用原始的“我自己”来指“外部”上下文中的代理--在这种情况下,“外部”代理是细菌。然而,错误上说“没有我自己可以参考的代理”。

对这个问题有什么意见或建议吗?

代码语言:javascript
复制
Breed [glucose a-glucose];; Food-prey  
Breed [bacteria bacterium] ;; Predator

glucose-own [glucose_mass] 
Bacteria-own [bacteria_mass uptake]

设置

葡萄糖;葡萄糖;

代码语言:javascript
复制
 Create-glucose (8) ;; Create the glucose available in mmol/d, 
 [set glucose_mass (1)] ;; in mmol

细菌;细菌;

代码语言:javascript
复制
Create-Bacteria (10) ;; Create the clostridiales in mmol
  [set batceria_mass (1)
   Set uptake (0.0207)
  ]
end

外带

代码语言:javascript
复制
ask glucose
 [
  Hydrolyse_glucose
  Divide_hydrolyzed_glucose
 ]

ask Bacteria
 [Bacteria_eat_glucose]

to hydrolyse_glucose
  if (glucose_mass < 200) [
   set glucose_mass ((glucose_mass * 0.025 + random-float 32.975) / 24)
  ]
end

to divide_hydrolyzed_glucose
   if (glucose_mass > 1)
   [
    set glucose_mass (glucose_mass / 2)
    hatch 1
 ]
end

to Bacteria_eat_glucose
  let prey one-of glucose-here
  if prey != nobody
  [ 
    ifelse [glucose_mass] of prey > [ uptake ] of myself
    [
      set bacteria_mass bacteria_mass + [[ uptake] of myself * 0.3]
      ask prey [set glucose_mass glucose_mass – [uptake] of myself]
    ]
    [
      set bacteria_mass bacteria_mass + [glucose_mass * 0.3] of prey
      ask prey [die]
    ]
  ]

end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-18 09:30:17

通常,您可以使用minmax函数进行这种限制。缺乏对myself的参考是一个单独的问题。

在限制条件下,最明确的方法是构造一个临时变量(下面称为“食物”),即要调整的数量。

myself问题似乎是(尚未测试),因为细菌是实际运行代码的代理。也就是说,没有“外部”背景。您直接对细菌代理的变量操作set命令。只有当细菌要求猎物做些什么,然后猎物需要访问细菌拥有的变量时,才会有外部环境。

如果我的解释是正确的,那么您只指bacteria_mass而不是[bacteria_mass] of myself

代码语言:javascript
复制
to Bacteria_eat_glucose
  let prey one-of glucose-here
  if prey != nobody
  [ 
    ifelse [glucose_mass] of prey > uptake
    [ let food min (list uptake [glucose_mass] of prey)
      set bacteria_mass bacteria_mass + food * 0.3
      ask prey [set glucose_mass glucose_mass – 0.3]
    ]
    [
      set bacteria_mass bacteria_mass + [glucose_mass * 0.3] of prey
      ask prey [die]
    ]
  ]

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

https://stackoverflow.com/questions/51378328

复制
相关文章

相似问题

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