Здесь три подхода, каждый из которых включает в себя сокращение SAT до его двумерного геометрического языка: неграммы логические головоломки. Ячейки в логической головоломке соответствуют переменным SAT, ограничениям на предложения.
Для полного объяснения (и, пожалуйста, просмотрите мой код на предмет ошибок!), Я уже опубликовал некоторое представление о шаблонах в пространстве решений неграммы. См. Https://codereview.stackexchange.com/questions/43770/nonogram-puzzle-solution-space, Перечисление> 4 миллиардов решений головоломок и их кодирование, чтобы они поместились в таблицу истинности, показывает фрактальные паттерны - самоподобие и, особенно, родство. Эта аффинная избыточность демонстрирует структуру проблемы, которую можно использовать для уменьшения вычислительных ресурсов, необходимых для генерации решений. Это также показывает необходимость хаотической обратной связи в любом успешном алгоритме. Существует объяснительная сила в поведении фазового перехода, где «легкие» экземпляры - это те, которые лежат вдоль грубой структуры, в то время как «жесткие» экземпляры требуют дальнейшей итерации в мелкие детали, совершенно скрытые от обычной эвристики. Если вы хотите увеличить угол этого бесконечного изображения (все <= 4x4 закодированные экземпляры головоломки), см. Http://re-curse.github.io/visualizing-intractability/nonograms_zoom/nonograms.html.
Метод 1. Экстраполируйте тень пространства решения неограммы, используя хаотические карты и машинное обучение (продумайте функции подбора, аналогичные тем, которые генерируют множество Мандельброта).
Вот наглядное доказательство индукции. Если вы можете отсканировать эти четыре изображения слева направо и подумать, что у вас есть хорошая идея сгенерировать недостающие 5-е ... 6-е ... и т. Д. Изображения, то я только что запрограммировал вас как своего оракула NP для решения проблемы неграмового решения. существование. Пожалуйста, сделайте шаг вперед, чтобы получить свой приз как самый мощный суперкомпьютер в мире. Время от времени я буду кормить вас электричеством, пока мир благодарит вас за ваш вычислительный вклад.
Способ 2. Используйте преобразования Фурье на булевой версии изображения входов. БПФ предоставляют глобальную информацию о частоте и положении в экземпляре. В то время как часть величины должна быть одинаковой между входной парой, их фазовая информация совершенно другая - содержащая направленную информацию о проекции решения вдоль конкретной оси. Если вы достаточно умны, вы можете восстановить фазовое изображение решения с помощью некоторой специальной суперпозиции входных фазовых изображений. Затем обратное преобразование фазы и общей величины обратно во временную область решения.
Что может объяснить этот метод? Существует много перестановок булевых изображений с гибким заполнением между непрерывными сериями. Это позволяет сопоставлять решение input ->, заботясь о множественности, при этом сохраняя свойство FFT двунаправленных, уникальных отображений между временной областью <-> (частота, фаза). Это также означает, что нет такого понятия, как «нет решения». То, что он сказал бы, - то, что в непрерывном случае есть решения в градациях серого, которые Вы не рассматриваете, смотря на двухуровневое изображение традиционного решения головоломки неграммы.
Почему бы тебе не сделать это? Это ужасный способ на самом деле вычислить, так как БПФ в современном мире с плавающей запятой было бы очень неточно с большими экземплярами. Точность является огромной проблемой, и реконструкция изображений по квантованным величинам и фазовым изображениям обычно создает очень приблизительные решения, хотя, возможно, не визуально для порогов человеческого глаза. Также очень сложно придумать этот суперпозиционный бизнес, так как тип функции, фактически выполняющей его, в настоящее время неизвестен. Будет ли это простая схема усреднения? Наверное, нет, и нет особого метода поиска, кроме интуиции.
Метод 3. Найти правило клеточных автоматов (из возможных ~ 4 миллиардов таблиц правил для правил двух состояний фон Неймана), которое решает симметричную версию головоломки неграммы. Вы используете прямое встраивание проблемы в ячейки, показанные здесь.
Это, вероятно, самый элегантный метод с точки зрения простоты и хороших эффектов для будущего вычислительной техники. Существование этого правила не доказано, но я догадываюсь, что оно существует. Вот почему:
Nonograms требуют много хаотической обратной связи в алгоритме, чтобы быть точно решенным. Это установлено кодом перебора, связанным с Обзором кода. CA - почти самый способный язык для программирования хаотической обратной связи.
Это выглядит правильно, визуально. Правило будет развиваться путем встраивания, распространять информацию по горизонтали и вертикали, вмешиваться, а затем стабилизироваться до решения, которое сохранит количество заданных ячеек. Этот путь распространения идет по пути (назад), о котором вы обычно думаете, проецируя тень физического объекта в исходную конфигурацию. Nonograms происходит из особого случая дискретной томографии, так что представьте себе, что вы сидите одновременно в двух сканерах компьютерной томографии в углах котла ... именно так рентгеновские лучи будут распространяться для создания медицинских изображений. Конечно, существуют пограничные проблемы - границы вселенной CA не могут продолжать распространять информацию за пределами границ, если вы не разрешите использование тороидальной вселенной. Это также создает загадку как периодическую краевую задачу.
Это объясняет множественные решения как переходные состояния в непрерывно колеблющемся эффекте между заменой выходов в качестве входов и наоборот. Это объясняет случаи, которые не имеют решения, как оригинальные конфигурации, которые не сохраняют количество установленных ячеек. В зависимости от фактического результата нахождения такого правила, он может даже приблизительно неразрешимые случаи с близким решением , где клеточные состояния являются законсервированными.