2013-03-25 2 views
2

Я хочу создать программу MATLAB для моделирования поведения некоторых агентов. Каждый из этих агентов способен общаться друг с другом и принимать решение о следующем состоянии. Я мог бы реализовать программу, это традиционный язык, с которым я знаком, например, с java, python или C++, и использовать потоки для имитации каждого из агентов.Межпроцессное общение на MATLAB

Теперь я хочу попробовать реализацию на MATLAB, чтобы использовать графические функции MATLAB и его математические инструменты. Можно ли создать такое симуляцию в MATLAB, или, может быть, лучше, если это происходит? Я знаю о панели инструментов параллелизма, но я не уверен, что MATLAB - хороший выбор для такого приложения. Я также могу сделать симуляцию не параллельной, но это не так интересно. Это часть задания, и я хотел бы знать, стоит ли начинать такую ​​симуляцию на MATLAB, чтобы лучше познакомиться с ней. Если это не прямая передача, я могу легко переключиться на python.

+4

Matlab, вероятно, не тот подходящий инструмент для этой работы. Если вы можете переключиться на Python, я бы настоятельно рекомендовал вам это сделать. – twerdster

ответ

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 и делать все причудливые графики, которые вы хотите.

+0

Спасибо за ваш ответ. Может быть, я переключусь на python – nikosdi

1

Как уже упоминалось ранее, вы не можете иметь несколько процессов в Matlab.

Но для агентов вы можете сделать их, если их классы наследуются от ручек. Затем вы можете дать им метод приема сообщений.

Но имейте в виду, что они не будут работать параллельно.

+0

Я еще не знаком с MATLAB, но понимаю, что вы говорите! Спасибо! – nikosdi

1

Вот что я хотел бы сделать:

  1. Написать класс агента в MATLAB с параметрами, которые необходимо, методы для установки и получения (или писать subsref-методы) и методы для «принятия решений»
  2. заливку массив с экземплярами класса
  3. Либо создайте массив, содержащий индекс экземпляра, за которым следуют его предшественники, то есть если, например, агент 4 следует за агентами 1, 2 и 3, а агент 5 следует за агентами 1,2 и 4, вектор будет выглядеть так: [4 1 2 3 5 1 2 4] и так далее. Или создайте матрицу родитель-младший. Вы также можете добавить параметр, сохраняющий предшественники в экземплярах. Если каждый агент связан друг с другом, вам даже не нужна эта функция.
  4. Теперь вы будете запускаться последовательно. Все агенты обновляют свои входы, все агенты вычисляют свой ответ и устанавливают свои результаты.

Как вы можете видеть, это не параллельное, а последовательное. Тем не менее, я не могу увидеть преимущества параллельной обработки здесь. Инструментарий не помогает, поскольку он позволяет только «рабочим» в зависимости от того, сколько ядер у вас в вашем распоряжении. В принципе, даже если вы используете панель инструментов параллельной обработки, у вас не будет большого преимущества, поскольку она предназначена для параллелизации циклов. например, в генетическом алгоритме вы можете самостоятельно вычислить функцию затрат для каждого члена пула, таким образом, вы можете использовать панель инструментов. В алгоритмах, где одно исполнение цикла зависит от вычислений предыдущего цикла, вы не можете использовать панель инструментов.

Надеюсь, это поможет.

Смежные вопросы