MATLAB 上的进程间通信

Posted

技术标签:

【中文标题】MATLAB 上的进程间通信【英文标题】:Inter-process communication on MATLAB 【发布时间】:2013-03-25 20:07:07 【问题描述】:

我想创建一个 MATLAB 程序来模拟某些代理的行为。这些代理中的每一个都能够相互通信并决定下一个状态。我可以实现的程序是我熟悉的传统语言,如 java、python 或 C++,并使用线程来模拟每个代理。

现在我想尝试在 MATLAB 上实现以利用 MATLAB 绘图函数及其数学工具。是否有可能在 MATLAB 中创建这样的模拟,或者更好的是直截了当?我知道并行工具箱,但我不确定 MATLAB 是否适合此类应用程序。我也可以使模拟不并行,但这并不有趣。这是作业的一部分,我想知道在 MATLAB 上开始这样的模拟以更加熟悉它是否是个好主意。如果它不是直截了当的,我可以轻松切换到 python。

【问题讨论】:

Matlab 可能不是这项工作的正确工具。如果您可以切换到 Python,那么我强烈建议您这样做。 【参考方案1】:

如前所述,您不能在 matlab 中真正拥有多个进程。

但是对于代理,如果它们的类从句柄继承,您可以制作它们。然后你可以给他们一个接收消息的方法。

但请记住,它们不会并行运行。

【讨论】:

我对 MATLAB 还不是很熟悉,但我明白你的意思!谢谢!【参考方案2】:

我会这样做:

    在 matlab 中编写一个代理类,其中包含您需要的参数、设置和获取方法(或编写子引用方法)以及“决策制定”方法 用类的实例填充数组 要么创建一个数组,其中包含一个实例索引,然后是其前身,即,如果代理 4 跟随代理 1、2 和 3,代理 5 跟随代理 1、2 和 4,则向量将如下所示:[4 1 2 3 5 1 2 4] 等等。或者做一个父子矩阵。您还可以添加一个参数来存储实例中的前置任务。如果每个代理都相互连接,您甚至不需要此功能。 现在您将按顺序运行。所有代理都会更新他们的输入,所有代理都会计算他们的响应并设置他们的输出。

如您所见,这不是并行的,而是顺序的。但是,我在这里看不到并行处理的优势。该工具箱无济于事,因为它只允许“工人”,具体取决于您可以使用的核心数量。基本上,即使您使用并行处理工具箱,也不会有太多优势,因为它旨在并行化循环。例如,在遗传算法中,您可以独立计算每个池成员的成本函数,因此您可以使用工具箱。在一个循环执行依赖于前一个循环执行的计算的算法中,您不能使用工具箱。

希望这会有所帮助。

【讨论】:

【参考方案3】:

Matlab 按顺序解释代码。因此,为了解决您的问题,您将需要一个循环来迭代每个采样时间并以预定义的顺序评估所有代理的状态。

TimeMax  = 10;
TimeStep = 0.1;
time_counter = 0;
while time_counter<TimeMax  
  time_counter = time_counter + TimeStep; 
  % Update all the agents sequentially
end

这不是很有效。因此,我建议您使用 Simulink,它更自然地支持并行计算。然后,您可以将结果导出到 Matlab 并根据需要绘制所有精美的绘图。

【讨论】:

感谢您的回答。也许我会改用python

以上是关于MATLAB 上的进程间通信的主要内容,如果未能解决你的问题,请参考以下文章

同一个盒子上的进程间通信 - 2个应用程序或进程之间的通信

Unix进程小结进程间通信方式总结

Heroku 上的进程间通信

Linux的进程/线程间通信

Linux的进程/线程间通信

进程间通信之共享内存