Я пытаюсь найти решение вариации классической задачи 2D-упаковки - нечто похожее на этот вопрос .
Учитывая произвольный многоугольник P и фразу W , я хочу «упаковать» буквы W в P , используя перенос, масштабирование и поворот на 90 градусов, так что:
Некоторые примеры того, чего я пытаюсь достичь:
Я начал создавать генетический алгоритм, чтобы попытаться решить эту проблему, который использует следующий подход:
256x256
; 26 * длина (W)
бит) ; n
букв из A и длины (W) - n
букв из B ; 1/26
; В настоящее время алгоритм запущен и работает и находит решения, хотя они еще не особенно хороши, поскольку функция приспособленности не учитывает перекрытие букв или ограничение удобочитаемости.
Это также довольно медленно, так как оценка пригодности требует большого количества геометрических вычислений (я пишу алгоритм на Ruby, но использую расширение C для геометрического материала). Я рассматриваю возможность использования нейронной сети (или, возможно, SVM) для генерации оценок пригодности в соответствии с идеями, изложенными в этой статье и этой статье .
У меня есть пара вопросов о том, что я сделал до сих пор:
Во-первых, имеет ли смысл общий подход? Очевидно, что большая часть работы и времени вычислений будет связана с настройкой фитнес-функции, но прежде чем я перейду к деталям, я хочу проверить, что я двигаюсь в правильном направлении, и нет другого метода, который мог бы решить эту проблему. лучше.
Как я могу сформулировать функцию приспособленности, чтобы учесть ограничение порядка букв / удобочитаемости?
Могу ли я внести какие-либо оптимизации в функцию приспособленности, чтобы увеличить количество поколений, которые я могу реально вычислить?
Любое другое идеи или советы также были бы очень признательны. Я прочитал большинство существующих вопросов SO по аналогичным темам и прочитал ряд статей по этой теме, но не нашел ничего, что конкретно касалось бы упаковки текста.
Спасибо!