NetLogo斑块着色实现相邻黄色、黑色斑块无同色方案咨询
NetLogo 无同色相邻黄/黑斑块实现方案
调整思路
- 初始化所有斑块为绿色作为基底
- 选取黄色(城市)斑块时,仅从自身为绿色、相邻斑块中无黄色的候选池中随机选择,避免出现相邻同色黄斑块
- 选取黑色(煤矿)斑块时,仅从自身为绿色、相邻斑块中无黑色的候选池中随机选择,避免出现相邻同色黑斑块
- 新增非空判断逻辑,避免可选斑块不足时程序报错
修改后完整代码
to setup-patches ; 初始化所有斑块为绿色基底 ask patches [set pcolor green] ; 生成符合要求的黄色城市斑块 repeat number-of-cities [ ; 筛选符合条件的候选斑块:自身为绿、周围无黄色斑块 let candidate-patches patches with [pcolor = green and not any? neighbors with [pcolor = yellow]] if any? candidate-patches [ ask one-of candidate-patches [set pcolor yellow] ] ] ; 生成符合要求的黑色煤矿斑块 repeat number-of-coal [ ; 筛选符合条件的候选斑块:自身为绿、周围无黑色斑块 let candidate-patches patches with [pcolor = green and not any? neighbors with [pcolor = black]] if any? candidate-patches [ ask one-of candidate-patches [set pcolor black] ] ] end
补充说明
- 代码默认用
neighbors判断8个方向的相邻斑块,如果你模型只需要判断上下左右4个方向的邻接,把代码里的neighbors替换为neighbors4即可 - 如果你设置的
number-of-cities或number-of-coal超过了当前地图尺寸能容纳的最大同色无相邻斑块数量,代码会自动生成尽可能多的符合要求的斑块,不会抛出执行错误
内容的提问来源于stack exchange,提问作者Nicola Visonà
相关产品推荐
相关产品推荐

