Netlogo:查找下一个目标折扣以前的目标

Netlogo:查找下一个目标折扣以前的目标,netlogo,Netlogo,我试图让我的代理在达到第一个目标后计算下一个补丁目标。目标定义为最高的补丁影响值/到代理的距离。需要使用相同的程序计算下一个目标,但也要从等式中扣除任何以前的目标 我尝试创建一个补丁集来包含所有目标,但我不确定它是否有效 我的问题是如何创建一个to report函数来计算下一个最高的影响值。我已经完全被我程序的最后一部分卡住了 我最初的报告功能是: to-report highest-influence let available-target patches with [influence

我试图让我的代理在达到第一个目标后计算下一个补丁目标。目标定义为最高的补丁影响值/到代理的距离。需要使用相同的程序计算下一个目标,但也要从等式中扣除任何以前的目标

我尝试创建一个补丁集来包含所有目标,但我不确定它是否有效

我的问题是如何创建一个to report函数来计算下一个最高的影响值。我已经完全被我程序的最后一部分卡住了

我最初的报告功能是:

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