Netlogo:如何在我的模型中使用contract net协议
大家早上好, 目前,我在netlogo中有一个模板,允许在随机创建的房屋中可视化交付路线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
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我自己的codeset target[target]
将名为target的变量的内容从撞车传递到备用车。您可以对所有需要的变量执行此操作,以便让备用车接管路线。谢谢@JenB,我非常感谢您的帮助。干杯