Netlogo 当多个代理以它为食时,我如何使一个代理衰退?

Netlogo 当多个代理以它为食时,我如何使一个代理衰退?,netlogo,Netlogo,在我的模型中,我有一些代理,它们充当具有一定能量的食物。这些都是由一些海龟品种喂养的,每个海龟品种都有自己的食物能量,低于食物的能量 喂料剂的代码如下: to eat ifelse [food-energy] of myfood > 1.5 [ set food-energy 1.5] end 食品腐烂的相关代码为: to decay if any? turtles-here [set food-energy (1.5 * count feeders-here wit

在我的模型中,我有一些代理,它们充当具有一定能量的食物。这些都是由一些海龟品种喂养的,每个海龟品种都有自己的食物能量,低于食物的能量

喂料剂的代码如下:

to eat
  ifelse [food-energy] of myfood > 1.5 [
  set food-energy  1.5]
end
食品腐烂的相关代码为:

to decay
  if any? turtles-here [set food-energy 
  (1.5 * count feeders-here with  [myfood = myself]
end 
如果食物的能量不是喂食者所能消耗能量的精确倍数,就会出现问题。例如,它可以降到1,这导致馈线取1.5个单位,这是不可能的。当我有不同食物能量的不同品种(即<或>1.5)时,这种情况会加剧

所以我的问题是,我怎样才能让这些东西达到平衡

  • 你需要研究狼羊捕食模型。这是第一个NetLogo教程:NetLogo模型库中有五个版本的复杂性越来越高,请阅读Wilensky和Rand(2015)第4章
  • 请参阅此处的相关资料:
  • 下面有一些提示,但许多细节需要填写

    breed [feeders feeder]
    patches-own [ food-energy ]
    feeders-own [ myfood ]
    to setup
      ca
      ask patches [set food-energy random 50]
      create-feeders 500 [
        move-to one-of patches
        set myfood one-of patches
      ]
    end
    
    to go
      ask feeders [move]
      ask feeders [feed]
      ask patches [growback]
    end
    
    to move ;how shd they move?
      rt random 20
      left random 40
      fd 1
      ;shd movement cost energy?
    end
    
    to feed
      if (patch-here = myfood) [
        let _extracted min (list food-energy 1.5)
        set food-energy (food-energy - _extracted)
      ]
    end
    
    to growback
      ;do you want growback?
    end
    
  • 你需要研究狼羊捕食模型。这是第一个NetLogo教程:NetLogo模型库中有五个版本的复杂性越来越高,请阅读Wilensky和Rand(2015)第4章
  • 请参阅此处的相关资料:
  • 下面有一些提示,但许多细节需要填写

    breed [feeders feeder]
    patches-own [ food-energy ]
    feeders-own [ myfood ]
    to setup
      ca
      ask patches [set food-energy random 50]
      create-feeders 500 [
        move-to one-of patches
        set myfood one-of patches
      ]
    end
    
    to go
      ask feeders [move]
      ask feeders [feed]
      ask patches [growback]
    end
    
    to move ;how shd they move?
      rt random 20
      left random 40
      fd 1
      ;shd movement cost energy?
    end
    
    to feed
      if (patch-here = myfood) [
        let _extracted min (list food-energy 1.5)
        set food-energy (food-energy - _extracted)
      ]
    end
    
    to growback
      ;do you want growback?
    end
    

    谢谢你的回复。我会努力实现它们。这是一个不雅观的变通方法,对我来说很有效:

    to eat
    ifelse (food-energy / capacity) < 1 and [meat] of myfood > capacity [
    set food-energy  1.5] [set food-energy [meat] of myfood
    ask myfood [set shape "square"]]  
    if (food-energy / capacity) = 1 [
    set color white]
    if (food-energy > 0 and food-energy / capacity < 1) 
    [ set color white ]
    end 
    

    谢谢你的回复。我会努力实现它们。这是一个不雅观的变通方法,对我来说很有效:

    to eat
    ifelse (food-energy / capacity) < 1 and [meat] of myfood > capacity [
    set food-energy  1.5] [set food-energy [meat] of myfood
    ask myfood [set shape "square"]]  
    if (food-energy / capacity) = 1 [
    set color white]
    if (food-energy > 0 and food-energy / capacity < 1) 
    [ set color white ]
    end 
    

    我不完全确定衰变应该做什么,因为它似乎是创造能量而不是减少能量。然而,我的最佳猜测是,您需要一个类似于
    设置值min(值中的列表1.5)
    的构造。也就是说,如果输入值已经大于1.5,则输出值将与输入值相同,但如果输入值大于1.5,则输出值将为1.5。我应该说,我正在反向运行衰减函数。如果你看我下面的答案,你可能会知道这是如何工作的,因为我有两个变量,肉类和食物能量。我不完全确定衰变应该做什么,因为它似乎创造能量而不是减少能量。然而,我的最佳猜测是,您需要一个类似于
    设置值min(值中的列表1.5)
    的构造。也就是说,如果输入值已经大于1.5,则输出值将与输入值相同,但如果输入值大于1.5,则输出值将为1.5。我应该说,我正在反向运行衰减函数。如果你看我下面的答案,你可能会知道这是如何工作的,因为我有两个变量,肉类和食物能量。