回答集编程
目录
回答集编程
答案集编程(ASP)是一种针对困难(主要是NP困难)搜索问题的声明式编程形式。它以逻辑编程的稳定模型(答案集)语义为基础。在ASP中,搜索问题被简化为计算稳定模型,而答案集求解器–生成稳定模型的程序–被用来执行搜索。许多答案集求解器的设计中使用的计算程序是DPLL算法的增强,原则上它总是终止的(不像Prolog查询评估,它可能导致无限循环)。
在更广泛的意义上,ASP包括答案集在知识表示中的所有应用,以及使用Prolog风格的查询评估来解决这些应用中出现的问题。
历史
答案集编程的一个早期例子是Dimopoulos、Nebel和Köhler在1997年提出的规划方法。他们的方法是基于规划和稳定性模型之间的关系。1998年,Soininen和Niemelä将现在已知的答案集编程应用于产品配置问题。1999年,答案集编程一词首次出现在《逻辑编程范例》一书中,作为两篇论文集的标题。这两篇论文中的xxx篇将使用答案集求解器的搜索确定为一种新的编程范式。同年,Niemelä也提出了具有稳定模型语义的逻辑程序作为一种新的范式。
AnsProlog,一种答案集编程语言
一个AnsProlog程序由以下形式的规则组成
<head> :- <body>。
如果<body>是空的,那么符号:-(if)就会被删除;这样的规则被称为事实。最简单的Lparse规则是那些有约束的规则。
这个语言中包含的一个有用的结构也是选择。例如,选择规则
{p,q,r}.
说:任意选择哪个原子p , q , r {p,q,r}包含在稳定模型中。包含这个选择规则而没有其他规则的Lparse程序有8个稳定模型–{p,q,r}的一个任意子集{p , q , r }…稳定模型的定义被泛化为具有选择规则的程序。在稳定模型语义下,选择规则也可以被看作是命题公式的缩写。例如,上面的选择规则可以看作是三个被排除的中间公式的联结的简写。
Lparse的语言也允许我们写出有约束的选择规则,比如说
1{p,q,r}2。
这个规则说:在原子p , q , r中至少选择1个{p,q,r},但不超过2个。
在Lparse程序中加入这个约束条件,可以消除包含至少2个原子p , q , r {p,qdisplaystyle p,q,r}的稳定模型。
变量(大写,和Prolog一样)在Lparse中被用来缩写遵循相同模式的规则集,也用来缩写同一规则中的原子集。
其中start和end是具有常量值的算术表达式。范围是一种符号捷径,主要用于以兼容的方式定义数字字段。
范围也可以在规则体中使用,语义相同。
一个条件字的形式是。
如果q的扩展是{q(a1),q(a2), ….,q(aN)},上述条件在语义上等同于把{p(a1),p(a2), …,p(aN)}来代替该条件的位置。

生成稳定模型
为了找到存储在文件${filename}中的Lparse程序的稳定模型
选项0指示smodels寻找该程序的所有稳定模型。