chincharovpc
@chincharovpc

Расстановка элементов на плате. Как реализовать с помощью генетических алгоритмов?

Есть элементы, у которых известны (Высота, Ширина).
Есть матрица связей(Какие элементы между собой связаны и количество связей)

Ниже приведен пример:

5e557bd15ba34874613963.png

Нужно эти элементы разместить на плате с помощью Генетического алгоритма.

Ниже приведен пример:
5e557ca1c7dda063929458.png

Пока я делаю так:
1)Берем элемент, у которого больше всех связей и Размещаем на плате
2)Берем элемент у которого больше всех связей с размещенными
3) И так до конца

Размещение идет таким образом:
Рассматриваем все клетки и ищем оптимальную клетку(совпадающий с левым верхним углом жлемента) для размещения очередного элемента.

А теперь нужно с помощью Генетического алгоритма.
  • Вопрос задан
  • 155 просмотров
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Начинать надо с соотношения сторон.
Это цель алгоритма.
Затем, нужно раскидать в 2 кучки произвольные элементы (начиная с самых крупных по размеру!), максимально приближаясь к цели (пропорции сторон платы).
Затем, начинаете менять местами (swap) те элементы разных кучек, которые дадут ещё большее приближение к цели, и так до тех пор, пока оптимизация станет невозможна.
Останавливаете алгоритм и получаете размещение с помощью ГА.
Ответ написан
@imageman
Генетическим алгоритмом примерно так:
Сначала Разрабатываем способ кодировки. Например [Номер элемента, координаты, расположение].

Запускаем алгоритм, и он выдает кучку чисел "генетического кода", который мы превращаем в фетотип: на пустую плату последовательно помещяем все [Номер элемента, координаты, расположение].

Пытаемся соединить в нужном порядке все элементы.

После этого считаем коллизии: пересечения элементов (не хватило места), недопустимые пересечения связей и т.п. баги. В качестве ответа для ГА выдается число коллизий данного генома. Алгоритм пытается найти такую последовательность, что бы коллизий были меньше (разные коллизии могут иметь разные веса).

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

Войдите, чтобы написать ответ

Похожие вопросы