2

Я пишу параллельный генетический алгоритм в Matlab, в частности, генетический алгоритм двойного вида (DSGA) (более подробную информацию можно найти в this paper here), и у меня возникли проблемы с распараллеливанием части код.Распараллеливание генетического алгоритма в Matlab

Теперь я физик и математика, и я только начинаю с моего программирования, чтобы помочь с моими исследовательскими проектами. Я уже реализовал серийный генетический алгоритм в Matlab с несколько параллельной функцией фитнеса, но я заинтересован в реализации этого генетического алгоритма Dual Species.

Хорошо, так что вопрос: как я могу запустить 2 разных для петель, которые делают разные вещи на разных работниках Matlab? 2 для циклов будут иметь разные данные и другой код, но мне нужно, чтобы они работали одновременно. Я не думаю, что могу использовать парфорную петлю для этого. После прочтения документации для параллельного инструментария, похоже, что использование функции Single Program Multiple Data (spmd) может быть опцией? Я не уверен, что его лучший вариант будет действительно работать.

Любые советы будут оценены.

Спасибо.

ответ

0

Первым шагом является обертывание обеих петель в функции, что упрощает код. Затем создайте ячейку со всеми функциями, которые вы хотите оценить параллельно. Проверьте документацию на «дескриптор функции», если вы не понимаете синтаксис. Я использую некоторые фиктивные функции здесь:

jobs={@()exp(1),@()exp(2),@()sin(3)} 

Теперь вы можете легко оценить работу параллельно:

result=cell(size(jobs)) 
parfor ix=1:numel(jobs),result{ix}=jobs{ix}(), end 

Есть и другие решения, но я предпочитаю эту реализацию, так как тот же код может выполняться на ПК без параллельных вычислений (parfor интерпретируется как).

+0

Я предполагаю, что я действительно хочу выделить процессор или работника, чтобы оценить одну из популяций ГА и другого процессора или работника для оценки другого населения. –