Расчет скорости и обновление положения для частицы в алгоритме оптимизации роя частиц с определенными ограничениями - PullRequest
0 голосов
/ 05 апреля 2020

Я должен использовать алгоритм оптимизации роя частиц для назначения, в котором частицы представлены матрицами с целочисленными элементами - каждая строка представляет собой перестановку целых чисел от 1 до N (N - размер матрицы).

Формула, которую я использую для обновления частицы, является стандартной (я думаю?) (Я использую Python)

w - коэффициент инерции

c1 - коэффициент когнитивного обучения

c2 - коэффициент социального обучения

r1, r2 - 2 случайно сгенерированных числа из (0, 1)

new_velocity = w * position + r1 * c1 * (personal_best - position) + r2 * c2 * (neighborhood_best - position)
position = position + new_velocity

Так что position, personal_best и neighborhood_best - это все матрицы NxN перестановок, такие как:

[1, 3, 2]
[2, 1, 3]
[2, 3, 1]

Проблема, с которой я сталкиваюсь, заключается в том, что полученные результаты не соответствуют Стандарты решения. Идеальными решениями являются матрицы, для которых столбцы также образуют перестановки, и на этом основана функция пригодности для частицы (+1 для каждого столбца, который является перестановкой). Так что проблема в том, что, поскольку я использую числа с плавающей точкой между (0, 1) для w, c1, c2, мои решения больше не являются перестановками, а представляют собой реальные числа, которые плавают вокруг перестановки.

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

Так есть идеи, как я могу изменить фитнес-функцию? Должен ли я просто округлять текущую позицию вверх / вниз всякий раз, когда я вычисляю фитнес? Или этот метод обновления стоит продолжать вообще? Как еще можно получить матрицу скоростей, которая учитывает эти ограничения?

...