Оптимизация роя частиц с ограниченным разрешением частиц - PullRequest
0 голосов
/ 27 сентября 2019

Я работаю над крупным проектом по оптимизации энергосистем в 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 итераций (хотя это предполагает наличие уникальных значений при каждом обновлении частицы, чтоЯ не верю, что это всегда так).

Это предположение верно или моя логика здесь ошибочна?

1 Ответ

0 голосов
/ 27 сентября 2019

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

Скажем, каждая частица может представлять 2000 различных возможных значений для каждая управляющая переменная, это 2000^6 или 6.4 * 10^19 (это большое) возможные комбинации параметров для каждой частицы для представления.Я не думаю, что вы, вероятно, будете исчерпывающе искать весь этот диапазон (см. Последний раздел).

Все это означает, что ваши частицы с низким разрешением могут не прийти к идеальному решению, но вы, вероятно,не будет слишком сильно ограничен разрешением частиц для окончательного исполнения.Гораздо более вероятно, что вы встретитесь с каким-то локальным минимумом в таком большом пространстве поиска;Я сомневаюсь, что потерянное разрешение для каждой частицы будет иметь слишком большое значение.

Исчерпывающий поиск

На самом деле, большие числа - это весело!Сколько времени потребуется для поиска всего этого пространства параметров?Допустим, вы смогли ускорить время оценки в 1000 раз, поэтому для обработки каждого роя требуется всего 0,016 секунды.Это 20 предположений на 0,016 секунды или 0,0008 секунд (800 долларов США) на каждое предположение.Это все еще 5.12e16 секунд или 1,6 триллионов лет, чтобы исчерпывающе обыскать пространство.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...