用Python编写仿真程序

时间:2015-06-08 09:31:52

标签: python multiprocessing simulation

我目前正在忙于用Python编写模拟。我正在模拟改变仓库中叉车存放货盘的逻辑对行驶距离的影响。我正在寻找5个叉车,每个叉车都将工作分配到工作清单,并使用数学模型分配存放托盘的位置。存放托盘的区域被分成较小的子区域。所有5个叉车使用相同的存储区域,但一次只允许一个叉车在一个子区域。

我目前面临的问题是编写代码的最佳方式,因此这5台叉车同时完成工作,同时跟踪每个叉车在存储区域的位置以及可用的托盘位置。

到目前为止,我编写的代码可以完成数学模型和单个叉车的运动。我目前正在尝试多处理,以允许所有5个叉车平行移动。所以我创建了5个进程,每个进程一个,然后在每个进程中运行我的数学模型以找到最佳的托盘放置位置。然而,为了做到这一点,我需要有一个全球列表,其中包含所有其他叉车的位置信息以及可用的存储位置。

那么你们怎么看待最简单的方法来跟踪有关叉车位置和存放地点的信息?还有多重处理我应该去解决这个问题的方向吗?

提前谢谢你。

1 个答案:

答案 0 :(得分:0)

你的问题非常笼统,所以我最多可以给你一个通用答案。

kleptojoblib这样的代码提供了函数调用的动态缓存,因此您可以将函数声明为" cached",它将存储结果(所以如果给出相同的输入,你不必重新计算)。我之所以提到这一点是因为klepto提供了对内存,磁盘或数据库的存储的抽象...因此您可以将结果缓存/存档到磁盘上的文件或数据库后端 - 这两个文件都可以通过并行进程访问(在数据库的情况下,分布式计算资源上的进程)。 joblib仅适用于文件后端,在选项方面稍微有限,但是代码更为成熟。

kleptojoblib非常常用于某些形式的优化或预测科学类型问题的进程之间的存储和通信 - 这看起来就像你正在做的那样。

有较低级别的"滚动你自己"解决方案,例如选择数据库模块并使用它,或写入文件,或使用pickle将对象转储到磁盘......但joblibklepto是为了简化流程。

https://github.com/uqfoundation/klepto

https://github.com/joblib/joblib