Netlogo:如何在我的模型中使用合同网络协议

Netlogo: how can I use contract net protocol in my model

大家早上好, 目前我在 netlogo 中有一个模板,可以可视化随机创建的房屋中的送货路线。

globals[route-vector]
breed [carr car]
breed [spare spares]
breed [hous housess]
breed [spawns spawn]
carr-own [ route route-counter spawn-target target route-complete?]
spare-own[ route route-counter spawn-target target route-complete?]

to setup
clear-all
create-carros
create-casas
path
reset-ticks
end

to create-carros
create-carr 2 [ set color green ]
ask carr  [
set size 1.5
setxy random-xcor random-ycor
set route-counter 0
set target nobody
set route []
set route-complete? false
pd
]
end

to create-carspare
create-spare 1 [ set color blue ]
ask spare  [
set size 1.5
setxy random-xcor random-ycor
set route-counter 0
set target nobody
set route []
set route-complete? false
pd
]
end

to create-casas
create-hous 5 [ set color red ]
ask hous  [
set shape "house"
set size 1.5
setxy random-xcor random-ycor
]
end

to path
set route-vector [4 7 6 3 5 0 1 1 0 1]

let houses sublist route-vector 0 (length route-vector / 2 )
let carlist sublist route-vector (length route-vector / 2 ) (length route-
vector)

(foreach carlist houses
[ [the-car the-house] ->
  ask car the-car [
    set route lput ( housess the-house ) route
  ]
]
)
ask carr [
hatch 1 [
  set breed spawns
  ht
]
set spawn-target one-of other turtles-here with [
  xcor = [xcor] of myself
]
]
end

to go

ask carr with [ not route-complete? ] [

if route = [] [
  set target spawn-target
]

if target = nobody [
  set target item route-counter route
]

face target
ifelse distance target > 1 [
  fd 1
] [
  move-to target
   ifelse target != spawn-target [
    set route-counter route-counter + 1
  ] [
    set route-complete? true
  ]
  set target nobody
 ]
 if route-counter > length route - 1 [
  set route-counter 0
  set target spawn-target

  ]
  ]
  tick
  end

我考虑过使用损坏或碰撞开关,以及显示每辆车最多送货上门数量的滑块。

在我的 go 程序中我输入了:

 ask carr with [failure?] [
 if ticks = 25 [ask one-of carr [set crash? TRUE]
  set target spawn-target

假设每辆车的最大送货量为 3 辆,并且由于汽车停了而不会参观一所或多所房子,我放置了一个重新安排按钮:

 to reschedule
 ask one-of spare with [not route-complete?] ; How do I make the reservation 
 car take the route of the car that stopped?
[
  set target [car route that stopped]
]
set target spawn-target
end

我在重新安排底部时需要一些帮助。如果一辆车停下来,没有走完路线,后备车应该接管没有参观的房子

在此先感谢您的理解,如果您能提供帮助,我将不胜感激。

如果我明白你在问什么,你有一辆撞毁的汽车,你想将其中一个变量的内容传递给备用汽车。被撞的车有可变碰撞?设置为 TRUE,但我无法从您的代码中看到您如何将汽车定义为备用汽车。不过大概是这样的。

ask cars
[ <doing whatever they do>
  if <conditions for crash>
  [ set crash? TRUE
    ask one-of cars with [spare?]
    [ set spare? FALSE
      set target [target] of myself
    ]
    stop
  ]
]