我的netlogo程序出现问题。代码如下:
globals[
growth-param
money-size-ratio
]
turtles-own[
location
tsize
bbalance
]
to setup
ca
reset-ticks
ask patches[set pcolor blue]
create-turtles initial-telemarketers [
set size 1
set bbalance 0.0
setxy random-xcor random-ycor
set shape "circle"
]
set growth-param 1000
set money-size-ratio 0.001
end
to go
ask patches[set pcolor blue]
sell
accounting
observer-updates
tick
end
to sell
let territory 10 * sqrt size
let maxcalls 100 * size
ask n-of maxcalls patches in-radius territory[
if pcolor = blue [set pcolor black]
set bbalance bbalance + 2
]
end
to accounting
let cost size * 50
ask turtles[
set bbalance bbalance - cost
ifelse bbalance < 1
[die]
[set size bbalance * growth-param]
]
end
to observer-updates
end
它应该是一个模型,简单地说有多少电话营销公司互动。它来自Railsback&amp;格林兄弟的造型书。
每次尝试运行时,它都会提供两个我可以看到的问题:在程序销售中,它不希望将bbalance设置为新值,因为它只是turtle,而tick只是观察者上下文。
感谢您的帮助!
答案 0 :(得分:1)
globals[
money-size-ratio
]
turtles-own[
location
tsize
bbalance
maxsize
]
to setup
ca
reset-ticks
ask patches[set pcolor blue]
create-turtles initial-telemarketers [
set size 1
set bbalance 0.0
setxy random-xcor random-ycor
set shape "circle"
set maxsize 0
]
set money-size-ratio 0.001
end
to go
ask patches[set pcolor blue]
ask turtles [sell]
ask turtles [accounting] ;; let's ask the turtles to do this
observer-updates
tick
end
to sell
let territory 10 * sqrt size
let maxcalls 100 * size
if maxcalls > 40401[
set maxcalls 40401;keeps maxcalls within acceptable bounds
]
let coun 0
ask n-of maxcalls patches in-radius territory[
if pcolor = blue[
set pcolor black
set coun coun + 2
]
]
set bbalance bbalance + coun
end
to accounting
let cost size * 50 ;; size is a turtle variable so if you want to access it this way, let's make the whole thing
;; a turtle procedure. That's what was confusing Netlogo about the tick command
set bbalance bbalance - cost
if bbalance > growth-param
[set size size + (bbalance - growth-param) * money-size-ratio
set bbalance growth-param
]
if size > maxsize[
set maxsize size
]
if bbalance <= 0
[show (word "dead. Maximum size: " maxsize)
die
]
if size = 0
[show (word "dead. Maximum size: " maxsize)
die
]
end
to observer-updates
end
答案 1 :(得分:0)
sell
是一个乌龟程序(因为它使用了诸如size
和in-radius
之类的乌龟原语。但go
是一个观察员程序。你不能直接从观察员程序调用乌龟程序;你需要指定你想要运行它的海龟。在go
内,我认为你可能打算写ask turtles [ sell ]
而不只是sell
。