Я снова прочитал вопрос и понял, что полностью пропустил пару ключевых моментов в вашем посте. Картина смутила меня, но это не очень хорошее оправдание. Мое предыдущее предложение в комментариях было абсолютно плохим. Извините, и я надеюсь, вы не отправили много времени на это. Если бы мне пришлось решить эту проблему, я бы это сделал, правильно или неправильно.
Так что я думал об этой проблеме. Лучшее решение, о котором я могу думать, - использовать алгоритм поиска, такой как A *. A * его сам это довольно просто реализовать. Я предполагаю, что у вас уже есть метод расчета площади, которая мне кажется самой сложной. У меня есть идея, как я буду продолжать вычислять область перекрывающихся прямоугольников, но это причина, по которой я не писал программу, которая могла бы доказать, что мое предложение является хорошим.
Что бы я сделал, это иметь главный список всех потенциальных прямоугольников. Добавьте к своей границе копию всех прямоугольников, не находящихся в текущем пути, в качестве размещенного n-го прямоугольника. Это позволит вам установить ширину и, следовательно, рассчитать площадь круга, которую нужно заполнить. Сохраняя это, каждый раз выбирая путь с самой низкой стоимостью от границы, и после того, как будут исследованы узлы m, вы должны иметь наилучшее соответствие. Где m - общее количество прямоугольников, которые вы должны разместить.
Для оценки стоимости использование объема пространства для заполнения кажется естественным выбором. Одна вещь, чтобы отметить, однако, заключается в том, что площадь слева уменьшается с течением времени, и вам понадобится тот, который увеличивается. Я бы подумал, что разделение области, оставшейся на оставшееся количество прямоугольников, должно дать вам хорошую функцию затрат для поиска пути с наименьшей стоимостью до наименьшей площади, оставшейся в круге. Это звучит хорошо для меня, но я уверен, что есть и другие, которые можно использовать.
В отношении эвристики, без эвристической функции, у вас все еще есть лучший первый поиск, поэтому я ожидаю, что он будет работать лучше, чем метод слепой грубой силы. Имея хорошую эвристическую функцию, я ожидаю, что производительность значительно возрастет. Если подумать о том, что сделало бы хорошую эвристическую функцию, я подумал, что оценка количества круга, заполненного прямоугольником, может работать хорошо. Например, 10% площади прямоугольника делится на количество прямоугольников, оставшихся для размещения. Поскольку нет заранее заданного состояния цели, любая оценка должна основываться исключительно на области следующего прямоугольника. Мы знаем, что полная площадь прямоугольника не будет способствовать решению проблемы. Большинство каждого прямоугольника после первого пустого пространства, насколько решение идет, как я пришел с эвристикой. Как и функция стоимости, мне кажется разумной идеей, но если кто-то может подумать о лучшем, тем лучше.
Есть все виды сайтов на A *, но вот один, который выглядит хорошо написанным.http://web.mit.edu/eranki/www/tutorials/search/
Я надеюсь, что это поможет вам.
Вопрос не совсем ясен для меня. Ваш пример показывает, что части прямоугольников разрешены вне круга. Это так? Определены ли границы прямоугольников каким-то образом? В какой-то момент вы упоминали число исправлений прямоугольников, но я не вижу этого в вашем примере? –
Прямоугольники теперь могут выйти наружу, когда я нарисовал их, они просто немного побольше. Толщина каждого прямоугольника зависит от его длины, как я объяснил внизу. Количество прямоугольников, диаметр круга задано пользователем, так как для алгоритма вы можете считать его фиксированным, то есть: n, а длины прямоугольников - только с шагом 5. – Tyranicangel
Какой-то парень предложил мне использовать дискретный анализ. Однако я мало узнал о том, как подойти к проблема – Tyranicangel