Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为SAT4J解算器输入CNF_Java_Nlp_Ontology_Sat Solvers_Sat4j - Fatal编程技术网

Java 为SAT4J解算器输入CNF

Java 为SAT4J解算器输入CNF,java,nlp,ontology,sat-solvers,sat4j,Java,Nlp,Ontology,Sat Solvers,Sat4j,我是一个全新的sat4j解算器 它说一些cnf文件应该作为输入 是否有任何可能的方法将规则作为输入,并获取其是否可满足 我的规则是: Problem = ( ( staff_1 <=> staff_2 ) AND ( doctor_1 <=> physician_2 ) ) AND ( ( staff_1 AND doctor_1 ) )

我是一个全新的sat4j解算器

它说一些cnf文件应该作为输入

是否有任何可能的方法将规则作为输入,并获取其是否可满足

我的规则是:

Problem = ( 

     ( staff_1         <=>          staff_2 ) AND 
     ( doctor_1        <=>      physician_2 ) 

) AND ( 

     ( staff_1         AND         doctor_1 )

)  AND (

    NOT( ward_2             AND physician_2 ) AND 
    NOT( clinic_2           AND physician_2 ) AND 
    NOT( admission_record_2 AND physician_2 ) 

) AND (

   NOT( hospital_2          AND physician_2 ) AND 
   NOT( department_2        AND physician_2 ) AND 
   NOT( staff_2             AND physician_2 )
)
问题=(
(职员1职员2)及
(医生1内科医生2)
)及(
(职员1和医生1)
)及(
非(病房2和医生2)和
非(诊所2和医生2)和
非(入院记录和内科医师)
)及(
非(医院2和医生2)和
非(科室2和医师2)和
非(工作人员2和医生2)
)

有人能帮我如何使用sat4j解算器解决这个问题吗?

你看过他们网站上的吗?它包括一个链接,指向详细说明CNF格式语义的文档。该格式似乎支持您在示例中使用的所有运算符,但“”除外,但这可能是此特定“非官方”文档中的一个遗漏。

如果要使用SAT4J,您需要转换有问题的CNF格式

Syntax: 
    OR           = a space 
    AND          = a newline
    NOT          = -

Rules from De Morgan's laws: 
    A <=> B      = (A => B) AND (B => A)
    A  => B      = NOT(A) OR  B
    NOT(A AND B) = NOT(A) OR  NOT(B) 
    NOT(A OR  B) = NOT(A) AND NOT(B) 
首先需要将这些文本变量转换为整数

1 = staff_1
2 = staff_2
3 = doctor_1
4 = physician_2
5 = ward_2 
6 = clinic_2
7 = admission_record_2 
8 = hospital_2
9 = department_2 
然后,这里是将问题转换为CNF格式所需的规则和语法

Syntax: 
    OR           = a space 
    AND          = a newline
    NOT          = -

Rules from De Morgan's laws: 
    A <=> B      = (A => B) AND (B => A)
    A  => B      = NOT(A) OR  B
    NOT(A AND B) = NOT(A) OR  NOT(B) 
    NOT(A OR  B) = NOT(A) AND NOT(B) 
我让你在这个小例子上运行SAT4J

它将为您提供解决方案
可满足
xor
不可满足

关于使用SAT4J所需做的工作的小结:

 * Transform your `text_n` into a number.
 * Use the rule that I gave you to transform your problem into CNF.
 * Write the definition of your problem `p cnf nbVariables nbClauses`
 * Write everything in a FILE and run SAT4J on this file.

我希望这个循序渐进的例子能帮助很少人

我正在寻找一个如何使用SAT4J的例子,发现这个话题已经有6年了

我认为Valentin Montmirail的答案是不正确的,因为提供了链接 ()说:

子句的定义以最终值“0”终止

因此,我认为正确的答案是:

 c you can put comment here. 
 c Formatted by StackOverFlow.
 p cnf 9 12
 -1 2 0
 -2 1 0
 -3 4 0
 -4 3 0
  1 0
  3 0
 -5 -4 0
 -6 -4 0
 -7 -4 0
 -8 -4 0
 -9 -4 0
 -2 -4 0

我在这方面损失了30分钟,我希望它能帮助未来的读者。

请提供更多详细信息。你到底在做什么?我必须比较两个本体,创建一个这样的表达式,并检查它是否令人满意,我不知道SAT解算器或SMT解算器,哪一个会处理这样的表达式?我不知道什么是SMT解算器,但SAT应该做到这一点。你的输入格式是什么?上面的表达式是我的输入。。但sat解算器要求在cnf文件中输入。。是否有任何转换器可将此表达式转换为cnf文件?是。。但是否有任何程序可以将给定的表达式自动转换为CNF格式?因为我将生成许多这样的表达式,而这无法手动完成。。SMT解算器和SAT解算器的区别是什么?是否也有一种方法来限制解决方案?比如说变量4在解中必须是1,我认为如果4必须在解中,那么4在任何地方都必须是真的。你为什么需要这样的要求?谢谢你,本。