MATLAB上的进程间通信

时间:2013-03-25 20:07:07

标签: multithreading matlab inter-process-communicat

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

现在我想尝试在MATLAB上实现,以利用MATLAB绘图函数及其数学工具。是否有可能在MATLAB中创建这样的模拟,或者更好的是它是否是前进的?我知道并行工具箱,但我不确定MATLAB是否适合这样的应用程序。我也可以使模拟不平行,但它不是那么有趣。这是作业的一部分,我想知道在MATLAB上开始这样的模拟是否是一个好主意,以便更熟悉它。如果它不是前进的话,我可以很容易地切换到python。

3 个答案:

答案 0 :(得分:1)

如前所述,你在matlab中实际上没有多个进程。

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

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

答案 1 :(得分:1)

这就是我要做的事情:

  1. 在matlab中编写一个代理类,其中包含您需要的参数,设置和获取(或编写subsref方法)的方法以及“决策制定”的方法
  2. 使用类
  3. 的实例填充数组
  4. 创建一个包含实例索引的数组,后跟其前任,即如果代理4跟随代理1,2和3,代理5跟随代理1,2和4,则向量看起来像:[4 1 2 3 5 1 2 4]等。或者制作父子矩阵。您还可以在实例中添加存储前驱的参数。如果每个代理都相互连接,您甚至不需要此功能。
  5. 现在你会按顺序运行。所有代理都会更新其输入,所有代理都会计算其响应并设置其输出。
  6. 正如您所看到的,这不是平行的,而是顺序的。但是,我无法真正看到并行处理的优势。工具箱没有任何帮助,因为它只允许“工人”,具体取决于您拥有的核心数量。基本上,即使你使用并行处理工具箱,你也没有太大的优势,因为它是为了并行化循环。例如,在遗传算法中,您可以独立计算每个池成员的成本函数,因此您可以使用工具箱。在一个循环执行依赖于先前循环执行的计算的算法中,您不能使用工具箱。

    希望这有帮助。

答案 2 :(得分:0)

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并执行您希望的所有花哨图。