Я работаю над крупным проектом по оптимизации энергосистем в Python, где я оптимизирую 6 параметров управления системой с помощью метода защиты от частиц (PSO).Я изо всех сил пытаюсь найти пакет PSO, который действительно может делать то, что мне нужно.В настоящее время я использую пакет 'pyswarm'.
В моей задаче есть 6 управляющих переменных, и у нее есть ограничения, помимо основной целевой функции.Функция «цель / фитнес» рассчитывается во внешнем симуляторе, поэтому каждый раз, когда тестируется новая частица, программа сима открывается, запускается, данные экспортируются, а затем импортируются в Python.Это ~ 16-секундный процесс для каждого теста роя с использованием размера роя 20. Таким образом, при обычной оптимизации 1000 итераций для оптимизации требуется 16000 секунд, или 4,4 часа.У меня есть 450 сценариев для оптимизации, что займет 82 дня по текущему курсу.Очевидно, что сокращение итераций ускорит процесс, но в некоторых сценариях потребуется некоторое время, чтобы сходиться, поэтому я хотел бы сохранить итерации высокими, если это возможно.
Все реализации PSO, которые я пробовал, генерировали новые частицы в виде чисел с плавающей запятой с разрешением 6+.Поскольку я оптимизирую параметры в физической системе, мне нужны результаты с точностью до 2 десятичных знаков.
Чтобы ускорить оптимизацию, я хочу использовать пакет PSO, в котором вы можете установить разрешение частиц, т.е. только пробовать значения с двумя десятичными знаками.Я полагаю, что это должно сделать все намного быстрее, так как диапазон возможных значений значительно уменьшается.Я использовал pyswarms, pyswarm и psopy, но не нашел ни одного пакета, который мог бы сделать это.Кто-нибудь знает, как я мог это реализовать?Я не собираюсь писать свою собственную реализацию PSO, просто использовать существующий пакет.
РЕДАКТИРОВАТЬ: Для пояснения, моя логика заключается в том, что в настоящее время pyswarm генерирует значения с плавающей точкой для частиц с разрешением 6 десятичных знаков, поэтомудля частицы с ограниченным диапазоном 20 существует 20 миллионов возможных значений.Если бы генерация частиц была ограничена двумя десятичными знаками, для этой же частицы было бы только 2000 возможных значений.Если использовать рой размером 20, это означает, что на 100 итерациях каждое возможное значение для этой частицы было бы проверено, поэтому решение, скорее всего, будет сходиться гораздо быстрее, чем за 100 итераций (хотя это предполагает наличие уникальных значений при каждом обновлении частицы, чтоЯ не верю, что это всегда так).
Это предположение верно или моя логика здесь ошибочна?