#python #optimization #genetic-algorithm
#python #оптимизация #genetic-algorithm
Вопрос:
Моя цель — применить GA для поиска оптимальных местоположений для размещения нескольких кругов (равного диаметра) в плоскости 2D таким образом, чтобы никакие два круга не были ближе определенного расстояния. Я учитываю ограничение близости, устанавливая для функции пригодности значение -1, если ограничение нарушено, но проблема в том, что ни одна из случайно сгенерированных начальных групп населения не соответствует ограничению близости, что делает пригодность всех членов -1.
Погуглив, я обнаружил, что если плоскость разделена на сетки с размером зазора, у меня не будет этой проблемы, но я боюсь, что это упустит много потенциальных решений. Есть ли способ включить ограничение близости или мне следует использовать сетку?
Комментарии:
1. Почему бы вам не изменить свою функцию пригодности, чтобы просто наложить штраф, пропорциональный числу, которое перекрывается? Предположительно, другая часть функции пригодности в целом использует больше кругов. Таким образом, будут различимы лучшие решения. Когда вы «пересекаете» решения, почти наверняка будут некоторые совпадения, поэтому вы могли бы также ввести пропорциональный штраф с большим весом, чем тот, который присваивается «хорошим» кругам.
2. Я пробовал это, но популяция никогда не выходит за пределы ограничения близости.
3. что означает «никогда не выходит»? Вы хотите сказать, что выполнение кода занимает много времени или что-то еще?
4. Я имел в виду, что он никогда не дает решения, в котором все круги находятся дальше, чем зазор.
Ответ №1:
Вместо простого случайного решения начните со случайного решения с ограничениями. Создайте один круг, затем найдите допустимое пространство для следующего круга, создайте второй круг и продолжайте, пока не сгенерируете целое поколение.
Комментарии:
1. Это решило мою проблему, но как нам убедиться, что дальнейшая эволюция не приведет к совокупности неосуществимых решений? предотвратит ли это встроенный механизм GA?