gpt4 book ai didi

netlogo - 具有网络扩展的最低成本路径

转载 作者:行者123 更新时间:2023-12-01 02:21:23 38 4
gpt4 key购买 nike

我想在一个有狼的多边形(由几个补丁组成)和位于狼周围 6 半径范围内的所有多边形之间绘制成本最低的路径。这是我的代码:

第 1 步:我按如下方式构建网络以使用 Netlogo 中的网络扩展:

wolves-own [my-cost-of-path my-path] 
patches-own [polygon night-cost LCP-distance-between-polygons]
turtles-own [cost-of-turtle]
links-own [cost-of-link]

to create-network

ask patches [
if not any? turtles-here [
sprout 1 [
set shape "dot"
set color white
set size 0.5 ] ] ]

ask turtles [
set cost-of-turtle [night-cost] of patch-here
create-links-with turtles-on neighbors ]

ask links [ set cost-of-link sum [night-cost] of both-ends ]

end

第 2 步:我定义函数“least-cost-path”如下:

to-report least-cost-path [ID-polygon] 
let my-cost-of-path -1

ask wolves [
foreach sort turtles-on patches with [plabel = ID-polygon] [
let turtle-on-polygon ?
nw:set-snapshot turtles links

ask turtles-here [ let cost nw:weighted-distance-to turtle-on-polygon "cost-of-link"
if my-cost-of-path = -1 or cost < my-cost-of-path [
set my-cost-of-path cost
set my-path nw:weighted-path-to turtle-on-polygon "cost-of-link" ] ] ]

foreach my-path [
ask ? [ set color red
set thickness 0.2 ] ] ]

report my-cost-of-path

end

第 3 步:我使用函数“least-cost-path”在狼和狼周围半径为 6 的所有多边形之间构建路径:

ask wolves [      
ask patches in-radius 8 [
let list-ID-polygon-in-buffer ( [plabel] of patches in-radius 8 )
set list-ID-polygon-in-buffer remove-duplicates list-ID-polygon-in-buffer
set list-ID-polygon-in-buffer remove [plabel] of patch-here list-ID-polygon-in-buffer
set list-ID-polygon-in-buffer remove "" list-ID-polygon-in-buffer

foreach list-ID-polygon-in-buffer [
let ID-polygon-in-buffer ?
ask patches with [plabel = ID-polygon-in-buffer] [
set LCP-distance-between-polygons least-cost-path ID-polygon-in-buffer ] ] ] ]

使用这段代码,我有两个问题:

1) 步骤 2 中的变量“cost”取 FALSE/TRUE。相反,“成本”必须是一个数字。因此,我收到一条错误消息:< 运算符只能用于两个数字。

2) 在步骤 2 中,变量“my-cost-of-path”和“my-path”必须特定于狼:wolves-own [my-cost-of-path my-path]。我有一条错误消息,因为在我的代码中,“my-cost-of-path”和“my-path”并非特定于海龟(这些变量位于“ask turtles-here”中)。

非常感谢您的帮助。

最佳答案

关于 1):

nw:weighted-distance-to 如果不存在路径,则报告 false

怎么可能没有路径,既然你的网络看起来是全连接的?好吧,问题在于您不仅仅在处理网络中的海龟:您是在要求狼在此处询问海龟 以找到一些路径。但是狼本身包含在turtles-here中,而狼没有连接到网络!

您也许可以在这里询问其他海龟,但您必须确保同一 block 区域上没有其他狼。

最明智的做法可能是为网络中的节点创建一个单独的品种。如果你有一个名为 nodes 的品种,你可以说 ask nodes-here 这会很好地解决你的问题。

关于 2):

您发布的代码无法编译,因为您试图在 least-cost-path 的顶部设置 let my-cost-of-path -1 > 记者,但是 my-cost-of-path 已经是一个 wolf 变量。您的代码让我感到困惑,因此我无法为您提供完整的解决方案。

您的least-cost-path 报告器应该对局部变量还是对 wolf 变量进行操作?如果你需要一个局部变量,它应该有一个不同的名字。另一方面,如果你想直接对你的 wolf 变量进行操作,least-cost-path 成为报告者可能没有多大意义(你当然不能报告 my-cost-of-path 在它的末尾)。您可能需要稍微重组一下...

关于netlogo - 具有网络扩展的最低成本路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20247234/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com