Это правильный путь к go, чтобы ускорить проблему калибровки моей модели? Или я должен использовать острова и архипелаги? Если я правильно понял, острова в архипелаге go не общаются друг с другом, верно? Так, если кто-то выполняет, например, Оптимизацию роя частиц и хочет оценивать несколько вызовов целевых функций одновременно (параллельно), тогда оценщик пригодности партии является правильным выбором?
В pagmo есть 2 режима распараллеливания, модель островков (т. е. крупнозернистое распараллеливание) и механизм BFE (т. е. мелкозернистое распараллеливание).
Модель островков работает с любой комбинацией задачи / алгоритма и основана на идее множественного оптимизации выполняются параллельно при обмене информацией для ускорения глобального сближения с решением.
Механизм BFE вместо этого распараллеливает оптимизацию single , и для его работы требуется явная поддержка в решателе. , В настоящее время в Pagmo только немногие решатели могут воспользоваться преимуществами машин BFE. Механизм BFE также можно использовать для распараллеливания инициализации группы людей, что может быть полезно, если ваша функция физической формы особенно тяжелая.
Какой метод распараллеливания вам больше всего подходит, зависит от свойств вашей проблемы. По моему опыту, пользователи склонны предпочитать механизм BFE (мелкозернистое распараллеливание), если функция пригодности очень тяжелая (например, для вычисления требуются минуты или более), потому что в такой ситуации оценки пригодности настолько дороги, что для Воспользовавшись моделью острова, придется ждать слишком долго. BFE также в некотором смысле легче понять, потому что вам не нужно углубляться в детали архипелагов, топологий и т. Д. c. С другой стороны, BFE работает только с определенными решателями (хотя с течением времени мы пытаемся расширить поддержку BFE для других решателей).
Как использовать оценку пригодности партии? (Я знаю, что это новая возможность PyGMO, и они все еще работают над документацией ...) Кто-нибудь может привести минимальный пример того, как это реализовать?
Один из способов использования BFE - это что вы сделали в своем примере, т. е. с помощью реализации метода batch_fitness()
в вашей задаче. Тем не менее, я бы предложил закомментировать метод batch_fitness()
и попробовать использовать один из универсальных оценщиков пригодности для партии, предоставляемых с pagmo. Самый простой способ - создать экземпляр класса bfe
по умолчанию и передать его одному из алгоритмов, которые могут использовать механизм BFE. Одним из таких алгоритмов является nspso:
https://esa.github.io/pygmo2/algorithms.html#pygmo .nspso
Итак, что-то вроде этого:
b = pg.bfe() # Construct a default BFE
uda = pg.nspso(gen = gen_size) # Construct the algorithm
uda.set_bfe(b) # Tell the UDA to use the BFE machinery
algo = pg.algorithm(uda) # Construct a pg.algorithm from the UDA
new_pop = algo.evolve(pop) # Evolve the population
Это должно использовать несколько процессов для параллельно оцените свои фитнес-функции в рамках алгоритма nspso l oop.
Если вам нужна дополнительная помощь, пожалуйста, зайдите в нашу общедоступную чат-комнату для пользователей / 1044 *, где вам следует обратиться за помощью. быстро (обычно):
https://gitter.im/pagmo2/Lobby