1

ПроблемаСоответствующее кодирование с использованием Particle Swarm Optimization

Я делал немного исследований по оптимизации частиц Swarm, поэтому я сказал, что я положил его на тест.

Проблема, которую я пытаюсь решить, - проблема с сбалансированным разделением - или просто сводится к задаче Sumset Sum (где сумма составляет половину всех чисел).

кажется общую формулу для обновления скоростей для частиц

enter image description here

, но я не буду вдаваться в излишние подробности на этот вопрос.

Поскольку нет попытки 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).

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

Мой вопрос

ли я кодирующая проблему и обновляя частицы «скорости» в умный способ?

Есть ли способ определить, будет ли это сходиться правильно?

Есть ли ресурс, который я могу использовать, чтобы узнать, как создавать конвергентные формулы «обновления» для конкретных проблемных пространств?

Большое спасибо!

ответ

1

Кодирование

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

Концепция

Ваша концептуальная проблема с уравнением, потому что ваша проблема пространства является дискретной решетки граф, который не поддается сразу на этапе обновления. Например, если вы хотите получить более тонкую детализацию, регулируя скорость обучения, вы обычно уменьшаете ее на небольшой коэффициент (скажем, 3). В этом пространстве, что значит делать шаги только на 1/3? Вот почему у вас проблемы.

Основная возможность, которую я вижу, состоит в том, чтобы создать в 3 раза больше частиц, но затем все вероятности перехода будут разделены на 3. Это все еще не очень хорошо удовлетворяет, но оно действительно имитирует процесс несколько прилично.

дискретно

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

Вместо этого вы используете функцию ошибки на основе расчетного расстояния до решения. Легким является вычесть общее количество частиц с более близкого к 7 или 8. Более сложным является оценка расстояния на основе этой разности и элементов частиц «в игре».

Доказательство сходимости

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

Создание обновления формул

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

Дополнительные рекомендации

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

+0

Спасибо, какой прекрасный подробный ответ! У меня всего несколько вопросов: Wrt the error function, могу ли я руководствоваться моделью, говоря: если ошибка меньше предыдущей, вернитесь назад? В этом случае функция ошибки не является частью формулы обновления? Кроме того, когда вы говорите - «оценивайте расстояние, основанное на этой разности и элементах частиц» в игре «.», Означает ли это фактор того, насколько близка частица к решению, а также проверяется потенциал, основанный на том, какие числа остаются в набор?Я немного запутался здесь –

+0

(1) Да, если вы сделаете эту проверку, функция ошибки станет частью обновления, а не рекомендацией по векторизации. Функция соответствует градиенту в методе Ньютона или градиентном спуске. (2) Да, функция/градиент ошибки должна быть эвристической (угадывающей), которая подсказывает, где находится решение, исходя из информации, доступной локально. Допустимо использовать как разность (сумма элементов по сравнению с 7 или 8), так и потенциал остальных членов. Это позволит быстро решить проблему с образцом, но вы увидите эффект с большим набором входных данных. – Prune

+0

Большое спасибо! –