ASP答案集编程:如何将所有答案集整合为单个并分配唯一ID
ASP多答案集整合为单答案集解决方案
你可以通过位运算映射所有原始答案集到唯一ID,将所有结果封装到单个答案集内,实现代码如下:
% 基础谓词定义 argument(1..3). element(1). % 原始答案集总数为2^3=8,分配ID范围1~8 answer_set_id(1..8). % 用ID的二进制位标记对应原始答案集中每个argument是否选中scope enabled(A, ID) :- answer_set_id(ID), argument(A), (ID >> (A-1)) & 1 == 1. % 生成带ID的newScope谓词:存在scope的情况 {newScope(ID, A, U) : element(U)} :- enabled(A, ID). % 生成带ID的newScope谓词:无对应scope的情况 newScope(ID, A, empty) :- answer_set_id(ID), argument(A), not enabled(A, ID). % 只输出目标谓词 #show newScope/3.
结果说明
运行上述代码后,你将得到仅包含newScope/3谓词的单个答案集:
- 第一个参数为原始答案集的唯一ID,范围1~8
- 第二个参数为argument的取值
- 第三个参数为
empty时表示对应原始答案集中不存在该argument的scope原子,为1时表示存在scope(A,1)原子
如果需要输出为你示例中用-、|拼接的格式,可以调用clingo时指定--outf=2输出JSON结构,再做简单的字符串后处理即可。
内容的提问来源于stack exchange,提问作者alexandros vassiliades
相关产品推荐
相关产品推荐

