作为一个继续我以前的 的问题 我会试着解释我的问题和如何我想把我的算法的一个问题,可表示在CNF形式。

问题:找到所有的稳定设置的一个 辩论框架 根据 粪便是拟议的框架.

简单的理论:具有一个辩论的框架AF,与设定的所有论点和R设置的关系,稳定是一个集攻击的所有论点不在他们的设定和没有攻击之间的关系的参数在稳定设置的。例如:

让我们说,我们有一个辩论的框架AF、={的1,2,3,4}(争论的AF)和攻击的关系R{1,3}和R{2,4}.很明显,集合{1,2}是一个稳定的扩展的框架,因为:

a)它袭击所有论点不在他们的组(3和4)

b)它的冲突免费的(不攻击之间的辩论集),因为参数,1并不是攻击参数2和相对的

我穷尽性的抽象算法:

argnum=number of arguments;

Ai[argnum-1]=relation "attacks" ,where 1<=i<=argnum

P[2^argnum-1]=all possible relations that can be generated from all the arguments

S[2^argnum-1]=empty; where S are all the stable sets

j=0; //counter for while
k=1; //counter for counting stable sets
while j<2^argnum-1
    if P[j] attacks all arguments not in P[j](check using Ai[])
        if all arguments in P[j] are conlfict-free
            S[k++]=P[j];
        end if
    end if 
    j++;
end while

我想到解决上述问题,无论是通过将上述算法CNF或通过使用不同的算法以及最后使用的一个坐了解(或任何类似的东西如果存在)提供CNF作为输入和获得稳定的集作为输出。

我不知道如果有人能给我任何反馈,我怎么可以任意变换算法,如上述CNF以用到卫者。

我决定用 precosat.

有帮助吗?

解决方案

寻找稳定的参数集等同于寻找 独立集 在定向的参数攻击图中,并增加了该集合的某些成员必须与图中的每个顶点相邻 不是 在独立集中。这个问题至少与独立设定的决策问题一样困难,因此是NP-HARD。稳定参数集问题的决策版本可降低布尔值,如下所示:

输入: 给定一组$ n $ gragments $ arg_ {1} $ to $ arg_ {n} $,让SAT命题变量$ ainted_ {i,j} $为true如果$ arg_ {i arg_ {i} $ ainteds $ arg_ {j j} $。

输出: 令$ indset_ {1} ... indset_ {n} $是一组新的命题变量。 $ indset_ {i} $在SAT解决方案中将是正确的,如果F $ arg_ {i} $是找到稳定集的一部分。

生成条款:

  1. 对于每对变量$ indset_ {i} $,$ indset_ {j} $,添加需要的子句

    $ OVERLINE {(INDSET_ {I} LAND INDSET_ {J})} LOR( oferline {taction_ {i,j}} land land oftline {Attack_ {J,I}})$。

    这些子句禁止任何稳定的固定论点攻击另一个。

  2. 令$ needAttack_ {1} ... seedattack_ {n} $是一组新的命题变量。对于每个$ indset_ {i} $ variable,添加需要的子句

    $ indset_ {i} oplus eneadattack_ {i} $

    这些条款记录哪些参数必须受到稳定的集合参数的攻击。

  3. 令$ gotAttack_ {1} ... gotAttack_ {n} $是一组新的命题变量。对于每个$ gotAttack_ {j} $变量,添加需要的子句

    美元

    这些条款记录哪些参数已受到稳定的集合参数的攻击。

  4. 对于每个$ gotAttack_ {i} $变量,添加需要的子句

    $ needattack_ {i} oplus operline {gotAttack_ {i}} $

    这些条款要求每一个稳定的集合参数都需要攻击的每个参数实际上受到攻击。

布尔表达式可以转换为电路,并使用从那里转换为CNF Tseitin转化.

为了获得所有稳定的集合,当SAT求解器返回一组$ Indset $变量时,您必须构造一个禁止解决并将其附加到CNF公式的CNF条款。重新运行求解器,它将找到一个新解决方案,或者报告该公式现在不满意。如果报告了“不满意”,那么您知道您已经找到了所有稳定的集合。如果找到了新的解决方案,请构建另一个CNF子句以禁止该解决方案,将其附加到公式并再次运行求解器。

其他提示

SAT解决我已经使用的设计要找到一个解决方案。还有坐解决,彻底消除所有可能的解决方案,意在对随机坐的基准的实例。这些解决优化放弃期间的信息搜索,而不是专注于寻找一个(或存在的一)解决方案。优化用于列举的所有解决方案需要不同的方法,维持一个内存有效的数据结构,包含所有的信息过程中发现的搜索。如果你的办法要求查找所有不同的解决方案或优化过它们,然后更一般性的工具可能是必要的。(虽然有时候它是完全合理的重新运行的解从头开始为一个大量不同的情况下每个禁止的解决方案找到之前如果运行时足够低,那么不管,运行不同的数据。) 一个良好的国家名单的技术坐解决,许多免费提供的,看到 结果坐在挑战2012年.

我不能规定一种特定的解,因为我没有好好把握你的问题领域。就个人而言,我会尽量快一个小型但重要的实例的问题作为约束的满意度问题采用的 MiniZinc 语言或使用 奴才 输入格式,作为一系列坐情况下,作为一个 Z3 SMT实例,并作为输入到 .通过这样做,你可能会找到方方面面的一些工具有局限性,使他们或多或少适合你的任务。我最初将此迅速,以快速探索空间的工具,然后把更多的时间在一个或两个最有希望的工具。

(订购上述反映了我个人熟悉的工具,不是任何特定的建议。注意扣倾向于执行以及在坐的挑战。)

然而,表示真正的问题在这些通用模拟模式通常具有挑战性。甚至有一个年度讲习班,涉及的一般问题 建模和模式改写.应用程序的论文描述了如何使用卫星/CP/SMT/ASP的办法来解决具体的新问题,欢迎在主要的会议,在这些领域。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top