Netlogo如何将某breed的部分变量值按比例转移到另一breed
报错原因
of运算符要求后方输入为单个智能体或可返回明确值的语句,原代码中plants in-radius 1返回的是植物智能体集合,无法直接通过seed-bank of取到对应值,同时原代码也未实现80%种子转移、植物种子库同步扣减的需求。
前置声明确认
首先需确认你已经完成了品种和专属变量的声明,示例如下:
breed [hikers hiker] breed [plants plant] hikers-own [hiker-seeds] plants-own [seed-bank]
修正后完整逻辑代码
to go ask hikers [communicate] ; 其余全局逻辑(如徒步者移动、tick等)可在此处补充 end to communicate ; 筛选当前斑块上有有效种子的植物 let target-plants plants-here with [seed-bank > 0] if any? target-plants [ ask target-plants [ ; 计算80%待转移种子量,round取整保证数值为整数,不需要可删除 let transferred-seeds round (seed-bank * 0.8) ; 将转移种子累加至当前交互的徒步者身上 ask myself [set hiker-seeds hiker-seeds + transferred-seeds] ; 同步扣减植物自身种子库 set seed-bank seed-bank - transferred-seeds ] ] end
逻辑说明
- 优先检索当前徒步者所在斑块的符合条件植物,避免
in-radius 1误判相邻斑块的植物 - 遍历每一株交互植物完成种子转移计算,支持同一斑块有多株植物的场景
- 用
myself指代触发交互的徒步者,保证种子转移和扣减的对应关系准确
内容的提问来源于stack exchange,提问作者Trillium
相关产品推荐
相关产品推荐

