Netlogo:如何在我的模型中使用contract net协议

Netlogo:如何在我的模型中使用contract net协议,netlogo,Netlogo,大家早上好, 目前,我在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 spaw

大家早上好, 目前,我在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
  ]
]
询问汽车
[ 
如果
[设定崩溃?真的吗
问一辆有[备用?]的车
[设置备用?错误]
为自己设定目标
]
停止
]
]

您到底想做什么?如果你想在一定次数的滴答声后停车,那么你可以做一些类似于
如果滴答声=25[询问其中一辆车[死亡]]
。如果你想在参观了3所房子后停下来,你可以做一些不同的事情。如果您的问题是将信息从一辆车传递到另一辆车,那么您可以将新车的相关变量设置为旧车的变量。正如您所看到的,您需要准确地告诉我们您想要编写什么代码。您还应该向我们展示您迄今为止所做的尝试。提前感谢您的回复。用滴答声停车是个不错的选择。但我的问题是让汽车相互协商,谁会为停下来的汽车拜访失踪的家庭。使用距离作为决策因素?但是如何编码呢?也就是说,如果后备车离失踪家庭更近,他会去,还是其中一辆车会去。。。我不知道如何对这些可能性进行编码,由代理做出决定……所有这些选项都可以编码。你需要决定你到底想要编码什么,然后我们可以帮助你如何编码。也就是说,我将切换到model crash,在25个刻度(滑块)后,一辆车停下来。当一些任务中断时,问题应该按照我说的假设分成子任务:1假设可能是使用备用汽车。2假设使用未停车的车辆。如何让管理者选择最佳假设?他们之间的距离?如果是这样,如何重新激活模型并完成所有交付?抱歉,但有时我无法很好地解释,但想法是,撞毁其中一辆车,识别问题,宣布缺失的内容,为代理选择的2种可能性出价,并选择最佳的一种。我不知道如何创建这种动态,在我创建的两辆车中,其中一辆会停下来,因为这些车有可变的碰撞?我加入了go程序,在我的设置中定义了备用护理,但我需要备用车来接住那些没有去过的房子。谢谢@jenbt我自己的code
set target[target]
将名为target的变量的内容从撞车传递到备用车。您可以对所有需要的变量执行此操作,以便让备用车接管路线。谢谢@JenB,我非常感谢您的帮助。干杯