【问题标题】:Netlogo - dynamically choose the different global variablesNetlogo - 动态选择不同的全局变量
【发布时间】:2018-12-12 06:22:54
【问题描述】:

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

问题是如何将分拣机设置为能够动态识别和操作不同的特定全局变量(q-1、q-2 ...q-n)?

【问题讨论】:

  • 这里没有足够的细节让我完全理解你想要做什么,但我认为你想让 NetLogo 将一个字符串(你将动态构造)转换为一个可执行命令。如果是这样,请查看 NetLogo 字典中的 runrunresult

标签: global-variables netlogo


【解决方案1】:

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

为什么?

我相信你有你的理由,但它们可能值得重新考虑。

每当我看到像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

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

【讨论】:

    【解决方案2】:

    您可能有一个附加变量来创建变量的字符串表示,然后在执行字符串后将全局变量存储在局部变量中:

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      相关资源
      最近更新 更多