Netlogo-动态选择不同的全局变量

时间:2018-12-12 06:22:54

标签: global-variables netlogo

我正在为仓库排队系统建模。主要代理是包裹和分拣机。包裹由分拣机从特定的命名缓冲区队列(例如q-1,q-2,q-3 ... q-n)中提取,以进行分类。我不想将缓冲区队列建模为代理,而是想将它们表示为全局列表变量。

问题是我如何将排序机设置为能够动态识别不同的特定全局变量(q-1,q-2 ... q-n)并对其进行操作?

2 个答案:

答案 0 :(得分:3)

  

我不想将缓冲区队列建模为代理

为什么?

我确定您有您的理由,但是可能值得重新考虑。

每当我看到变量名q-1q-2 ... q-n时,我都会感到恐惧。从概念上讲,您正在尝试建模事物的集合。单个变量是指单个事物。编程语言具有用于表示事物集合的数据结构,而这些通常是完成工作的正确工具。

在NetLogo中,这些数据结构(主要是代理集和列表)。

我的直觉告诉我,正确的方法是将队列建模为拥有列表变量的海龟,但是,如果您确实不想这样做,则可以始终使用全局列表列表来存储队列。这是一个示例:

globals [ queues ]

to setup
  clear-all
  set queues n-values 3 [ (list) ] ; create three empty queues
  add-to-queue 0 "A"
  add-to-queue 0 "B"
  add-to-queue 1 "X"
  print queues
  print poll-from-queue 0
  print queues
end

to add-to-queue [ queue-index new-item ]
  let old-queue item queue-index queues
  let new-queue lput new-item old-queue
  set queues replace-item queue-index queues new-queue
end

to-report poll-from-queue [ queue-index ]
  let old-queue item queue-index queues
  let polled-item first item queue-index queues
  let new-queue but-first old-queue
  set queues replace-item queue-index queues new-queue
  report polled-item
end

在您的模型中,队列当然会存储包裹而不是字符串。

答案 1 :(得分:0)

您可能会附加一个变量,以创建该变量的字符串表示形式,然后在执行该字符串之后将全局变量存储在本地变量中:

我没有测试它,但这应该可以工作:

let parcel-number 2
let parcel run-result (word "q-" parcel-number)

或者

run (word "let parcel q-" 2)

有关更多信息,请参见此处:https://ccl.northwestern.edu/netlogo/docs/dictionary.html#run