首页 > 编程语言 >Answer Set Programming 回答集编程

Answer Set Programming 回答集编程

时间:2023-08-04 13:55:06浏览次数:41  
标签:ASP yantai jinan Programming 编程 Set Answer arrive road

什么是ASP?

  ASP,全称 Answer Set Programming 中文名叫“回答集编程”。实验室学长要我学ASP的时候,我就去百度查了ASP,结果查到了都是这个:Active Server Page,意为“活动服务器网页”。我当时就在想:“这个不对啊,这个搞网站的,应该是旁边组系统集成组的事呀”。果然,此ASP非彼ASP。
  Answer Set Programming (ASP)提供了一种简单而强大的建模语言来解决组合问题。使用ASP,我们关注的方向就变成要解决的实际问题,而不是解决的方案。和C语言、python等语言有很大的不同,ASP是一种声明式编程,主要用于复杂的搜索问题。它基于逻辑编程的稳定模型语义。在ASP中,搜索问题被简化为计算稳定模型,并且问答集求解器(用于生成稳定模型的程序)用于执行搜索。许多问答集求解器的设计中使用的计算过程是DPLL算法的增强,并且从原理上讲,它总是终止(与Prolog查询评估不同,这可能导致无限循环))。从更一般的意义上讲,ASP包括对知识表示的回答集的所有应用程序,以及使用Prolog风格的查询评估来解决这些应用程序中出现的问题。

  Dimopoulos,Nebel和Köhler 在1993年提出的计划方法是回答集编程的早期示例。他们的方法基于计划和稳定模型之间的关系。Soininen和Niemelä 将现在称为回答集的编程应用于产品配置问题。Marek和Truszczyński在1999年和[Niemelä1999] 发表的关于逻辑编程范例25年的论文中,将答案集求解器用于搜索被确定为一种新的编程范例。的确,Lifschitz [8]在与Marek-Truszczynski论文相同的回顾性卷中首次提出了“答案集”而不是“稳定模型”的新术语。

基本语法

  一个简单的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.

运行程序

  运行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来,就不会这么迷茫。

标签:ASP,yantai,jinan,Programming,编程,Set,Answer,arrive,road
From: https://www.cnblogs.com/axiongYE/p/12442417.html

相关文章

  • Competition Set - 模拟赛 III
    以下都是模拟赛。难度分Easy,Medium,Hard三档,Easy表示正常情况下可以轻松场切,Medium表示有能力做出,Hard表示做不出的可能性很大。后面的+,-表示在该档中的定位。难度评分主观性大,仅供参考。加粗的部分通常是一道题的keyidea,也可能是我写错的原因。20230801A四子棋B悄悄......
  • C# 读取json配置文件appsettings.json
    添加NuGet包Microsoft.Extensions.Configuration.FileExtensions;Microsoft.Extensions.Configuration.Json;appsettings.json示例 代码:publicstaticvoidGetBuilder(stringpath){varbuilder=newConfigurationBuilder()......
  • msm8909_Setting中添加永不休眠功能
    项目中需要让Android板开机就进入桌面并且永不休眠。项目使用的是广和通的SC806Android开发板,msm8909平台。配置永不休眠diffdiff文件放前面,可以直接apply进去!diff--gita/frameworks/base/packages/SettingsProvider/res/values/defaults.xmlb/frameworks/base/packages/Se......
  • echarts多次setOption没有覆盖上一条数据 和 echarts的站位问题
    1、问题现象:echarts第一次获取的数据展示后第二次再次获取会覆盖不了展示的依然是上次的数据解决办法:chart.clear()   2、问题现象:echarts的占位没有数据的话是只展示x轴和y轴解决办法:利用title的副标题subtext,默认为“暂无......
  • [Ynoi2010] y-fast trie(multiset+思维)
    题目传送门solution妙妙题。分成\(a+b\geqC\)和\(a+b<C\)讨论。第一类是简单的,只需要选择最大和次大的数就行了。第二类加入是容易的,但是有删除。常规做法是线段树分治+\(multiset\),不能在线。考虑一个性质:如果对于\(x\),小于等于\(C-1-x\)的最大的\(y\)记作\(m......
  • tflearn 数据集太大无法加载进内存问题?——使用image_preloader 或者是 hdf5 dataset
    tflearn数据集太大无法加载进内存问题?Hi,all!I'mtryingtotraindeepnetonabigdatasetthatdoesn'tfitintomemory.Isthereanywaytousegeneratorstoreadbatchesintomemoryoneverytrainingstep?I'mlookingforbehavioursimilartofit_genera......
  • Toyota Programming Contest 2023#4(AtCoder Beginner Contest 311)
    Preface补下好久之前打的比赛博客这场前面都写的挺稳的,然后一到G就降智了没写出来A-FirstABC签到#include<cstdio>#include<iostream>#include<utility>#include<vector>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#i......
  • 【CV数据集总结】face_landmark_dataset总结
    前言本文主要整理总结facelandmark有关的数据集。Face2DKeypoint‒MMPose1.1.0documentationhttps://github.com/open-mmlab/mmpose/blob/main/docs/en/dataset_zoo/2d_face_keypoint.md关键特征点个数有5/15/68/98/106...数据集300Wdataset68个点,Indoor和Out......
  • HashSet的new两个相同的String类字符串的变化
    一、定义HashSet的底层是通过HashMap实现的,所以要通过HashMap去寻求答案二、源码分析其实关于这个问题的答案关键源码需在putVal方法中寻找,我用的版本是JDK8//源码publicVput(Kkey,Vvalue){returnputVal(hash(key),key,value,false,true);//......
  • Activity之间数据交流一(startActivityForResult , onActivityResult , setResult 的用
    主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。这样的数据交流就要用到主Activity回调函数onActivityResult()。一些方法: 主Activity中:<1>主Activity......