параллельная / многопоточная дифференциальная эволюция в python - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь смоделировать биохимический процесс, и я структурировал свой вопрос как проблему оптимизации, которую я решаю, используя differential_evolution от scipy.
Пока все хорошо, я очень доволен реализациейупрощенной модели с 15-19 параметрами.
Я расширил модель и теперь, с 32 параметрами, занимает слишком много времени.Не совсем неожиданно, но все же проблема, отсюда и вопрос.

Я видел:
- почти идентичный вопрос для R Параллельная дифференциальная эволюция
- и githubвыпуск https://github.com/scipy/scipy/issues/4864 по теме

, но он хотел бы остаться в python (модель находится в конвейере python), и запрос на получение пока не привел к и официально принятому решению, хотя некоторыебыли предложены варианты.

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

Подводя итог:
- Есть ли в scipy какая-либо опция, позволяющая распараллелить diff_indeveral_evolution, которую я тупо пропустил?(Идеальное решение)
- Есть ли предложение для альтернативного алгоритма в scipy, который (или) быстрее в последовательном или можно распараллелить?
- Есть ли другой хороший пакет, который предлагает распараллеленные дифференциальные функции эволюции?Или другие применимые методы оптимизации?
- Проверка работоспособности: я перегружаю DE параметром 32 и мне нужно радикально изменить подход?

PS
Я биолог, формальная математика / статистика не работаютна самом деле моя сила, любой перевод с формулы на английский будет очень полезен:)

PPS
В качестве крайнего варианта я могу попытаться перейти на R, но я не могу написать C / C ++ илидругие языки.

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

Спасибо @ jp2011 за указание на pygmo

Во-первых, стоит отметить отличие от pygmo 1, поскольку первая ссылка в Google по-прежнему указывает на более старую версию.

Во-вторых, остров многопроцессорностидоступны только для python 3.4 +

В-третьих, все работает.Процессы, которые я начал, когда я впервые задал вопрос, все еще выполняются, пока я пишу, архипелаг pygmo проводит обширный тест всех 18 возможных вариантов DE, присутствующих в saDE, сделанных менее чем за 3 часа.Скомпилированная версия с использованием Numba, как предложено здесь https://esa.github.io/pagmo2/docs/python/tutorials/coding_udp_simple.html, вероятно, закончится еще раньше.Chapeau.

Лично я нахожу его немного менее интуитивным, чем версия scipy, учитывая необходимость создания нового класса (вместо функции signle в scipy) для определения проблемы, но, вероятно, это всего лишь личное предпочтение.Кроме того, мутация / пересечение параметров определены менее четко, для кого-то, кто приближается к DE в первый раз, может быть немного неясным.
Но, так как последовательный DE в scipy просто не сокращает его, добро пожаловать pygmo (2).

Кроме того, я обнаружил несколько других вариантов, утверждающих, что можно распараллелить DE.Я не проверял их сам, но мог бы быть полезен для кого-то, спотыкающегося в этом вопросе.

Утконос, сфокусированный на многообъективных эволюционных алгоритмах https://github.com/Project-Platypus/Platypus

Yabox
https://github.com/pablormier/yabox

от создателя Yabox подробное, но ИМХО кристально чистое объяснение DE https://pablormier.github.io/2017/09/05/a-tutorial-on-differential-evolution-with-python/

0 голосов
/ 15 июня 2018

У меня точно такая же проблема.Возможно, вы могли бы попробовать pygmo , который поддерживает различные алгоритмы оптимизации (включая DE) и имеет модель для параллельных вычислений.Тем не менее, я обнаружил, что сообщество не такое большое, как для скупых.Их учебники, документация и примеры хорошего качества, и из этого можно что-то сделать.

...