1

我的 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 & Grimm 的建模书。

每次尝试运行时,它都会提供两个我可以看到的问题:在程序 sell 中,它不想将 bbalance 设置为新值,因为它是仅海龟,而 tick 仅是观察者上下文。

谢谢你的帮助!

4

2 回答 2

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
于 2013-04-04T19:30:39.950 回答
0

sell是一个海龟过程(因为它使用海龟原语,例如sizein-radius)。但是go是一个观察者程序。你不能直接从观察者过程中调用海龟过程;您需要指定要运行它的海龟。在里面go,我想你可能打算写ask turtles [ sell ]而不是仅仅sell

于 2013-03-28T20:06:23.040 回答