NetLogo开发模拟模型问题:如何每tick仅转换一个patch为城市
问题解决:每tick仅转换一个地块为城市用地
问题根源
你代码里的ask patches块把筛选候选地块和转换操作包在了里面,这意味着每个patch都会独立执行一次“找候选→选一个转城市”的流程,所以每tick会有大量地块被修改,和预期不符。
修改后的完整代码
to develop grow-population ask patches with [pcolor = grey][ask neighbors [set potential (potential + one-of [1 -1])]] ask patches [ set new-potential (potential + sum [potential] of neighbors4) / 5 + one-of [1 -1] ] ask patches [ set potential new-potential ] ; 把筛选和选择逻辑移到全局,整个tick只执行一次 let development_patch patches with [potential > threshold and urban? = 0 and fitness = 1 and population > 5] if any? development_patch [ let selected_patch one-of development_patch ask selected_patch [ set urban? 1 set land-use "Urban" set pcolor blue ] ] tick end
关键修改点
- 把原来嵌套在
ask patches里的development_patch筛选、地块选择和转换逻辑,移到全局代码中,确保整个tick只执行一次筛选和转换操作 - 保留
ask patches [ set potential new-potential ]来更新所有地块的潜力值,这部分是每个地块都需要执行的,没问题
这样修改后,每一次tick只会筛选出所有符合条件的地块,随机选一个转为城市用地,就符合你的需求了。
内容的提问来源于stack exchange,提问作者user22570245
相关产品推荐
相关产品推荐

