在NetLogo中为补丁(模拟细胞)添加唯一ID并实现复制继承
NetLogo细胞增殖模型:补丁唯一ID分配与传递问题
我正在开发一个模拟人体组织的NetLogo模型,仅用代表人体细胞的patches(补丁)构成。细胞会随时间增殖,需要为每个独立补丁(细胞)添加唯一ID,且该ID要在增殖后传递给子细胞。目前找不到合适的入手点,也不确定该如何处理。
我尝试了以下代码,但连为每个补丁分配唯一ID都无法实现。track-clones过程本应为每个补丁分配ID,后续我还会扩展代码以追踪单个补丁及其增殖过程:
to track-clones ; let patch-list patches ; let patch-count count patches ; foreach patch-list [ ; set id ?1 ; ] end
解决方案
1. 先定义必要变量
在NetLogo的界面(Interface)「变量」面板中添加两个变量:
- 全局变量
next-id:记录下一个待分配的唯一ID,初始值设为1 - 补丁变量
cell-id:存储每个细胞(补丁)的唯一ID;若需要追踪克隆谱系,可额外添加补丁变量parent-id
2. 初始化补丁ID
在模型的setup过程中,给初始细胞批量分配唯一ID:
to setup clear-all set next-id 1 ; 示例:给所有黑色补丁(代表初始细胞)分配ID ask patches with [pcolor = black] [ set cell-id next-id set next-id next-id + 1 ] reset-ticks end
如果所有补丁都是初始细胞,直接执行ask patches [set cell-id next-id set next-id next-id + 1]即可。
3. 增殖时的ID传递逻辑
当细胞满足增殖条件时,给新生成的子细胞分配新ID,同时可记录父细胞ID以追踪克隆链:
to reproduce ; 示例:让年龄达到阈值的细胞增殖 ask patches with [age >= 5] [ ; 选择相邻的空补丁作为子细胞位置 let empty-neighbor one-of neighbors with [pcolor = white] if empty-neighbor != nobody [ ask empty-neighbor [ set pcolor black ; 标记为细胞 set cell-id next-id ; 分配新唯一ID set next-id next-id + 1 set parent-id [cell-id] of myself ; 记录父细胞ID,可选 ] ] ] end
4. 修复原track-clones过程
原代码错误在于用补丁本身作为ID值,且没有递增的ID生成源。修改后可用来批量给现有细胞补ID:
to track-clones set next-id 1 ask patches with [pcolor = black] [ set cell-id next-id set next-id next-id + 1 ] end
内容的提问来源于stack exchange,提问作者Master
相关产品推荐
相关产品推荐

