ПроблемаСоответствующее кодирование с использованием Particle Swarm Optimization
Я делал немного исследований по оптимизации частиц Swarm, поэтому я сказал, что я положил его на тест.
Проблема, которую я пытаюсь решить, - проблема с сбалансированным разделением - или просто сводится к задаче Sumset Sum (где сумма составляет половину всех чисел).
кажется общую формулу для обновления скоростей для частиц
, но я не буду вдаваться в излишние подробности на этот вопрос.
Поскольку нет попытки PSO в Интернете для проблемы с подмножеством, я вместо этого рассмотрел проблему с Traveling Salesman.
Они подходят для обновления скоростей, связанных с захватом множества посещенных городов, вычитанием одного из другого и выполнением некоторых манипуляций.
Я не видел никакой связи между этим и формулой выше.
Мой подход
Так я слом формулу и попробовал свой собственный подход к проблеме подмножества Sum.
В основном я использовал gbest
и pbest
, чтобы определить вероятность удаления или добавления определенного элемента в подмножество.
т.е. - если моя проблема пространства [1,2,3,4,5]
(цель 7
или 8
), и мой ток частиц (подмножество) имеет [1,None,3,None,None]
, а gbest
является [None,2,3,None,None]
, то существует высокая вероятность поддержания 3
, добавляя 2
и удаление 1
, на основе gbest
Я могу написать код, но не думаю, что это необходимо, вы получаете идею (я использую python btw - следовательно, None
).
В основном это работало до некоторой степени, я получил достойные решения, но на больших наборах данных и их значениях было очень медленно.
Мой вопрос
ли я кодирующая проблему и обновляя частицы «скорости» в умный способ?
Есть ли способ определить, будет ли это сходиться правильно?
Есть ли ресурс, который я могу использовать, чтобы узнать, как создавать конвергентные формулы «обновления» для конкретных проблемных пространств?
Большое спасибо!
Спасибо, какой прекрасный подробный ответ! У меня всего несколько вопросов: Wrt the error function, могу ли я руководствоваться моделью, говоря: если ошибка меньше предыдущей, вернитесь назад? В этом случае функция ошибки не является частью формулы обновления? Кроме того, когда вы говорите - «оценивайте расстояние, основанное на этой разности и элементах частиц» в игре «.», Означает ли это фактор того, насколько близка частица к решению, а также проверяется потенциал, основанный на том, какие числа остаются в набор?Я немного запутался здесь –
(1) Да, если вы сделаете эту проверку, функция ошибки станет частью обновления, а не рекомендацией по векторизации. Функция соответствует градиенту в методе Ньютона или градиентном спуске. (2) Да, функция/градиент ошибки должна быть эвристической (угадывающей), которая подсказывает, где находится решение, исходя из информации, доступной локально. Допустимо использовать как разность (сумма элементов по сравнению с 7 или 8), так и потенциал остальных членов. Это позволит быстро решить проблему с образцом, но вы увидите эффект с большим набором входных данных. – Prune
Большое спасибо! –