|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Даже миллион успешных решений для небольших N говорит лишь о том, что вы, возможно, на правильном пути. Например, срезали у экспоненты M степеней. Это здорово, но этого мало. Мы видимо так и будем тут говорить о разном ) Нет там экспоненты вообще. Откройте уже исходный код и убедитесь. Две страницы текста всего. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 14:10 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Верблюд Aleksandr Sharahov Даже миллион успешных решений для небольших N говорит лишь о том, что вы, возможно, на правильном пути. Например, срезали у экспоненты M степеней. Это здорово, но этого мало. Мы видимо так и будем тут говорить о разном ) Нет там экспоненты вообще. Откройте уже исходный код и убедитесь. Две страницы текста всего. Открыл. Убедился. Вы гарантируете, что при любом N единственный вызов функции IsSatisfable дает окончательный ответ и не придется ничего "дорешивать" и перепроверять? Если ответ "да", то поздравляю. Если ответ "в редких случаях надо еще...", то сами понимаете. Интересуют ложноположительные срабатывания. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 14:31 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Верблюд, Я правильно понимаю, что на всех примерах и каталога samples нет ложноположительных срабатываний? Еще стоит присмотреться к тому примеру, о котором вы писали, что не все назначения из допустимой с точки зрения решателя суперпозиции давали положительный результат. Можно попробовать добавить в этот пример несколько условий с целью отсечь назначения, дающие положительный результат, и оставить только ложноположительный. Можно попробовать сделать это не прямо, а при помощи произведения с симметричной КНФ (с перенумерованными переменными). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 15:07 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Верблюд 20 переменных 50 переменных если кто-то будет утверждать, что тут есть экспоненциальная сложность. Есть же исходники на гитхабе, там текста на две страницы всего. Проверить, что бесконечных циклов нет, проблемы не должно быть. Покажите графики с ассимптотикой здесь. Там 2 страницы, а здесь уже 3-я стр., а тех двух здесь всё ещё нет. Что означает "проверить"? бесконечные циклы - вопрос на стороне программиста, при чём здесь беск. циклы? Экспоненциальной может и не быть для некоторого подмножества данных. У Usov'а тоже старый ноут, и ничего, долго - на ночь можно. Графики убеждают лучше, чем ля-ля. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 15:40 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Верблюд пропущено... Мы видимо так и будем тут говорить о разном ) Нет там экспоненты вообще. Откройте уже исходный код и убедитесь. Две страницы текста всего. Открыл. Убедился. Вы гарантируете, что при любом N единственный вызов функции IsSatisfable дает окончательный ответ и не придется ничего "дорешивать" и перепроверять? Если ответ "да", то поздравляю. Если ответ "в редких случаях надо еще...", то сами понимаете. Интересуют ложноположительные срабатывания. Дорешивать придется. Есть пример, на котором алгоритм всегда выдает ложноположительный ответ. Особый случай КНФ, в котором алгоритм не может разрешить две или более невыполнимых циклических зависимости, взаимоотрицающих друг друга. В разделе samples лежит файл Mikhail_unsat.cnf , содержащий восемь таких циклов. Как найти и разрешить такие зависимости я вполне представляю и сейчас занимаюсь алгоритмом этой проблемы. Других вариантов ложноположительных ответов не существует. Уже написана большая часть формального доказательства работы алгоритма, в котором подробно рассматривается это исключение. Так же есть доказательство того, что невозможно получить ложноотрицательное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 16:46 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
exp98 Там 2 страницы, а здесь уже 3-я стр., а тех двух здесь всё ещё нет. Вы серьезно? Может мне сюда проект весь выложить в отдельную тему специально для тех, кто не увидел тут ссылки на проект github? Думаю модераторы будут очень рады такому. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 16:48 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Верблюд Aleksandr Sharahov пропущено... Открыл. Убедился. Вы гарантируете, что при любом N единственный вызов функции IsSatisfable дает окончательный ответ и не придется ничего "дорешивать" и перепроверять? Если ответ "да", то поздравляю. Если ответ "в редких случаях надо еще...", то сами понимаете. Интересуют ложноположительные срабатывания. Дорешивать придется. Есть пример, на котором алгоритм всегда выдает ложноположительный ответ. Особый случай КНФ, в котором алгоритм не может разрешить две или более невыполнимых циклических зависимости, взаимоотрицающих друг друга. В разделе samples лежит файл Mikhail_unsat.cnt, содержащий восемь таких циклов. Как найти и разрешить такие зависимости я вполне представляю и сейчас занимаюсь алгоритмом этой проблемы. Других вариантов ложноположительных ответов не существует. Уже написана большая часть формального доказательства работы алгоритма, в котором подробно рассматривается это исключение. Дорешивание - это и есть экспонента. > Других вариантов ложноположительных ответов не существует Откуда вы это знаете. Может, просто другие варианты вам не попадались. В общем, это надо доказать, или дорешивать придется всегда. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 16:52 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov это надо доказать, или дорешивать придется всегда. Согласен. После моего алгоритма в случае положительного ответа придется запускать алгоритм или получения всех ответов - он экспоненциальный, так как решение может содержать все 2 n возможных решений, но может быть выгоден, если количество оставшихся "в живых" состояний крайне мало и соответственно решений тоже очень мало, или алгоритм с построением направленного графа таких зависимостей, он неприятный, требует дополнительно N 6 памяти и работает соответственно не меньше чем за N 6 времени, хотя на фоне общего времени получения решения N 10 его стоимость мала. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 16:58 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Верблюд Aleksandr Sharahov это надо доказать, или дорешивать придется всегда. Согласен. После моего алгоритма в случае положительного ответа придется запускать алгоритм или получения всех ответов - он экспоненциальный, так как решение может содержать все 2 n возможных решений, но может быть выгоден, если количество оставшихся "в живых" состояний крайне мало и соответственно решений тоже очень мало, или алгоритм с построением направленного графа таких зависимостей, он неприятный, требует дополнительно N 6 памяти и работает соответственно не меньше чем за N 6 времени, хотя на фоне общего времени получения решения N 10 его стоимость мала. N^6 по памяти - это проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 17:16 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov, Есть пока только гипотеза, что исследовать нужно не только пространство возможных решений, но и пространство нулей - тех состояний которые были выкинуты на этапе работы алгоритма консенсуса. Если среди них есть циклические зависимости, то вероятно они являются отражением наших циклов на область нулей. Плюс такого подхода в том, что при ложноположительном результате в области нулей практически отсутствуют состояния, что значительно сокращает пространство поиска такой зависимости. Например со случаем файла mikhail_unsat в пространство нулей кроме самой КНФ вобще ничего не попадает. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 17:22 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Верблюд Aleksandr Sharahov, Есть пока только гипотеза, что исследовать нужно не только пространство возможных решений, но и пространство нулей - тех состояний которые были выкинуты на этапе работы алгоритма консенсуса. Если среди них есть циклические зависимости, то вероятно они являются отражением наших циклов на область нулей. Плюс такого подхода в том, что при ложноположительном результате в области нулей практически отсутствуют состояния, что значительно сокращает пространство поиска такой зависимости. Например со случаем файла mikhail_unsat в пространство нулей кроме самой КНФ вобще ничего не попадает. Что мешает домножить файл mikhail_unsat на КНФ с сотней других переменных, которая имеет решение и кучу нулей. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 17:51 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Верблюд Aleksandr Sharahov, Есть пока только гипотеза, что исследовать нужно не только пространство возможных решений, но и пространство нулей - тех состояний которые были выкинуты на этапе работы алгоритма консенсуса. Если среди них есть циклические зависимости, то вероятно они являются отражением наших циклов на область нулей. Плюс такого подхода в том, что при ложноположительном результате в области нулей практически отсутствуют состояния, что значительно сокращает пространство поиска такой зависимости. Например со случаем файла mikhail_unsat в пространство нулей кроме самой КНФ вобще ничего не попадает. Что мешает домножить файл mikhail_unsat на КНФ с сотней других переменных, которая имеет решение и кучу нулей. Вообще в конце можно попытаться построить хотя бы одно решение, тогда получим конкретный вектор, указывающий на конфликт, рассматриваем этот вектор и убиваем конфликт. Проблема может быть в том, что число таких конфликтов конечно конечно, но я не готов сейчас назвать даже порядок ) Проблема еще и в том, что на данный момент я даже не знаю, влияет ли такой конфликт на всё решение сразу или только на часть возможных решений. Если он влияет только на часть возможных решений, то способ с построением конкретного решения может стать экспоненциальным. Например, имеется одно решение и 2^n -1 конфликтующих. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 18:02 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Верблюд Aleksandr Sharahov пропущено... Что мешает домножить файл mikhail_unsat на КНФ с сотней других переменных, которая имеет решение и кучу нулей. Вообще в конце можно попытаться построить хотя бы одно решение, тогда получим конкретный вектор, указывающий на конфликт, рассматриваем этот вектор и убиваем конфликт. Проблема может быть в том, что число таких конфликтов конечно конечно, но я не готов сейчас назвать даже порядок ) Проблема еще и в том, что на данный момент я даже не знаю, влияет ли такой конфликт на всё решение сразу или только на часть возможных решений. Если он влияет только на часть возможных решений, то способ с построением конкретного решения может стать экспоненциальным. Например, имеется одно решение и 2^n -1 конфликтующих. Решатели так и делают. Расщепляют по наиболее популярной переменной и упрощают. Тут сразу рекурсия вырисовывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 18:14 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Верблюд пропущено... Вообще в конце можно попытаться построить хотя бы одно решение, тогда получим конкретный вектор, указывающий на конфликт, рассматриваем этот вектор и убиваем конфликт. Проблема может быть в том, что число таких конфликтов конечно конечно, но я не готов сейчас назвать даже порядок ) Проблема еще и в том, что на данный момент я даже не знаю, влияет ли такой конфликт на всё решение сразу или только на часть возможных решений. Если он влияет только на часть возможных решений, то способ с построением конкретного решения может стать экспоненциальным. Например, имеется одно решение и 2^n -1 конфликтующих. Решатели так и делают. Расщепляют по наиболее популярной переменной и упрощают. Тут сразу рекурсия вырисовывается. Интересно, да, если имеет место расщепление по какой-то переменной, то сумма всех нулевых векторов в обоих половинах не может превышать сумму таких векторов в общем решении. Но я не уверен, что это нам что-то даёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 18:22 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Верблюд Aleksandr Sharahov пропущено... Решатели так и делают. Расщепляют по наиболее популярной переменной и упрощают. Тут сразу рекурсия вырисовывается. Интересно, да, если имеет место расщепление по какой-то переменной, то сумма всех нулевых векторов в обоих половинах не может превышать сумму таких векторов в общем решении. Но я не уверен, что это нам что-то даёт. Оно не много дает, если действовать рекурсивно. Хорошо бы уметь определять независимые конфликты не рекурсивно. Нечто подобное есть в эвристиках решателей - они не суются повторно туда, где однажды обожглись. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 18:34 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Верблюд пропущено... Интересно, да, если имеет место расщепление по какой-то переменной, то сумма всех нулевых векторов в обоих половинах не может превышать сумму таких векторов в общем решении. Но я не уверен, что это нам что-то даёт. Оно не много дает, если действовать рекурсивно. Хорошо бы уметь определять независимые конфликты не рекурсивно. Нечто подобное есть в эвристиках решателей - они не суются повторно туда, где однажды обожглись. Можно нулевые вектора попробовать проверить на наличие цепочек приводящих к какому-то локальному решению. Консенсус среди нулей. Пусть сами выберут кто лишний. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 18:37 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Верблюд пропущено... Интересно, да, если имеет место расщепление по какой-то переменной, то сумма всех нулевых векторов в обоих половинах не может превышать сумму таких векторов в общем решении. Но я не уверен, что это нам что-то даёт. Оно не много дает, если действовать рекурсивно. Хорошо бы уметь определять независимые конфликты не рекурсивно. Нечто подобное есть в эвристиках решателей - они не суются повторно туда, где однажды обожглись. Решение готово. Надо просто ХРАНИТЬ все построенные векторы и сравнивать не с тремя переменными комбинации, а с вектором целиком. Новое решение решает проблему, жрёт в 2n раз больше памяти и соответственно времени. Исходники можно найти тут: https://github.com/gromas/polysat/tree/extended_vector ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 18:12 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Верблюд Aleksandr Sharahov пропущено... Оно не много дает, если действовать рекурсивно. Хорошо бы уметь определять независимые конфликты не рекурсивно. Нечто подобное есть в эвристиках решателей - они не суются повторно туда, где однажды обожглись. Решение готово. Надо просто ХРАНИТЬ все построенные векторы и сравнивать не с тремя переменными комбинации, а с вектором целиком. Новое решение решает проблему, жрёт в 2n раз больше памяти и соответственно времени. Исходники можно найти тут: https://github.com/gromas/polysat/tree/extended_vector Насчет 2n можно пояснить: что хранится, как сравнивается, почему этого достаточно для фильтрации множества решений? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 18:49 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Верблюд пропущено... Решение готово. Надо просто ХРАНИТЬ все построенные векторы и сравнивать не с тремя переменными комбинации, а с вектором целиком. Новое решение решает проблему, жрёт в 2n раз больше памяти и соответственно времени. Исходники можно найти тут: https://github.com/gromas/polysat/tree/extended_vector Насчет 2n можно пояснить: что хранится, как сравнивается, почему этого достаточно для фильтрации множества решений?
... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 19:04 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov почему этого достаточно для фильтрации множества решений? Вопрос интересный. Сейчас сижу описываю принцип работы. Смысл следующий.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 19:21 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Верблюд Почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 19:27 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Верблюд Почему? На пальцах сложно объяснить. Общий смысл такой: допустим у нас в списке существует некоторый вектор, для которого решение (полный вектор размером n) построить нельзя. Предыдущий алгоритм пропускал такие векторы по той причине, что он каждый раз начинал строиться не учитывая предыдущей истории, а проверяя соответствие только текущему назначению трёх переменных. Теперь если вектору соответствует какая-то цепочка, не приводящая к решению, то в ней как минимум две маски сочетаний будут противоречить друг другу. Это означает две вещи - что данная пара конфликтующих векторов единственная и другого варианта выбора (расщепления пространства решений с другими значениями маски) для этого конфликта у нас нет, иначе бы мы не получили конфликт, так как каждый вектор соответствует хотя бы одному другому в каждом сочетании, ну и из этого следует, что два проверяемых вектора конфликтуют с единственным возможным вектором, что невозможно в силу того, что алгоритм как раз такие конфликтующие пары удаляет. На а про то, что цепочки из возможных решений не могут быть удалены объяснение совсем простое. Если существует решение (полный вектор размером n), то для него в каждой комбинации должен существовать вектор как минимум размером 3. При этом для каждого такого вектора в одной комбинации переменных должен существовать как минимум один не противоречащий ему вектор в следующей комбинации и их полные вектора будут полностью соответствовать друг другу и всем последующим, подходящим к решению, так как они не могут конфликтовать друг с другом в силу того, что являются частью одного решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 21:14 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Верблюд Теперь если вектору соответствует какая-то цепочка, не приводящая к решению, то в ней как минимум две маски сочетаний будут противоречить друг другу. Это простейший случай, с ним все понятно. Но ведь может существовать длинная цепочка, не приводящая к решению, в которой нет попарно противоречащих друг другу масок сочетаний. Она запросто даст ложноположительное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 21:33 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Верблюд Теперь если вектору соответствует какая-то цепочка, не приводящая к решению, то в ней как минимум две маски сочетаний будут противоречить друг другу. Это простейший случай, с ним все понятно. Но ведь может существовать длинная цепочка, не приводящая к решению, в которой нет попарно противоречащих друг другу масок сочетаний. Она запросто даст ложноположительное решение. могла существовать в прошлом варианте. тут нет как таковой длинной цепочки, так как вектор после пересчета по сути сам является концом длинной цепочки "слева" и по сути в бесконечном плане происходит замыкание начала и конца цепочки (раньше так сделать было невозможно, так как истории слева не было) - цепочки, где любой выбор не противоречит любому другому дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 21:53 |
|
Решение NP-сложных задач за полиномиальное время
|
|||
---|---|---|---|
#18+
Верблюд, То, что если ее "вытянуть", то она замкнется это как раз понятно. Но непонятно, как вы это обнаружите. Что такого нового вы добавили в алгоритм, из-за чего он стал это обнаруживать. Не факт, что в любом случае будет достаточно цикла, можете удалить лишнее. Вдруг цепочки имеют общие части, и нужна рекурсия. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 22:04 |
|
|
start [/forum/topic.php?fid=16&msg=40103317&tid=1339616]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 149ms |
0 / 0 |