global-variables - Netlogo - 动态选择不同的全局变量
问题描述
我正在为仓库排队系统建模。主要代理是包裹和分拣机。分拣机将包裹从特定命名的缓冲区队列(例如 q-1、q-2、q-3...qn)中拉出以进行分拣。我不想将缓冲区队列建模为代理,而是想将它们表示为全局列表变量。
问题是我如何将分拣机设置为能够动态识别和操作不同的特定全局变量(q-1,q-2 ...qn)?
解决方案
我不想将缓冲区队列建模为代理
为什么?
我相信你有你的理由,但它们可能值得重新考虑。
每当我看到像q-1
, q-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
当然,在您的模型中,队列将存储包裹而不是字符串。
推荐阅读
- sql-server - 如何使用 node.js 从 MSSQL 中插入和获取数据
- javascript - 如何使用 Cognito 身份池生成临时凭证来访问 aws 服务?
- angular - 如何从 angular2 中的承诺中显示烤面包机
- python - 具有第一个未命名参数可选
- ruby - Ruby prepend 不适用于类方法
- javascript - 从 Array 取回正确的索引值
- html - 裁剪列表图像并保留文本
- svn - 将 Checkstyle 与 Windows .bat 文件中的 SVN 预提交挂钩集成
- ios - 使用领域保持登录状态
- angular - 如何使用 rxjs 定时器实现一个 http poller