Netlogo:查找下一个目标折扣以前的目标
我试图让我的代理在达到第一个目标后计算下一个补丁目标。目标定义为最高的补丁影响值/到代理的距离。需要使用相同的程序计算下一个目标,但也要从等式中扣除任何以前的目标 我尝试创建一个补丁集来包含所有目标,但我不确定它是否有效 我的问题是如何创建一个to report函数来计算下一个最高的影响值。我已经完全被我程序的最后一部分卡住了 我最初的报告功能是:Netlogo:查找下一个目标折扣以前的目标,netlogo,Netlogo,我试图让我的代理在达到第一个目标后计算下一个补丁目标。目标定义为最高的补丁影响值/到代理的距离。需要使用相同的程序计算下一个目标,但也要从等式中扣除任何以前的目标 我尝试创建一个补丁集来包含所有目标,但我不确定它是否有效 我的问题是如何创建一个to report函数来计算下一个最高的影响值。我已经完全被我程序的最后一部分卡住了 我最初的报告功能是: to-report highest-influence let available-target patches with [influence
to-report highest-influence
let available-target patches with [influence > 0] ;and not any? patches with [pcolor = green]
report max-one-of available-target [influence / distance myself]
end
但我不知道如何让下一个reporter函数使用相同的参数,同时也不考虑任何以前的目标
to-report next-highest-influence
; patches with [influence > 0] and not part of patch set
end
任何帮助都将不胜感激。我已经提供了完整的代码
breed [walkers walker]
walkers-own [traveled? ;; parameter to keep track of if a walker has traveled to a target yet or not
target ]
patches-own [influence influence-set] ;highest-influence
to setup
clear-all
reset-ticks
define-patches
create-walkers num-walkers
ask walkers [
setxy 0 0
set heading 90
let streets neighbors with [pcolor = black]
ifelse any? streets in-cone 1 25
[fd 1]
[move-to one-of streets in-radius 1]
set traveled? false ;; so that walkers know they have not yet moved to a target
]
ask walkers [
define-target ]
end
to define-patches
ask n-of 100 patches [
set pcolor white
]
ask n-of 40 patches with [pcolor = white] [set influence random 5 set pcolor blue set plabel influence]
ask patches [set influence-set patches with [pcolor = green] ]
end
to define-target ;; this defines the initial destination of walkers
if traveled? = false [
set target highest-influence
ask target [set pcolor green]
face target ]
end
to new-target ;; this defines subsequent desinations after walkers have reached inital target
if traveled? = true [
set target next-highest-influence
ask target [set pcolor green + 2]
face target ]
end
;;;;;;;;;;;;run-time procedure;;;;;;;;;;
to go
ask walkers [
if distance target > 1
[ travel-walkers
leave-a-trail
set traveled? true ]
if distance target = 1
[ stop
new-target
travel-walkers
leave-a-trail
]
]
tick
end
to travel-walkers
ask walkers [
move-towards-target
]
end
to move-towards-target
ask walkers [
ifelse [pcolor] of patch-ahead 1 != white or any? other turtles-here
[ Move-Function ]
[ Avoid-Function ]
]
end
to Move-Function
let t target
face min-one-of all-possible-moves [distance t]
fd 1
end
to Avoid-Function
let t target
face min-one-of all-possible-moves [distance t]
end
to leave-a-trail
ask patch-here [set pcolor grey]
end
;;;;;; reporter calculations ;;;;;;
to-report highest-influence
let available-target patches with [influence > 0] ;and not any? patches with [pcolor = green]
report max-one-of available-target [influence / distance myself]
end
to-report next-highest-influence
; patches with [influence > 0] and not part of patch set
end
to-report all-possible-moves
report patches in-radius 1 with [pcolor != white and distance myself <= 1 and distance myself > 0 and plabel = "" ]
end
你能利用这个会员吗?这样做很简单。查看下面的简化玩具模型,我没有使用您的代码,因为我不确定您希望如何实现,并且需要设置一些接口来运行它。看看这本书
报告的返回具有最高影响/距离值的补丁,该补丁不属于海龟访问列表的成员。最初,列表中没有补丁,但当海龟访问每个目标时,它会将目标添加到访问列表中,这样就不再考虑补丁
turtles-own [ visited-list ]
patches-own [ influence ]
to setup-member?
ca
crt 1 [ set visited-list [] ]
ask patches [ set influence 0 ]
ask n-of 5 patches [ set influence 5 + random 50 ]
reset-ticks
end
to go-member?
ask turtles [
let target highest-influence
ifelse target != nobody [
face target
ifelse distance target > 1 [
fd 1
] [
move-to target
ask target [ set pcolor red]
set visited-list lput target visited-list
]
] [ print "No targets remaining." ]
]
tick
end
to-report highest-influence
let to-visit patches with [
influence > 0 and
not member? self [visited-list] of myself ]
report max-one-of to-visit [ influence / ( distance myself )]
end