如何在Answer Set Programming(ASP)中获取论证理论的优选集?
在ASP中计算论证理论的优选集
首先明确:优选集是极大的可容许集——即无法再添加任何额外参数到集合中,同时保持集合的可容许性(冲突-free、能防御所有成员、包含所有可接受的参数)。
你的现有代码仅实现了可容许集的计算,但未添加极大性约束,因此会得到包含子集关系的多个模型(比如你提到的set2是set1的子集,它是可容许集,但不是优选集)。
问题分析
你当前的代码确保了集合满足:
- 冲突-free(集合内无互相攻击的参数)
- 集合中的每个参数都被防御
- 所有可接受的参数都被包含在集合中
但缺少极大性的约束:当前集合不能是另一个可容许集的真子集。set2就是这样的情况——你可以将3、5、7添加进去得到set1,而set1仍然是可容许的,因此set2不符合优选集的要求。
修改后的代码
在现有代码基础上,添加极大性约束即可得到优选集:
% Define arguments arg(1..10). % Define attacks att(4,7). att(3,10). att(3,9). att(7,9). att(9,2). att(10,5). att(5,2). att(5,4). att(2,3). att(3,1). out(X) :- arg(X), not in(X). % Conflict-free rule in(X) :- arg(X), not out(X). % Contraint => no att(X, Y) in in/1 :- in(X), in(Y), att(X, Y). % 定义防御关系 defended(X) :- att(Z, X), in(Y), att(Y, Z). defended(X) :- not att(_, X), in(X). % 约束:in中的元素必须被防御 :- in(X), not defended(X). % Define when an argument is attacked by 'in' attacked(Z) :- att(Y, Z), in(Y). % Define when an argument is not defended not_defended(X) :- att(Z, X), not attacked(Z). % An argument is acceptable if it is defended acceptable(X) :- arg(X), not not_defended(X). % Ensure all acceptable arguments are included in 'in' :- acceptable(X), not in(X). % ---------------------- 新增极大性约束 ---------------------- % 判断参数X与当前in集合是否冲突(X攻击in中元素 或 in中元素攻击X) conflict(X) :- in(Y), att(X, Y). conflict(X) :- in(Y), att(Y, X). % 参数X与in集合无冲突 no_conflict(X) :- arg(X), not conflict(X). % 极大性约束:不存在可以添加到in集合的参数(即无法找到既无冲突又被防御的参数不在in中) :- not in(X), no_conflict(X), defended(X).
运行结果说明
修改后用Clingo运行,只会得到一个模型:out(1) out(2) in(3) out(4) in(5) in(7) out(9) out(10) in(6) in(8)
这就是唯一的优选集——它是极大的可容许集,无法再添加任何参数而保持可容许性。
关键逻辑解释
新增的极大性约束核心是:
对于任何不在in集合中的参数X,如果X和当前in集合无冲突,且X被当前in集合防御,那么这个模型就是无效的。因为这意味着我们可以把X添加到in集合中,得到一个更大的可容许集,说明原集合不是极大的。
内容的提问来源于stack exchange,提问作者Filiplundbeerg
相关产品推荐
相关产品推荐

