Answer Set Programming 回答集编程

本文介绍了ASP(Answer Set Programming)的基本概念,一种用于解决组合问题的逻辑编程语言。通过一个火车旅行的城市连通性问题实例,详细展示了ASP的语法结构,包括事实、规则和输出的定义,以及如何使用clingo工具运行ASP程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ASP 回答集编程

什么是ASP?

ASP,全称 Answer Set Programming 中文名叫“回答集编程”。实验室学长要我学ASP的时候,我就去百度查了ASP,结果查到了都是这个:Active Server Page,意为“活动服务器网页”。我当时就在想:“这个不对啊,这个搞网站的,应该是旁边组系统集成组的事呀”。果然,此ASP非彼ASP。
Answer Set Programming (ASP)提供了一种简单而强大的建模语言来解决组合问题。使用ASP,我们关注的方向就变成要解决的实际问题,而不是解决的方案。和C语言、python等语言有很大的不同,ASP是一门逻辑编程语言。他的背景大家可以去看这一篇博客:回答集编程背景

基本语法

一个简单的ASP程序包括三个部分:事实、规则、输出。事实和规则,用来描述问题;输出,用来查看结果。

一个简单例子

现在有烟台,北京,青岛,济南,桂林5个城市,我们现在要坐火车在这4个城市之间穿梭,已知除了北京、桂林以外,其他三个城市之间都有直达的火车,而北京只有到济南的直达火车,桂林到哪个城市都没有直达的,那么从烟台出发,我都能到达哪些城市呢?
在这里插入图片描述
ASP代码
后缀名:.lp

% fact
%city(yantai,beijing,qingdao,jinan,guilin).
road(beijing,jinan).
road(jinan,yantai).
road(jinan,qingdao).
road(qingdao,yantai).

%rule
road(X,Y) :- road(Y,X).
road(X,Y) :- road(X,Z),road(Z,Y).

arrive(X) :- road(yantai,X).

% Displan
#show arrive/1.
事实和规则

从上面的例子我们可以看出,一个ASP程序包括两个重要的部分:事实和规则。
事实:用于描述现实世界的状态。
规则:用于进行推理。
ASP程序里还包括了常量(例子中的城市名);谓词(如road, arrive),每个谓词中有若干个参数,我们把带有n个参数的谓词p写作p/n;变量(例子中大写的X、Y),注意的是本质上ASP程序是不支持变量的,这里的变量仅仅是为了方便书写,在实际的求解中这些变量会被替换为程序中出现的所有常量。

符号作用
%表示注释
.语句结束
:-左边为结论,右边为条件。条件成立,则结论为真。
,表示并且
输出
符号作用
#show表示输出,如:#show arrive/1. arrive表示规则里的arrive,/1表示里面的元素是1
例子拓展

如果过了很多年,桂林到济南通了火车,济南到北京的道路在维修中,那现在的情况?

% fact
%city(yantai,beijing,qingdao,jinan,guilin).
road(beijing,jinan).
road(jinan,yantai).
road(jinan,qingdao).
road(qingdao,yantai).

road(guilin,jinan).
maintain(jinan,beijing).

%rule
road(X,Y) :- road(Y,X).
maintain(x,y) :- maintain(y,x).
route(X,Y) :- road(X,Y),not maintain(X,Y).
route(X,Y) :- route(X,Z),route(Z,Y).

arrive(yantai,X) :- route(yantai,X).

% Displan
#show arrive/2.
符号作用
not表示否定

运行程序

运行ASP之前先下载安装clingo,下载网址:https://github.com/potassco/clingo/releases/
本人使用的是Ubuntu系统,也可以使用以下命令:

$ sudo apt-get install gringo

安装好clingo后直接使用clingo命令即可,如图。
在这里插入图片描述

结尾

关于ASP,国内的资源非常少。波茨坦大学有个专门关于ASP的网站:https://potassco.org。将来我将去里面挖掘一些干货。ASP到底能做什么?之前我一直纳闷,直到遇见了这篇论文:Task planning in robotics: an empirical comparison of
PDDL- and ASP-based systems
,讲的关于机器人任务规划,原来如此!好了,现在有了方向,从此学起ASP来,就不会这么迷茫。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值