0% found this document useful (0 votes)
61 views

An Introduction To Answer Set Programming: Paul Vicol October 14, 2015 (Based On Slides by Torsten Schaub)

This document provides an introduction to answer set programming (ASP). It discusses ASP as a declarative problem solving paradigm that allows users to encode problems using logic-based rules. The ASP system then finds models of the encoding to solve the problem. The document outlines ASP syntax and semantics, and provides an example of modeling the n-queens problem in ASP through generating and testing candidate solutions.

Uploaded by

Warley Gramacho
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
61 views

An Introduction To Answer Set Programming: Paul Vicol October 14, 2015 (Based On Slides by Torsten Schaub)

This document provides an introduction to answer set programming (ASP). It discusses ASP as a declarative problem solving paradigm that allows users to encode problems using logic-based rules. The ASP system then finds models of the encoding to solve the problem. The document outlines ASP syntax and semantics, and provides an example of modeling the n-queens problem in ASP through generating and testing candidate solutions.

Uploaded by

Warley Gramacho
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 51

an introduction to answer set programming

Paul Vicol
October 14, 2015
(Based on slides by Torsten Schaub)

1
outline

0. My Research
1. Declarative Problem Solving
2. ASP Syntax and Semantics
3. Modeling Problems in ASP

2
my research

3
multi-agent belief change

• We have a network of agents


• Each agent has some initial beliefs about the state of the world
• Agents communicate and share information
• Goal: Determine what each agent believes after learning as much as
possible from other agents
• My research deals with ways to do this

4
declarative problem solving

5
traditional imperative programming

• Convert a problem specification into imperative code that solves


instances of the problem
• Deal with algorithms and data structures
• The focus is on how to solve the problem

6
traditional imperative programming

• Convert a problem specification into imperative code that solves


instances of the problem
• Deal with algorithms and data structures
• The focus is on how to solve the problem

7
declarative problem solving

• Directly encode the problem specification using a modeling language


• How do we solve the problem? vs What is the problem?
• Focus on how to describe the problem

8
declarative problem solving

• Write your problem in a formal representation (i.e. using logic)


• The representation defines an implicit search space, and gives a
description of a solution
• An off-the-shelf solver takes the representation and finds its logical
models
• The problem representation should be such that these models
represent solutions

9
what is answer set programming?

• ASP is a declarative problem-solving paradigm that combines an


expressive modeling language with a high-performance solver
• It is geared towards solving NP-hard combinatorial search problems
• Originally developed for AI applications dealing with Knowledge
Representation and Reasoning (KRR)
• Led to a rich modeling language, compared to SAT
• Useful for solving combinatorial problems in P, NP, and NPNP , in
areas like
• Bioinformatics
• Robotics
• Music Composition
• Decision Support Systems used by NASA
• Product Configuration

10
asp systems

• The best ASP tools are developed by the University of Potsdam,


Germany
• Download their ASP solver clingo from
http://potassco.sourceforge.net/index.html

11
two paradigms

• Theorem-Proving-Based Approach (Prolog)


• Solution given by the derivation of a query
• Model-Generation-Based Approach (ASP)
• Solution given by a model of the representation

12
comparison to prolog

Is Prolog Declarative?

• Not really… shuffling rules in a program can break it


• Prolog program:

edge(1,2).
edge(2,3).

reachable(X,Y) :- edge(X,Y).
reachable(X,Y) :- edge(X,Z), reachable(Z,Y).

• A query:

?- reachable(1,3).
true.

13
comparison to prolog (contd.)

• If we shuffle the program as follows:

edge(1,2).
edge(2,3).

reachable(X,Y) :- reachable(Z,Y), edge(X,Z).


reachable(X,Y) :- edge(X,Y).

• Then we get:

?- reachable(1,3).
Fatal Error: local stack overflow.

• This is not a bug in Prolog; it is intrinstic in the fixed execution of


its inference algorithm
• Prolog provides constructs to alter program execution
• The cut operator allows you to prune the search space, at the risk of
losing solutions
14
comparison to prolog (contd.)

• Prolog is a programming language; it allows the user to exercise


control
• For a programming language, control is good
• ASP provides a representation language
• Completely decouples problem specification from problem solving

Prolog ASP
Query Derivation Model Generation
Top-down Bottom-up
Fixed execution order No fixed execution order
Programming Language Modeling Language

15
asp syntax and semantics

16
logic programs

• A logic program over a set of atoms A is a set of rules of the form:

a0 ← a1 , . . . , am , ∼ am+1 , . . . , ∼ an
where each ai ∈ A.
• Rules are a way of expressing constraints on a set of atoms
• “∼” represents default negation
• An atom is assumed to be false until it is proven to be true

• Let X be the set of atoms representing a solution


• This rule says: “If a1 , . . . , am are all in X, and none of am+1 , . . . , an
are in X, then a0 should be in X”

17
stable models / answer sets

φ = q ∧ (q ∧ ¬r → p)

• φ has three classical models: {p, q}, {q, r}, and {p, q, r}
• {p, q} represents the model where:
p 7→ 1, q 7→ 1, r 7→ 0

• The logic program representation of φ is Pφ :

q←
p ← q, ∼ r
• This logic program has one stable model (a.k.a answer set): {p, q}
• A set X of atoms is a stable model of a logic program P if X is a
(classical) model of P and all atoms in X are justified by some rule
in P
18
modeling problems in asp

19
asp solving steps

• Model your problem as a logic program


• The ASP solver only deals with propositional logic programs
• But it’s more convenient (and much more flexible) to write
first-order programs with variables
• Thus, the ASP solving process consists of two steps:
1. A grounder converts a first-order program into a propositional
program, by systematically replacing variables with concrete values
from some domain
2. A solver takes the ground program and assigns truth values to atoms
to obtain the stable models of the program

20
asp solving steps

21
asp modeling language

• Facts
• a.
• person(bill).
• person(alice;bob;james).
• Is shorthand for person(alice). person(bob). person(james).

• num(1..10).
• Is shorthand for num(1). num(2). num(3). num(4). etc.

• Rules
• a :- b.
• reachable(X,Z) :- edge(X,Y), reachable(Y,Z).

22
grounding example

• If we have a logic program


r(a,b).
r(b,c).
t(X,Y) :- r(X,Y).
• Then the full ground instantiation is:
r(a,b).
r(b,c).
t(a,a) :- r(a,a).
t(b,a) :- r(b,a).
t(c,a) :- r(c,a).
...
• Which is trivially reduced to:
r(a,b).
r(b,c).
t(a,b) :- r(a,b).
t(b,c) :- r(b,c).
23
asp solving methodology

• General methodology: generate and test (or “guess and check”)

1. Generate candidate solutions through non-deterministic constructs


(like choice rules)
2. Test them to eliminate invalid candidate solutions

24
asp modeling constructs

• Choice Rules
• 1 { has_property(X,C) : property(C) } 1 :- item(X).
• Integrity Constraints
• :- in_clique(2), in_clique(3), not edge(2,3).
• “It cannot be the case that nodes 2 and 3 are in a clique, and there
is no edge betweeen 2 and 3.”
• Aggregates
• within_budget :- 10 #sum { Amount : paid(Amount) } 100.
• Optimization Statements
• #maximize { 1,X:in_clique(X),node(X) }.

25
n-queens problem

• Goal: Place n queens on an n × n chess board such that no queens


attack each other

26
n-queens - defining the board

• Define the board:


row(1..n).
col(1..n).
$ clingo queens.lp --const n=4
Answer: 1
row(1) row(2) row(3) row(4) \
col(1) col(2) col(3) col(4)
SATISFIABLE

27
n-queens - placing queens

• Generate: Place any number of queens on the board:


{ queen(I,J) : row(I), col(J) }.
$ clingo queens.lp --const n=4 3
Answer: 1
row(1) row(2) row(3) row(4) \
col(1) col(2) col(3) col(4)
Answer: 2
row(1) row(2) row(3) row(4) \
col(1) col(2) col(3) col(4) queen(2,1)
Answer: 3
row(1) row(2) row(3) row(4) \
col(1) col(2) col(3) col(4) queen(3,1)
SATISFIABLE

28
n-queens - placing queens

29
n-queens - restricting the number of queens

• We need to say that there should only be n queens


• Expressed by an integrity constraint using double negation
• “It should not be the case that there are not n queens.”

:- not n { queen(I,J) } n.
$ clingo queens.lp --const n=4
Solving...
Answer: 1
queen(1,1) queen(2,1) queen(3,1) queen(4,1)

30
n-queens - restricting the number of queens

• The last solution looks like this:

31
n-queens - forbidding attacks

• Prevent attacks by adding integrity constraints


• Forbid horizontal attacks (two queens in the same row):
:- queen(I,J1), queen(I,J2), J1 != J2.
• Forbid vertical attacks (two queens in the same column):
:- queen(I1,J), queen(I2,J), I1 != I2.
• And forbid diagonal attacks:

:- queen(I,J), queen(II,JJ), (I,J) != (II,JJ), I+J == II+JJ.


:- queen(I,J), queen(II,JJ), (I,J) != (II,JJ), I-J == II-JJ.

32
n-queens - full program

queens.lp

row(1..n).
col(1..n).

% Generate
n { queen(I,J) : row(I), col(J) } n.

% Test
:- queen(I,J1), queen(I,J2), J1 != J2.
:- queen(I1,J), queen(I2,J), I1 != I2.
:- queen(I,J), queen(II,JJ), (I,J) != (II,JJ), I+J == II+JJ.
:- queen(I,J), queen(II,JJ), (I,J) != (II,JJ), I-J == II-JJ.

#show queen/2.

33
n-queens - solution

$ clingo queens.lp --const n=4


Solving...
Answer: 1
queen(3,1) queen(1,2) queen(4,3) queen(2,4)

34
elaboration tolerance

• ASP is very tolerant to elaboration in the problem specification


• Start with a large search space, and keep adding constraints to
whittle down results
• Helps you to understand your problem, and is useful for prototyping

35
graph 3-colouring problem

• Problem instance: A graph G = ⟨V, E⟩.


• Goal: Assign one colour to each node, such that no two nodes
connected by an edge have the same colour.

36
graph 3-colouring - instance

• Represent the graph using node/1 and edge/2 predicates:

node(1..6).
edge(1,2). edge(1,3). edge(1,5).
edge(2,3). edge(2,4). edge(2,6).
edge(3,4). edge(3,5). edge(4,5). edge(5,6).

col(red;green;blue).
37
for reference: asp modeling constructs

• Choice Rules
• 1 { has_property(X,C) : property(C) } 1 :- item(X).
• Integrity Constraints
• :- in_clique(2), in_clique(3), not edge(2,3).
• “It cannot be the case that nodes 2 and 3 are in a clique, and there
is no edge betweeen 2 and 3.”
• Aggregates
• within_budget :- 10 #sum { Amount : paid(Amount) } 100.
• Optimization Statements
• #maximize { 1,X:in_clique(X),node(X) }.

38
graph 3-colouring - encoding

• Generate: Assign one colour to each node using a choice rule

1 { node_col(X,C) : col(C) } 1 :- node(X).

• Test: Eliminate candidate solutions where two nodes connected by


an edge get the same colour, using an integrity constraint

:- edge(X,Y), node_col(X,C), node_col(Y,C).

39
graph 3-colouring - full program

col.lp

node(1..6).
edge(1,2). edge(1,3). edge(1,5).
edge(2,3). edge(2,4). edge(2,6).
edge(3,4). edge(3,5).
edge(4,5).
edge(5,6).

col(red;green;blue).
1 { node_col(X,C) : col(C) } 1 :- node(X).
:- edge(X,Y), node_col(X,C), node_col(Y,C).

#show node_col/2.

40
graph 3-colouring - running

$ clingo col.lp
Answer: 1
node_col(2,green) node_col(1,blue) node_col(3,red) \
node_col(5,green) node_col(4,blue) node_col(6,red)
SATISFIABLE

Models : 1+
Calls : 1
Time : 0.003s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.000s

41
graph 3-colouring - interpreting

42
graph 3-colouring - all answer sets

• We also can enumerate all possible solutions:

$ clingo col_encoding.lp col_instance.lp 0


Answer: 1
node_col(2,green) node_col(1,blue) node_col(3,red) \
node_col(5,green) node_col(4,blue) node_col(6,red)
Answer: 2
node_col(2,green) node_col(1,blue) node_col(3,red) \
node_col(5,green) node_col(4,blue) node_col(6,blue)
Answer: 3
node_col(1,red) node_col(2,green) node_col(3,blue) \
node_col(5,green) node_col(4,red) node_col(6,red)
Answer: 4
node_col(1,red) node_col(2,green) node_col(3,blue) \
node_col(5,green) node_col(4,red) node_col(6,blue)
Answer: 5
node_col(1,red) node_col(2,blue) node_col(3,green) \ 43
xkcd knapsack problem statement

44
xkcd knapsack problem part 1

• Order some amount (possibly 0) of each food


• Such that the sum of the costs of the foods times the number
ordered is exactly some desired amount

45
xkcd knapsack problem part 2

• We can encode the foods and costs as follows:

food(fruit;fries;salad;wings;mozz_sticks;sampler).

cost(fruit,215).
cost(fries,275).
cost(salad,335).
cost(wings,355).
cost(mozz_sticks,420).
cost(sampler,580).

46
xkcd knapsack problem part 3

#const total = 1505.


#const max_order = 10.

food(fruit;fries;salad;wings;mozz_sticks;sampler).

cost(fruit,215). cost(fries,275). cost(salad,335).


cost(wings,355). cost(mozz_sticks,420). cost(sampler,580).

% Have to set an upper bound on the orders for a specific food


num(0..max_order).

% Order some amount (possibly 0) of each type of food


1 { order(Food, Number) : num(Number) } 1 :- food(Food).

% We want the prices to sum to the desired total


#sum{(Cost*N),F : order(F,N) : cost(F,Cost), num(N)} == total.
47
xkcd knapsack problem part 4

• clingo --const total=1505 xkcd.lp


order(fruit,7) order(fries,0) order(salad,0)
order(wings,0) order(mozz_sticks,0) order(sampler,0)
• clingo --const total=19000 xkcd.lp 0

48
efficiency

Is ASP Declarative?

• In many ways, yes:


• You provide a specification of the problem, and a problem instance,
and you get a result
• The order of rules doesn’t matter
• You don’t have to think about how your problem is solved
(algorithm, data structures), just what your problem is
• However…
• Different problem encodings can yield different solving times
• Efficiency still depends on how you specify your problem

49
efficiency (contd.)

• Performance generally depends on the size of the ground


instantiation
• This is what the solver has to look at
• Intelligent grounding techniques attempt to automatically reduce
the size of the ground program by eliminating unnecessary rules
• But still, you can never recover from a bad encoding

50
performance of n-queens

• The previous encoding of n-Queens becomes slow at n ≈ 15


• The encoding below is much better (gets to n ≈ 250 in the same
amount of time):

1 { queen(I,1..n) } 1 :- I = 1..n.
1 { queen(1..n,J) } 1 :- J = 1..n.
:- 2 { queen(D-J,J) }, D = 2..2*n.
:- 2 { queen(D+J,J) }, D = 1-n..n-1.

• A version of this encoding was used to go to n = 5000


• Solving took about 1 hour�

51

You might also like