2

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

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

4

3 回答 3

1

这是我要做的:

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

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

希望这可以帮助。

于 2013-04-25T07:38:35.833 回答
1

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

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

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

于 2013-03-26T08:48:03.520 回答
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 并绘制您想要的所有精美图。

于 2013-03-26T08:40:35.190 回答