SlideShare a Scribd company logo
Clingo = Answer Set Programming + Control
Martin Gebser Roland Kaminski
Benjamin Kaufmann Torsten Schaub
University of Potsdam
Aalto University
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 1 / 20
Motivation
ASP is an approach to declarative problem solving, combining
a rich yet simple modeling language
with high-performance solving capacities
tailored to Knowledge Representation and Reasoning
Elaborate reasoning processes feature
incremental solving, as in planning or finite model finding, or even
reactive solving, as in robotics or query-answering
Problem
Logic
Program Grounder Solver Stable
Models
Solutions
- - -
?
6
One-shot ASP Solving
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 2 / 20
Motivation
ASP is an approach to declarative problem solving, combining
a rich yet simple modeling language
with high-performance solving capacities
tailored to Knowledge Representation and Reasoning
Elaborate reasoning processes feature
incremental solving, as in planning or finite model finding, or even
reactive solving, as in robotics or query-answering
Problem
Logic
Program Grounder Solver Stable
Models
Solutions
- - -
?
6
Incremental ASP Solving
6
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 2 / 20
Motivation
ASP is an approach to declarative problem solving, combining
a rich yet simple modeling language
with high-performance solving capacities
tailored to Knowledge Representation and Reasoning
Elaborate reasoning processes feature
incremental solving, as in planning or finite model finding, or even
reactive solving, as in robotics or query-answering
Problem
Logic
Program Grounder Solver Stable
Models
Solutions
- - -
?
6
Reactive ASP Solving
66
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 2 / 20
Outline
1 Background
2 (More) Control
3 Summary
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 3 / 20
Background
Outline
1 Background
2 (More) Control
3 Summary
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 4 / 20
Background
Clingo 3 Series
One-shot ASP solving by means of grounder gringo and solver clasp
Clingo: gringo | clasp
Incremental ASP solving by dedicated handling of three program parts
iClingo: Clingo [base ∪ n
i=1cumulative(i) ∪ volatile(n)]∗
n=1
base: grounded once and stored by solver
cumulative(i): grounded for increasing i-values and stored by solver
volatile(i): grounded like cumulative(i) but not stored by solver
Reactive ASP solving by further incorporating external program parts
oClingo: iClingo [ m
j=1external(j)]∗
m=1
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 5 / 20
Background
Clingo 3 Series
One-shot ASP solving by means of grounder gringo and solver clasp
Clingo: gringo | clasp
Incremental ASP solving by dedicated handling of three program parts
iClingo: Clingo [base ∪ n
i=1cumulative(i) ∪ volatile(n)]∗
n=1
base: grounded once and stored by solver
cumulative(i): grounded for increasing i-values and stored by solver
volatile(i): grounded like cumulative(i) but not stored by solver
Reactive ASP solving by further incorporating external program parts
oClingo: iClingo [ m
j=1external(j)]∗
m=1
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 5 / 20
Background
Clingo 3 Series
One-shot ASP solving by means of grounder gringo and solver clasp
Clingo: gringo | clasp
Incremental ASP solving by dedicated handling of three program parts
iClingo: Clingo [base ∪ n
i=1cumulative(i) ∪ volatile(n)]∗
n=1
base: grounded once and stored by solver
cumulative(i): grounded for increasing i-values and stored by solver
volatile(i): grounded like cumulative(i) but not stored by solver
Reactive ASP solving by further incorporating external program parts
oClingo: iClingo [ m
j=1external(j)]∗
m=1
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 5 / 20
Background
Elevator Control Example
Setup:
floor(1..3).
at(1,0).
Request 1:
request(2,1,1).
Request 2:
request(3,1,2).
1
2
3
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 6 / 20
Background
Elevator Control Example
Setup:
floor(1..3).
at(1,0).
Request 1:
request(2,1,1).
Request 2:
request(3,1,2).
1
2
3
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 6 / 20
Background
Elevator Control Example
Setup:
floor(1..3).
at(1,0).
Request 1:
request(2,1,1).
Request 2:
request(3,1,2).
1
2
3
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 6 / 20
Background
Elevator Control Example
Setup:
floor(1..3).
at(1,0).
Request 1:
request(2,1,1).
Request 2:
request(3,1,2).
1
2
3
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 6 / 20
Background
Elevator Control Example
Setup:
floor(1..3).
at(1,0).
Request 1:
request(2,1,1).
Request 2:
request(3,1,2).
1
2
3
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 6 / 20
Background
Encoding for One-shot ASP Solving
diff(-1;1).
{ move(D,T) : diff(D) } 1 :- time(T).
move(T) :- move(D,T).
% State update
at(F, T) :- at(F,T-1), time(T), not move(T).
at(F+D,T) :- at(F,T-1), move(D,T), floor(F+D).
:- time(T), not 1 { at(F,T) } 1.
% Pending requests
task(F1,F2,D,T) :- request(F1,F2,T), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,T) :- task(F1,F2,D,T-1), time(T), not exec(F1,F2,D,T).
% Started tasks must be processed till completion
exec(F1,F2,D,T) :- task(F1,F2,D,T-1), at(F1,T-1), move(D,T).
exec(F2,D,T) :- exec(F1,F2,D,T).
exec(F2,D,T) :- exec(F2,D,T-1), time(T), not at(F2,T-1).
exec(D,T) :- exec(F2,D,T).
:- exec(D,T), not move(D,T).
:- move(D,T), not move(D,T+1), not exec(D,T), not exec(-D,T+1).
% Move iff there is some task to process
open(T) :- task(F1,F2,D,T).
open(T) :- exec(F2,D,T), not at(F2,T).
:- move(T), not open(T-1).
:- open(T), not move(T+1).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 7 / 20
Background
One-shot ASP Solving
Request 1: clingo-3 <files> <(echo "time(1..3).")
Solving...
Answer: 1
move(1,2) move(-1,3)
Request 2: clingo-3 <files> <(echo "time(1..5).")
Solving...
Answer: 1
move(1,2) move(1,3) move(-1,4) move(-1,5)
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 8 / 20
Background
One-shot ASP Solving
Request 1: clingo-3 <files> <(echo "time(1..3).")
Solving...
Answer: 1
move(1,2) move(-1,3)
Request 2: clingo-3 <files> <(echo "time(1..5).")
Solving...
Answer: 1
move(1,2) move(1,3) move(-1,4) move(-1,5)
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 8 / 20
Background
One-shot ASP Solving
Request 1: clingo-3 <files> <(echo "time(1..3).")
Solving...
Answer: 1
move(1,2) move(-1,3)
Request 2: clingo-3 <files> <(echo "time(1..5).")
Solving...
Answer: 1
move(1,2) move(1,3) move(-1,4) move(-1,5)
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 8 / 20
Background
One-shot ASP Solving
Request 1: clingo-3 <files> <(echo "time(1..3).")
Solving...
Answer: 1
move(1,2) move(-1,3)
Request 2: clingo-3 <files> <(echo "time(1..5).")
Solving...
Answer: 1
move(1,2) move(1,3) move(-1,4) move(-1,5)
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 8 / 20
Background
Encoding for Incremental ASP Solving
#base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
{ move(D,T) : diff(D) } 1 :- time(T).
move(T) :- move(D,T).
% State update
at(F, T) :- at(F,T-1), time(T), not move(T).
at(F+D,T) :- at(F,T-1), move(D,T), floor(F+D).
:- time(T), not 1 { at(F,T) } 1.
% Pending requests
task(F1,F2,D,T) :- request(F1,F2,T), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,T) :- task(F1,F2,D,T-1), time(T), not exec(F1,F2,D,T).
% Started tasks must be processed till completion
...
:- move(D,T), not move(D,T+1), not exec(D,T), not exec(-D,T+1).
% Move iff there is some task to process
...
:- open(T), not move(T+1).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
Background
Encoding for Incremental ASP Solving
#base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
{ move(D,T) : diff(D) } 1 :- time(T).
move(T) :- move(D,T).
% State update
at(F, T) :- at(F,T-1), time(T), not move(T).
at(F+D,T) :- at(F,T-1), move(D,T), floor(F+D).
:- time(T), not 1 { at(F,T) } 1.
% Pending requests
task(F1,F2,D,T) :- request(F1,F2,T), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,T) :- task(F1,F2,D,T-1), time(T), not exec(F1,F2,D,T).
% Started tasks must be processed till completion
...
:- move(D,T), not move(D,T+1), not exec(D,T), not exec(-D,T+1).
% Move iff there is some task to process
...
:- open(T), not move(T+1).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
Background
Encoding for Incremental ASP Solving
#base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
{ move(D,T) : diff(D) } 1 :- time(T).
move(T) :- move(D,T).
% State update
at(F, T) :- at(F,T-1), time(T), not move(T).
at(F+D,T) :- at(F,T-1), move(D,T), floor(F+D).
:- time(T), not 1 { at(F,T) } 1.
% Pending requests
task(F1,F2,D,T) :- request(F1,F2,T), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,T) :- task(F1,F2,D,T-1), time(T), not exec(F1,F2,D,T).
% Started tasks must be processed till completion
...
:- move(D,T), not move(D,T+1), not exec(D,T), not exec(-D,T+1).
% Move iff there is some task to process
...
:- open(T), not move(T+1).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
Background
Encoding for Incremental ASP Solving
#base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
{ move(D,T) : diff(D) } 1 :- time(T).
move(T) :- move(D,T).
% State update
at(F, T) :- at(F,T-1), time(T), not move(T).
at(F+D,T) :- at(F,T-1), move(D,T), floor(F+D).
:- time(T), not 1 { at(F,T) } 1.
% Pending requests
task(F1,F2,D,T) :- request(F1,F2,T), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,T) :- task(F1,F2,D,T-1), time(T), not exec(F1,F2,D,T).
% Started tasks must be processed till completion
...
:- move(D,T), not move(D,T+1), not exec(D,T), not exec(-D,T+1).
% Move iff there is some task to process
...
:- open(T), not move(T+1).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
Background
Encoding for Incremental ASP Solving
#base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
{ move(D,T) : diff(D) } 1 :- time(T).
move(T) :- move(D,T).
% State update
at(F, T) :- at(F,T-1), time(T), not move(T).
at(F+D,T) :- at(F,T-1), move(D,T), floor(F+D).
:- time(T), not 1 { at(F,T) } 1.
% Pending requests
task(F1,F2,D,T) :- request(F1,F2,T), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,T) :- task(F1,F2,D,T-1), time(T), not exec(F1,F2,D,T).
% Started tasks must be processed till completion
...
:- move(D,T), not move(D,T+1), not exec(D,T), not exec(-D,T+1).
% Move iff there is some task to process
...
:- open(T), not move(T+1).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
Background
Encoding for Incremental ASP Solving
#base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
at(F, t) :- at(F,t-1), not move(t).
at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D).
:- not 1 { at(F,t) } 1.
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t), not move(D,t+1), not exec(D,t), not exec(-D,t+1).
% Move iff there is some task to process
...
:- open(t), not move(t+1).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
Background
Encoding for Incremental ASP Solving
#base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
at(F, t) :- at(F,t-1), not move(t).
at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D).
:- not 1 { at(F,t) } 1.
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t), not move(D,t+1), not exec(D,t), not exec(-D,t+1).
% Move iff there is some task to process
...
:- open(t), not move(t+1).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
Background
Encoding for Incremental ASP Solving
#base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
at(F, t) :- at(F,t-1), not move(t).
at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D).
:- not 1 { at(F,t) } 1.
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
...
:- open(t-1), not move(t).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
Background
Encoding for Incremental ASP Solving
#base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
at(F, t) :- at(F,t-1), not move(t).
at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D).
:- not 1 { at(F,t) } 1.
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
...
:- open(t-1), not move(t).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
Background
Incremental ASP Solving
Request 1: iclingo-3 <files>
Solving... Solving... Solving...
Answer: 1
move(1,2) move(-1,3)
Request 2: iclingo-3 <files>
Solving... Solving... Solving... Solving... Solving...
Answer: 1
move(1,2) move(1,3) move(-1,4) move(-1,5)
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 10 / 20
Background
Incremental ASP Solving
Request 1: iclingo-3 <files>
Solving... Solving... Solving...
Answer: 1
move(1,2) move(-1,3)
Request 2: iclingo-3 <files>
Solving... Solving... Solving... Solving... Solving...
Answer: 1
move(1,2) move(1,3) move(-1,4) move(-1,5)
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 10 / 20
Background
Incremental ASP Solving
Request 1: iclingo-3 <files>
Solving... Solving... Solving...
Answer: 1
move(1,2) move(-1,3)
Request 2: iclingo-3 <files>
Solving... Solving... Solving... Solving... Solving...
Answer: 1
move(1,2) move(1,3) move(-1,4) move(-1,5)
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 10 / 20
Background
Incremental ASP Solving
Request 1: iclingo-3 <files>
Solving... Solving... Solving...
Answer: 1
move(1,2) move(-1,3)
Request 2: iclingo-3 <files>
Solving... Solving... Solving... Solving... Solving...
Answer: 1
move(1,2) move(1,3) move(-1,4) move(-1,5)
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 10 / 20
Background
Encoding for Reactive ASP Solving
#base.
#external request(F1,F2,0) : floor(F1) : floor(F2) : F1 != F2.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
#external request(F1,F2,t) : floor(F1) : floor(F2) : F1 != F2.
...
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
...
Inputs:
#step 1.
request(2,1,1).
#endstep.
#step 2.
request(3,1,2).
#endstep.
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 11 / 20
Background
Encoding for Reactive ASP Solving
#base.
#external request(F1,F2,0) : floor(F1) : floor(F2) : F1 != F2.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
#external request(F1,F2,t) : floor(F1) : floor(F2) : F1 != F2.
...
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
...
Inputs:
#step 1.
request(2,1,1).
#endstep.
#step 2.
request(3,1,2).
#endstep.
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 11 / 20
Background
Encoding for Reactive ASP Solving
#base.
#external request(F1,F2,0) : floor(F1) : floor(F2) : F1 != F2.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
#external request(F1,F2,t) : floor(F1) : floor(F2) : F1 != F2.
...
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
...
Inputs:
#step 1.
request(2,1,1).
#endstep.
#step 2.
request(3,1,2).
#endstep.
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 11 / 20
Background
Encoding for Reactive ASP Solving
#base.
#external request(F1,F2,0) : floor(F1) : floor(F2) : F1 != F2.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
#external request(F1,F2,t) : floor(F1) : floor(F2) : F1 != F2.
...
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
...
Inputs:
#step 1.
request(2,1,1).
#endstep.
#step 2.
request(3,1,2).
#endstep.
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 11 / 20
Background
Reactive ASP Solving
oclingo-3 <files> + controller.py
Request 1:
Solving... Solving... Solving...
Answer: 1
move(1,2) move(-1,3)
Request 2:
Solving... Solving... Solving...
Answer: 1
move(1,2) move(1,3) move(-1,4) move(-1,5)
1
2
3
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 12 / 20
Background
Reactive ASP Solving
oclingo-3 <files> + controller.py
Request 1:
Solving... Solving... Solving...
Answer: 1
move(1,2) move(-1,3)
Request 2:
Solving... Solving... Solving...
Answer: 1
move(1,2) move(1,3) move(-1,4) move(-1,5)
1
2
3
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 12 / 20
Background
Reactive ASP Solving
oclingo-3 <files> + controller.py
Request 1:
Solving... Solving... Solving...
Answer: 1
move(1,2) move(-1,3)
Request 2:
Solving... Solving... Solving...
Answer: 1
move(1,2) move(1,3) move(-1,4) move(-1,5)
1
2
3
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 12 / 20
Background
Reactive ASP Solving
oclingo-3 <files> + controller.py
Request 1:
Solving... Solving... Solving...
Answer: 1
move(1,2) move(-1,3)
Request 2:
Solving... Solving... Solving...
Answer: 1
move(1,2) move(1,3) move(-1,4) move(-1,5)
1
2
3
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 12 / 20
Background
Reactive ASP Solving
oclingo-3 <files> + controller.py
Request 1:
Solving... Solving... Solving...
Answer: 1
move(1,2) move(-1,3)
Request 2:
Solving... Solving... Solving...
Answer: 1
move(1,2) move(1,3) move(-1,4) move(-1,5)
1
2
3
1
2
3
1
1
2
3
1 2 3
1
2
3
1
2
1
2
3
1
2
2
3 4
5
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 12 / 20
(More) Control
Outline
1 Background
2 (More) Control
3 Summary
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 13 / 20
(More) Control
Clingo 4 Approach
Custom grounding and solving via embedded scripting languages
Lua: main(prg), prg:ground(parts), prg:solve(), . . .
Python: main(prg), prg.ground(parts), prg.solve(), . . .
Library: prg.ground(parts), prg.solve(), . . .
Predecessor systems can easily be scripted
One-shot ASP solving (default): (ground | solve)
Incremental ASP solving: (ground | solve)∗
Reactive ASP solving: (ground∗
| solve)∗
. . .
Clingo: ASP + Control
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 14 / 20
(More) Control
Clingo 4 Approach
Custom grounding and solving via embedded scripting languages
Lua: main(prg), prg:ground(parts), prg:solve(), . . .
Python: main(prg), prg.ground(parts), prg.solve(), . . .
Library: prg.ground(parts), prg.solve(), . . .
Predecessor systems can easily be scripted
One-shot ASP solving (default): (ground | solve)
Incremental ASP solving: (ground | solve)∗
Reactive ASP solving: (ground∗
| solve)∗
. . .
Clingo: ASP + Control
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 14 / 20
(More) Control
Clingo 4 Approach
Custom grounding and solving via embedded scripting languages
Lua: main(prg), prg:ground(parts), prg:solve(), . . .
Python: main(prg), prg.ground(parts), prg.solve(), . . .
Library: prg.ground(parts), prg.solve(), . . .
Predecessor systems can easily be scripted
One-shot ASP solving (default): (ground | solve)
Incremental ASP solving: (ground | solve)∗
Reactive ASP solving: (ground∗
| solve)∗
. . .
Clingo: ASP + Control
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 14 / 20
(More) Control
Clingo 4 Approach
Custom grounding and solving via embedded scripting languages
Lua: main(prg), prg:ground(parts), prg:solve(), . . .
Python: main(prg), prg.ground(parts), prg.solve(), . . .
Library: prg.ground(parts), prg.solve(), . . .
Predecessor systems can easily be scripted
One-shot ASP solving (default): (ground | solve)
Incremental ASP solving: (ground | solve)∗
Reactive ASP solving: (ground∗
| solve)∗
. . .
Clingo: ASP + Control
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 14 / 20
(More) Control
Clingo 4 Approach
Custom grounding and solving via embedded scripting languages
Lua: main(prg), prg:ground(parts), prg:solve(), . . .
Python: main(prg), prg.ground(parts), prg.solve(), . . .
Library: prg.ground(parts), prg.solve(), . . .
Predecessor systems can easily be scripted
One-shot ASP solving (default): (ground | solve)
Incremental ASP solving: (ground | solve)∗
Reactive ASP solving: (ground∗
| solve)∗
. . .
Clingo: ASP + Control
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 14 / 20
(More) Control
Encoding for Incremental ASP Solving
#base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
at(F, t) :- at(F,t-1), not move(t).
at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D).
:- not 1 { at(F,t) } 1.
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
...
:- open(t-1), not move(t).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 15 / 20
(More) Control
Encoding for Incremental ASP Solving
#base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
at(F, t) :- at(F,t-1), not move(t).
at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D).
:- not 1 { at(F,t) } 1.
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
...
:- open(t-1), not move(t).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 15 / 20
(More) Control
Encoding for Incremental ASP Solving
#program base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
at(F, t) :- at(F,t-1), not move(t).
at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D).
:- not 1 { at(F,t) } 1.
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
...
:- open(t-1), not move(t).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 15 / 20
(More) Control
Encoding for Incremental ASP Solving
#program base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#cumulative t.
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
at(F, t) :- at(F,t-1), not move(t).
at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D).
:- not 1 { at(F,t) } 1.
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
...
:- open(t-1), not move(t).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 15 / 20
(More) Control
Encoding for Incremental ASP Solving
#program base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#program cumulative(t).
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
at(F, t) :- at(F,t-1), not move(t).
at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D).
:- not 1 { at(F,t) } 1.
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
...
:- open(t-1), not move(t).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 15 / 20
(More) Control
Encoding for Incremental ASP Solving
#program base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#program cumulative(t).
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
at(F, t) :- at(F,t-1), not move(t).
at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D).
:- not 1 { at(F,t) } 1.
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
...
:- open(t-1), not move(t).
#volatile t.
:- open(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 15 / 20
(More) Control
Encoding for Incremental ASP Solving
#program base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#program cumulative(t).
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
at(F, t) :- at(F,t-1), not move(t).
at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D).
:- not 1 { at(F,t) } 1.
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
...
:- open(t-1), not move(t).
#external query(t).
:- open(t), query(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 15 / 20
(More) Control
Script for Incremental ASP Solving
#script(python)
from gringo import *
def main(prg):
imin = prg.get const("imin")
if imin == None: imin = 1
step = 0
parts = [("base", [])]
while True:
if step < imin:
step = step+1
parts.append(("cumulative", [step]))
if step == imin:
prg.ground(parts)
parts = []
prg.assign external(Fun("query", [step]), True)
ret = prg.solve()
if ret == SolveResult.SAT: break
prg.release external(Fun("query", [step]))
imin = imin+1
#end.
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
(More) Control
Script for Incremental ASP Solving
#script(python)
from gringo import *
def main(prg):
imin = prg.get const("imin")
if imin == None: imin = 1
step = 0
parts = [("base", [])]
while True:
if step < imin:
step = step+1
parts.append(("cumulative", [step]))
if step == imin:
prg.ground(parts)
parts = []
prg.assign external(Fun("query", [step]), True)
ret = prg.solve()
if ret == SolveResult.SAT: break
prg.release external(Fun("query", [step]))
imin = imin+1
#end.
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
(More) Control
Script for Incremental ASP Solving
#script(python)
from gringo import *
def main(prg):
imin = prg.get const("imin")
if imin == None: imin = 1
step = 0
parts = [("base", [])]
while True:
if step < imin:
step = step+1
parts.append(("cumulative", [step]))
if step == imin:
prg.ground(parts)
parts = []
prg.assign external(Fun("query", [step]), True)
ret = prg.solve()
if ret == SolveResult.SAT: break
prg.release external(Fun("query", [step]))
imin = imin+1
#end.
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
(More) Control
Script for Incremental ASP Solving
#script(python)
from gringo import *
def main(prg):
imin = prg.get const("imin")
if imin == None: imin = 1
step = 0
parts = [("base", [])]
while True:
if step < imin:
step = step+1
parts.append(("cumulative", [step]))
if step == imin:
prg.ground(parts)
parts = []
prg.assign external(Fun("query", [step]), True)
ret = prg.solve()
if ret == SolveResult.SAT: break
prg.release external(Fun("query", [step]))
imin = imin+1
#end.
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
(More) Control
Script for Incremental ASP Solving
#script(python)
from gringo import *
def main(prg):
imin = prg.get const("imin")
if imin == None: imin = 1
step = 0
parts = [("base", [])]
while True:
if step < imin:
step = step+1
parts.append(("cumulative", [step]))
if step == imin:
prg.ground(parts)
parts = []
prg.assign external(Fun("query", [step]), True)
ret = prg.solve()
if ret == SolveResult.SAT: break
prg.release external(Fun("query", [step]))
imin = imin+1
#end.
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
(More) Control
Script for Incremental ASP Solving
#script(python)
from gringo import *
def main(prg):
imin = prg.get const("imin")
if imin == None: imin = 1
step = 0
parts = [("base", [])]
while True:
if step < imin:
step = step+1
parts.append(("cumulative", [step]))
if step == imin:
prg.ground(parts)
parts = []
prg.assign external(Fun("query", [step]), True)
ret = prg.solve()
if ret == SolveResult.SAT: break
prg.release external(Fun("query", [step]))
imin = imin+1
#end.
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
(More) Control
Script for Incremental ASP Solving
#script(python)
from gringo import *
def main(prg):
imin = prg.get const("imin")
if imin == None: imin = 1
step = 0
parts = [("base", [])]
while True:
if step < imin:
step = step+1
parts.append(("cumulative", [step]))
if step == imin:
prg.ground(parts)
parts = []
prg.assign external(Fun("query", [step]), True)
ret = prg.solve()
if ret == SolveResult.SAT: break
prg.release external(Fun("query", [step]))
imin = imin+1
#end.
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
(More) Control
Script for Incremental ASP Solving
#script(python)
from gringo import *
def main(prg):
imin = prg.get const("imin")
if imin == None: imin = 1
step = 0
parts = [("base", [])]
while True:
if step < imin:
step = step+1
parts.append(("cumulative", [step]))
if step == imin:
prg.ground(parts)
parts = []
prg.assign external(Fun("query", [step]), True)
ret = prg.solve()
if ret == SolveResult.SAT: break
prg.release external(Fun("query", [step]))
imin = imin+1
#end.
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
(More) Control
My Script for Incremental ASP Solving
#script(python)
from gringo import *
def main(prg):
imin = prg.get const("imin")
if imin == None: imin = 1
step = 0
parts = [("base", [])]
while True:
if step < imin:
step = step+1
parts.append(("cumulative", [step]))
if step == imin:
prg.ground(parts)
parts = []
prg.assign external(Fun("query", [step]), True)
ret = prg.solve()
if ret == SolveResult.SAT: break
prg.release external(Fun("query", [step]))
imin = imin+1
#end.
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
(More) Control
My Script for Incremental ASP Solving
#script(python)
from gringo import *
def main(prg):
imin = prg.get const("imin")
if imin == None: imin = 1
step = 0
parts = [("base", []), ("task", [step])]
while True:
if step < imin:
step = step+1
parts.append(("cumulative", [step]))
parts.append(("task", [step]))
if step == imin:
prg.ground(parts)
parts = []
ret = prg.solve()
if ret == SolveResult.SAT: break
imin = imin+1
#end.
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
(More) Control
My Encoding for Incremental ASP Solving
#program base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#program cumulative(t).
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
...
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
open(t) :- task(F1,F2,D,t).
open(t) :- exec(F2,D,t), not at(F2,t).
:- move(t), not open(t-1).
:- open(t-1), not move(t).
#external query(t).
:- open(t), query(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
(More) Control
My Encoding for Incremental ASP Solving
#program base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#program cumulative(t).
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
...
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
open(t) :- task(F1,F2,D,t).
open(t) :- exec(F2,D,t), not at(F2,t).
:- move(t), not open(t-1).
:- open(t-1), not move(t).
#external query(t).
:- open(t), query(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
(More) Control
My Encoding for Incremental ASP Solving
#program base.
diff(-1;1).
task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|.
#program cumulative(t).
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
...
% Pending requests
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
open(t) :- task(F1,F2,D,t).
open(t) :- exec(F2,D,t), not at(F2,t).
:- move(t), not open(t-1).
:- open(t-1), not move(t).
#external query(t).
:- open(t), query(t).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
(More) Control
My Encoding for Incremental ASP Solving
#program base.
diff(-1;1).
#program task(t).
#external move(t+1).
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
open(t) :- task(F1,F2,D,t).
:- open(t), not move(t+1).
#program cumulative(t).
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
...
% Pending requests
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
open(t) :- exec(F2,D,t), not at(F2,t).
:- move(t), not open(t-1).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
(More) Control
My Encoding for Incremental ASP Solving
#program base.
diff(-1;1).
#program task(t).
#external move(t+1).
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
open(t) :- task(F1,F2,D,t).
:- open(t), not move(t+1).
#program cumulative(t).
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
...
% Pending requests
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
open(t) :- exec(F2,D,t), not at(F2,t).
:- move(t), not open(t-1).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
(More) Control
My Encoding for Incremental ASP Solving
#program base.
diff(-1;1).
#program task(t).
#external move(t+1).
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
open(t) :- task(F1,F2,D,t).
:- open(t), not move(t+1).
#program cumulative(t).
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
...
% Pending requests
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t).
% Move iff there is some task to process
open(t) :- exec(F2,D,t), not at(F2,t).
:- move(t), not open(t-1).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
(More) Control
My Encoding for Incremental ASP Solving
#program base.
diff(-1;1).
#program task(t).
#external move(t+1).
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
open(t) :- task(F1,F2,D,t).
:- open(t), not move(t+1).
#program cumulative(t).
#external move(D,t+1) : diff(D).
#external exec(D,t+1) : diff(D).
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
...
% Pending requests
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t), not move(D,t+1), not exec(D,t), not exec(-D,t+1).
% Move iff there is some task to process
open(t) :- exec(F2,D,t), not at(F2,t).
:- move(t), not open(t-1).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
(More) Control
My Encoding for Incremental ASP Solving
#program base.
diff(-1;1).
#program task(t).
#external move(t+1).
task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|.
open(t) :- task(F1,F2,D,t).
:- open(t), not move(t+1).
#program cumulative(t).
#external move(D,t+1) : diff(D).
#external exec(D,t+1) : diff(D).
{ move(D,t) : diff(D) } 1.
move(t) :- move(D,t).
% State update
...
% Pending requests
task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t).
% Started tasks must be processed till completion
...
:- move(D,t), not move(D,t+1), not exec(D,t), not exec(-D,t+1).
% Move iff there is some task to process
open(t) :- exec(F2,D,t), not at(F2,t).
:- move(t), not open(t-1).
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
(More) Control
Custom ASP Solving
Encoding consisting of named and parameterizable subprograms
#program base. (default), #program cumulative(t)., . . .
External (yet undefined) atoms provide input interface to other parts
#external <atom> [ : <body> ].
Embedded scripts allow for flexible grounding and solving control
#script(python | lua) . . . main(prg) . . . #end.
Instantiation triggered by passing subprogram names plus arguments
prg.ground([("base", []), ("task", [step])])
Ground program parts constitute modules (with disjoint head atoms)
Search for stable models of ground program parts stored by solver
prg.solve(), prg.solve(on model = pretty print), . . .
Incremental and/or reactive ASP solving via “i/oClingo” scripts
#include <iclingo>.
prg.add("request1", [], "request(2,1,1).")
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 18 / 20
(More) Control
Custom ASP Solving
Encoding consisting of named and parameterizable subprograms
#program base. (default), #program cumulative(t)., . . .
External (yet undefined) atoms provide input interface to other parts
#external <atom> [ : <body> ].
Embedded scripts allow for flexible grounding and solving control
#script(python | lua) . . . main(prg) . . . #end.
Instantiation triggered by passing subprogram names plus arguments
prg.ground([("base", []), ("task", [step])])
Ground program parts constitute modules (with disjoint head atoms)
Search for stable models of ground program parts stored by solver
prg.solve(), prg.solve(on model = pretty print), . . .
Incremental and/or reactive ASP solving via “i/oClingo” scripts
#include <iclingo>.
prg.add("request1", [], "request(2,1,1).")
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 18 / 20
(More) Control
Custom ASP Solving
Encoding consisting of named and parameterizable subprograms
#program base. (default), #program cumulative(t)., . . .
External (yet undefined) atoms provide input interface to other parts
#external <atom> [ : <body> ].
Embedded scripts allow for flexible grounding and solving control
#script(python | lua) . . . main(prg) . . . #end.
Instantiation triggered by passing subprogram names plus arguments
prg.ground([("base", []), ("task", [step])])
Ground program parts constitute modules (with disjoint head atoms)
Search for stable models of ground program parts stored by solver
prg.solve(), prg.solve(on model = pretty print), . . .
Incremental and/or reactive ASP solving via “i/oClingo” scripts
#include <iclingo>.
prg.add("request1", [], "request(2,1,1).")
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 18 / 20
Summary
Outline
1 Background
2 (More) Control
3 Summary
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 19 / 20
Summary
Summary
ASP as an under-the-hood technology !
Clingo 4
Multi-shot ASP solving
Continuously changing programs
Opens up new areas of applications
Agents
Policies
Planning
Robotics
Interaction
Theory solving
Query-answering
. . .
http://potassco.sourceforge.net
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 20 / 20
Summary
Summary
ASP as an under-the-hood technology !
Clingo 4
Multi-shot ASP solving
Continuously changing programs
Opens up new areas of applications
Agents
Policies
Planning
Robotics
Interaction
Theory solving
Query-answering
. . .
http://potassco.sourceforge.net
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 20 / 20
Summary
Summary
ASP as an under-the-hood technology !
Clingo 4
Multi-shot ASP solving
Continuously changing programs
Opens up new areas of applications
Agents
Policies
Planning
Robotics
Interaction
Theory solving
Query-answering
. . .
http://potassco.sourceforge.net
M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 20 / 20

More Related Content

What's hot

Python programs - first semester computer lab manual (polytechnics)
Python programs - first semester computer lab manual (polytechnics)Python programs - first semester computer lab manual (polytechnics)
Python programs - first semester computer lab manual (polytechnics)
SHAMJITH KM
 
Register Allocation
Register AllocationRegister Allocation
Register Allocation
Eelco Visser
 
Algorithum Analysis
Algorithum AnalysisAlgorithum Analysis
Algorithum Analysis
Ain-ul-Moiz Khawaja
 
Asymptotic Notations
Asymptotic NotationsAsymptotic Notations
Asymptotic Notations
Rishabh Soni
 
Asymptotic notation
Asymptotic notationAsymptotic notation
Asymptotic notation
Saranya Natarajan
 
asymptotic notations i
asymptotic notations iasymptotic notations i
asymptotic notations i
Ali mahmood
 
Asymptotic notation
Asymptotic notationAsymptotic notation
Asymptotic notation
mustafa sarac
 
Lec 5 asymptotic notations and recurrences
Lec 5 asymptotic notations and recurrencesLec 5 asymptotic notations and recurrences
Lec 5 asymptotic notations and recurrences
Ankita Karia
 
Asymptotic notations
Asymptotic notationsAsymptotic notations
Asymptotic notations
Mamta Pandey
 
Python programs - PPT file (Polytechnics)
Python programs - PPT file (Polytechnics)Python programs - PPT file (Polytechnics)
Python programs - PPT file (Polytechnics)
SHAMJITH KM
 
Lisp programming
Lisp programmingLisp programming
Lisp programming
ilias ahmed
 
Asymptotic notation
Asymptotic notationAsymptotic notation
Asymptotic notation
Dr Shashikant Athawale
 
Algorithm Class at KPHB (C, C++ Course Training Institute in KPHB, Kukatpally...
Algorithm Class at KPHB (C, C++ Course Training Institute in KPHB, Kukatpally...Algorithm Class at KPHB (C, C++ Course Training Institute in KPHB, Kukatpally...
Algorithm Class at KPHB (C, C++ Course Training Institute in KPHB, Kukatpally...
http://algorithmtraining.com/advanced-python-training-hyderabad/
 
Asymptotic notations
Asymptotic notationsAsymptotic notations
Algorithm Analysis
Algorithm AnalysisAlgorithm Analysis
Algorithm Analysis
Megha V
 
Dsoop (co 221) 1
Dsoop (co 221) 1Dsoop (co 221) 1
Dsoop (co 221) 1
Puja Koch
 
Summary topic 5 functions&amp;graph
Summary topic 5 functions&amp;graphSummary topic 5 functions&amp;graph
Summary topic 5 functions&amp;graph
jessylingmy
 

What's hot (17)

Python programs - first semester computer lab manual (polytechnics)
Python programs - first semester computer lab manual (polytechnics)Python programs - first semester computer lab manual (polytechnics)
Python programs - first semester computer lab manual (polytechnics)
 
Register Allocation
Register AllocationRegister Allocation
Register Allocation
 
Algorithum Analysis
Algorithum AnalysisAlgorithum Analysis
Algorithum Analysis
 
Asymptotic Notations
Asymptotic NotationsAsymptotic Notations
Asymptotic Notations
 
Asymptotic notation
Asymptotic notationAsymptotic notation
Asymptotic notation
 
asymptotic notations i
asymptotic notations iasymptotic notations i
asymptotic notations i
 
Asymptotic notation
Asymptotic notationAsymptotic notation
Asymptotic notation
 
Lec 5 asymptotic notations and recurrences
Lec 5 asymptotic notations and recurrencesLec 5 asymptotic notations and recurrences
Lec 5 asymptotic notations and recurrences
 
Asymptotic notations
Asymptotic notationsAsymptotic notations
Asymptotic notations
 
Python programs - PPT file (Polytechnics)
Python programs - PPT file (Polytechnics)Python programs - PPT file (Polytechnics)
Python programs - PPT file (Polytechnics)
 
Lisp programming
Lisp programmingLisp programming
Lisp programming
 
Asymptotic notation
Asymptotic notationAsymptotic notation
Asymptotic notation
 
Algorithm Class at KPHB (C, C++ Course Training Institute in KPHB, Kukatpally...
Algorithm Class at KPHB (C, C++ Course Training Institute in KPHB, Kukatpally...Algorithm Class at KPHB (C, C++ Course Training Institute in KPHB, Kukatpally...
Algorithm Class at KPHB (C, C++ Course Training Institute in KPHB, Kukatpally...
 
Asymptotic notations
Asymptotic notationsAsymptotic notations
Asymptotic notations
 
Algorithm Analysis
Algorithm AnalysisAlgorithm Analysis
Algorithm Analysis
 
Dsoop (co 221) 1
Dsoop (co 221) 1Dsoop (co 221) 1
Dsoop (co 221) 1
 
Summary topic 5 functions&amp;graph
Summary topic 5 functions&amp;graphSummary topic 5 functions&amp;graph
Summary topic 5 functions&amp;graph
 

Similar to 2015 01 09 - Rende - Unical - Martin Gebser: Clingo = Answer Set Programming + Control

1. Ch_1 SL_1_Intro to Matlab.pptx
1. Ch_1 SL_1_Intro to Matlab.pptx1. Ch_1 SL_1_Intro to Matlab.pptx
1. Ch_1 SL_1_Intro to Matlab.pptx
MOHAMMAD SAYDUL ALAM
 
dynamic programming Rod cutting class
dynamic programming Rod cutting classdynamic programming Rod cutting class
dynamic programming Rod cutting class
giridaroori
 
Computer Network Assignment Help
Computer Network Assignment HelpComputer Network Assignment Help
Computer Network Assignment Help
Computer Network Assignment Help
 
Matlab integration
Matlab integrationMatlab integration
Matlab integration
pramodkumar1804
 
Dynamic programing
Dynamic programingDynamic programing
Dynamic programing
AniketSingh609353
 
The Concurrent Constraint Programming Research Programmes -- Redux (part2)
The Concurrent Constraint Programming Research Programmes -- Redux (part2)The Concurrent Constraint Programming Research Programmes -- Redux (part2)
The Concurrent Constraint Programming Research Programmes -- Redux (part2)
Pierre Schaus
 
A study of the worst case ratio of a simple algorithm for simple assembly lin...
A study of the worst case ratio of a simple algorithm for simple assembly lin...A study of the worst case ratio of a simple algorithm for simple assembly lin...
A study of the worst case ratio of a simple algorithm for simple assembly lin...
narmo
 
lecture01_lecture01_lecture0001_ceva.pdf
lecture01_lecture01_lecture0001_ceva.pdflecture01_lecture01_lecture0001_ceva.pdf
lecture01_lecture01_lecture0001_ceva.pdf
AnaNeacsu5
 
High-Performance Haskell
High-Performance HaskellHigh-Performance Haskell
High-Performance Haskell
Johan Tibell
 
Symbolic Execution as DPLL Modulo Theories
Symbolic Execution as DPLL Modulo TheoriesSymbolic Execution as DPLL Modulo Theories
Symbolic Execution as DPLL Modulo Theories
Quoc-Sang Phan
 
Programming Exam Help
 Programming Exam Help Programming Exam Help
Programming Exam Help
economicsexamhelp1
 
Need for Controllers having Integer Coefficients in Homomorphically Encrypted D...
Need for Controllers having Integer Coefficients in Homomorphically Encrypted D...Need for Controllers having Integer Coefficients in Homomorphically Encrypted D...
Need for Controllers having Integer Coefficients in Homomorphically Encrypted D...
CDSL_at_SNU
 
Analysis Of Algorithms I
Analysis Of Algorithms IAnalysis Of Algorithms I
Analysis Of Algorithms I
Sri Prasanna
 
Matlab booklet
Matlab bookletMatlab booklet
Matlab booklet
Sourabh Bhattacharya
 
Algorithms Design Exam Help
Algorithms Design Exam HelpAlgorithms Design Exam Help
Algorithms Design Exam Help
Programming Exam Help
 
Dynamic Programming - Part 1
Dynamic Programming - Part 1Dynamic Programming - Part 1
Dynamic Programming - Part 1
Amrinder Arora
 
1.6 all notes
1.6 all notes1.6 all notes
1.6 all notes
Lorie Blickhan
 
dynamic programming complete by Mumtaz Ali (03154103173)
dynamic programming complete by Mumtaz Ali (03154103173)dynamic programming complete by Mumtaz Ali (03154103173)
dynamic programming complete by Mumtaz Ali (03154103173)
Mumtaz Ali
 
how to calclute time complexity of algortihm
how to calclute time complexity of algortihmhow to calclute time complexity of algortihm
how to calclute time complexity of algortihm
Sajid Marwat
 
Algorithms Design Homework Help
Algorithms Design Homework HelpAlgorithms Design Homework Help
Algorithms Design Homework Help
Programming Homework Help
 

Similar to 2015 01 09 - Rende - Unical - Martin Gebser: Clingo = Answer Set Programming + Control (20)

1. Ch_1 SL_1_Intro to Matlab.pptx
1. Ch_1 SL_1_Intro to Matlab.pptx1. Ch_1 SL_1_Intro to Matlab.pptx
1. Ch_1 SL_1_Intro to Matlab.pptx
 
dynamic programming Rod cutting class
dynamic programming Rod cutting classdynamic programming Rod cutting class
dynamic programming Rod cutting class
 
Computer Network Assignment Help
Computer Network Assignment HelpComputer Network Assignment Help
Computer Network Assignment Help
 
Matlab integration
Matlab integrationMatlab integration
Matlab integration
 
Dynamic programing
Dynamic programingDynamic programing
Dynamic programing
 
The Concurrent Constraint Programming Research Programmes -- Redux (part2)
The Concurrent Constraint Programming Research Programmes -- Redux (part2)The Concurrent Constraint Programming Research Programmes -- Redux (part2)
The Concurrent Constraint Programming Research Programmes -- Redux (part2)
 
A study of the worst case ratio of a simple algorithm for simple assembly lin...
A study of the worst case ratio of a simple algorithm for simple assembly lin...A study of the worst case ratio of a simple algorithm for simple assembly lin...
A study of the worst case ratio of a simple algorithm for simple assembly lin...
 
lecture01_lecture01_lecture0001_ceva.pdf
lecture01_lecture01_lecture0001_ceva.pdflecture01_lecture01_lecture0001_ceva.pdf
lecture01_lecture01_lecture0001_ceva.pdf
 
High-Performance Haskell
High-Performance HaskellHigh-Performance Haskell
High-Performance Haskell
 
Symbolic Execution as DPLL Modulo Theories
Symbolic Execution as DPLL Modulo TheoriesSymbolic Execution as DPLL Modulo Theories
Symbolic Execution as DPLL Modulo Theories
 
Programming Exam Help
 Programming Exam Help Programming Exam Help
Programming Exam Help
 
Need for Controllers having Integer Coefficients in Homomorphically Encrypted D...
Need for Controllers having Integer Coefficients in Homomorphically Encrypted D...Need for Controllers having Integer Coefficients in Homomorphically Encrypted D...
Need for Controllers having Integer Coefficients in Homomorphically Encrypted D...
 
Analysis Of Algorithms I
Analysis Of Algorithms IAnalysis Of Algorithms I
Analysis Of Algorithms I
 
Matlab booklet
Matlab bookletMatlab booklet
Matlab booklet
 
Algorithms Design Exam Help
Algorithms Design Exam HelpAlgorithms Design Exam Help
Algorithms Design Exam Help
 
Dynamic Programming - Part 1
Dynamic Programming - Part 1Dynamic Programming - Part 1
Dynamic Programming - Part 1
 
1.6 all notes
1.6 all notes1.6 all notes
1.6 all notes
 
dynamic programming complete by Mumtaz Ali (03154103173)
dynamic programming complete by Mumtaz Ali (03154103173)dynamic programming complete by Mumtaz Ali (03154103173)
dynamic programming complete by Mumtaz Ali (03154103173)
 
how to calclute time complexity of algortihm
how to calclute time complexity of algortihmhow to calclute time complexity of algortihm
how to calclute time complexity of algortihm
 
Algorithms Design Homework Help
Algorithms Design Homework HelpAlgorithms Design Homework Help
Algorithms Design Homework Help
 

More from kaliaragorn

angryhex_slides2014.pdf
angryhex_slides2014.pdfangryhex_slides2014.pdf
angryhex_slides2014.pdf
kaliaragorn
 
Architettura dei calcolatori
Architettura dei calcolatoriArchitettura dei calcolatori
Architettura dei calcolatori
kaliaragorn
 
2016 attestati partecipazione m01
2016   attestati partecipazione m012016   attestati partecipazione m01
2016 attestati partecipazione m01
kaliaragorn
 
2016 04 - Attestati Partecipazione Seminario "L'informatica oggi: applicazion...
2016 04 - Attestati Partecipazione Seminario "L'informatica oggi: applicazion...2016 04 - Attestati Partecipazione Seminario "L'informatica oggi: applicazion...
2016 04 - Attestati Partecipazione Seminario "L'informatica oggi: applicazion...
kaliaragorn
 
Nuvola rosa 2016
Nuvola rosa 2016Nuvola rosa 2016
Nuvola rosa 2016
kaliaragorn
 
Introduzione alla logica
Introduzione alla logicaIntroduzione alla logica
Introduzione alla logica
kaliaragorn
 
Flier cuda - Dipartimento di matematica e informatica - Università della Cala...
Flier cuda - Dipartimento di matematica e informatica - Università della Cala...Flier cuda - Dipartimento di matematica e informatica - Università della Cala...
Flier cuda - Dipartimento di matematica e informatica - Università della Cala...
kaliaragorn
 
2015 01 22 - Rende - Unical - Angelo Fanelli: An Overview of Congestion Games
2015 01 22 - Rende - Unical - Angelo Fanelli: An Overview of Congestion Games2015 01 22 - Rende - Unical - Angelo Fanelli: An Overview of Congestion Games
2015 01 22 - Rende - Unical - Angelo Fanelli: An Overview of Congestion Games
kaliaragorn
 

More from kaliaragorn (8)

angryhex_slides2014.pdf
angryhex_slides2014.pdfangryhex_slides2014.pdf
angryhex_slides2014.pdf
 
Architettura dei calcolatori
Architettura dei calcolatoriArchitettura dei calcolatori
Architettura dei calcolatori
 
2016 attestati partecipazione m01
2016   attestati partecipazione m012016   attestati partecipazione m01
2016 attestati partecipazione m01
 
2016 04 - Attestati Partecipazione Seminario "L'informatica oggi: applicazion...
2016 04 - Attestati Partecipazione Seminario "L'informatica oggi: applicazion...2016 04 - Attestati Partecipazione Seminario "L'informatica oggi: applicazion...
2016 04 - Attestati Partecipazione Seminario "L'informatica oggi: applicazion...
 
Nuvola rosa 2016
Nuvola rosa 2016Nuvola rosa 2016
Nuvola rosa 2016
 
Introduzione alla logica
Introduzione alla logicaIntroduzione alla logica
Introduzione alla logica
 
Flier cuda - Dipartimento di matematica e informatica - Università della Cala...
Flier cuda - Dipartimento di matematica e informatica - Università della Cala...Flier cuda - Dipartimento di matematica e informatica - Università della Cala...
Flier cuda - Dipartimento di matematica e informatica - Università della Cala...
 
2015 01 22 - Rende - Unical - Angelo Fanelli: An Overview of Congestion Games
2015 01 22 - Rende - Unical - Angelo Fanelli: An Overview of Congestion Games2015 01 22 - Rende - Unical - Angelo Fanelli: An Overview of Congestion Games
2015 01 22 - Rende - Unical - Angelo Fanelli: An Overview of Congestion Games
 

Recently uploaded

Cytokines and their role in immune regulation.pptx
Cytokines and their role in immune regulation.pptxCytokines and their role in immune regulation.pptx
Cytokines and their role in immune regulation.pptx
Hitesh Sikarwar
 
如何办理(uvic毕业证书)维多利亚大学毕业证本科学位证书原版一模一样
如何办理(uvic毕业证书)维多利亚大学毕业证本科学位证书原版一模一样如何办理(uvic毕业证书)维多利亚大学毕业证本科学位证书原版一模一样
如何办理(uvic毕业证书)维多利亚大学毕业证本科学位证书原版一模一样
yqqaatn0
 
Bob Reedy - Nitrate in Texas Groundwater.pdf
Bob Reedy - Nitrate in Texas Groundwater.pdfBob Reedy - Nitrate in Texas Groundwater.pdf
Bob Reedy - Nitrate in Texas Groundwater.pdf
Texas Alliance of Groundwater Districts
 
EWOCS-I: The catalog of X-ray sources in Westerlund 1 from the Extended Weste...
EWOCS-I: The catalog of X-ray sources in Westerlund 1 from the Extended Weste...EWOCS-I: The catalog of X-ray sources in Westerlund 1 from the Extended Weste...
EWOCS-I: The catalog of X-ray sources in Westerlund 1 from the Extended Weste...
Sérgio Sacani
 
3D Hybrid PIC simulation of the plasma expansion (ISSS-14)
3D Hybrid PIC simulation of the plasma expansion (ISSS-14)3D Hybrid PIC simulation of the plasma expansion (ISSS-14)
3D Hybrid PIC simulation of the plasma expansion (ISSS-14)
David Osipyan
 
Micronuclei test.M.sc.zoology.fisheries.
Micronuclei test.M.sc.zoology.fisheries.Micronuclei test.M.sc.zoology.fisheries.
Micronuclei test.M.sc.zoology.fisheries.
Aditi Bajpai
 
aziz sancar nobel prize winner: from mardin to nobel
aziz sancar nobel prize winner: from mardin to nobelaziz sancar nobel prize winner: from mardin to nobel
aziz sancar nobel prize winner: from mardin to nobel
İsa Badur
 
8.Isolation of pure cultures and preservation of cultures.pdf
8.Isolation of pure cultures and preservation of cultures.pdf8.Isolation of pure cultures and preservation of cultures.pdf
8.Isolation of pure cultures and preservation of cultures.pdf
by6843629
 
The debris of the ‘last major merger’ is dynamically young
The debris of the ‘last major merger’ is dynamically youngThe debris of the ‘last major merger’ is dynamically young
The debris of the ‘last major merger’ is dynamically young
Sérgio Sacani
 
Nucleic Acid-its structural and functional complexity.
Nucleic Acid-its structural and functional complexity.Nucleic Acid-its structural and functional complexity.
Nucleic Acid-its structural and functional complexity.
Nistarini College, Purulia (W.B) India
 
Phenomics assisted breeding in crop improvement
Phenomics assisted breeding in crop improvementPhenomics assisted breeding in crop improvement
Phenomics assisted breeding in crop improvement
IshaGoswami9
 
Thornton ESPP slides UK WW Network 4_6_24.pdf
Thornton ESPP slides UK WW Network 4_6_24.pdfThornton ESPP slides UK WW Network 4_6_24.pdf
Thornton ESPP slides UK WW Network 4_6_24.pdf
European Sustainable Phosphorus Platform
 
Topic: SICKLE CELL DISEASE IN CHILDREN-3.pdf
Topic: SICKLE CELL DISEASE IN CHILDREN-3.pdfTopic: SICKLE CELL DISEASE IN CHILDREN-3.pdf
Topic: SICKLE CELL DISEASE IN CHILDREN-3.pdf
TinyAnderson
 
NuGOweek 2024 Ghent programme overview flyer
NuGOweek 2024 Ghent programme overview flyerNuGOweek 2024 Ghent programme overview flyer
NuGOweek 2024 Ghent programme overview flyer
pablovgd
 
The use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptx
The use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptxThe use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptx
The use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptx
MAGOTI ERNEST
 
SAR of Medicinal Chemistry 1st by dk.pdf
SAR of Medicinal Chemistry 1st by dk.pdfSAR of Medicinal Chemistry 1st by dk.pdf
SAR of Medicinal Chemistry 1st by dk.pdf
KrushnaDarade1
 
Oedema_types_causes_pathophysiology.pptx
Oedema_types_causes_pathophysiology.pptxOedema_types_causes_pathophysiology.pptx
Oedema_types_causes_pathophysiology.pptx
muralinath2
 
Comparing Evolved Extractive Text Summary Scores of Bidirectional Encoder Rep...
Comparing Evolved Extractive Text Summary Scores of Bidirectional Encoder Rep...Comparing Evolved Extractive Text Summary Scores of Bidirectional Encoder Rep...
Comparing Evolved Extractive Text Summary Scores of Bidirectional Encoder Rep...
University of Maribor
 
The binding of cosmological structures by massless topological defects
The binding of cosmological structures by massless topological defectsThe binding of cosmological structures by massless topological defects
The binding of cosmological structures by massless topological defects
Sérgio Sacani
 
molar-distalization in orthodontics-seminar.pptx
molar-distalization in orthodontics-seminar.pptxmolar-distalization in orthodontics-seminar.pptx
molar-distalization in orthodontics-seminar.pptx
Anagha Prasad
 

Recently uploaded (20)

Cytokines and their role in immune regulation.pptx
Cytokines and their role in immune regulation.pptxCytokines and their role in immune regulation.pptx
Cytokines and their role in immune regulation.pptx
 
如何办理(uvic毕业证书)维多利亚大学毕业证本科学位证书原版一模一样
如何办理(uvic毕业证书)维多利亚大学毕业证本科学位证书原版一模一样如何办理(uvic毕业证书)维多利亚大学毕业证本科学位证书原版一模一样
如何办理(uvic毕业证书)维多利亚大学毕业证本科学位证书原版一模一样
 
Bob Reedy - Nitrate in Texas Groundwater.pdf
Bob Reedy - Nitrate in Texas Groundwater.pdfBob Reedy - Nitrate in Texas Groundwater.pdf
Bob Reedy - Nitrate in Texas Groundwater.pdf
 
EWOCS-I: The catalog of X-ray sources in Westerlund 1 from the Extended Weste...
EWOCS-I: The catalog of X-ray sources in Westerlund 1 from the Extended Weste...EWOCS-I: The catalog of X-ray sources in Westerlund 1 from the Extended Weste...
EWOCS-I: The catalog of X-ray sources in Westerlund 1 from the Extended Weste...
 
3D Hybrid PIC simulation of the plasma expansion (ISSS-14)
3D Hybrid PIC simulation of the plasma expansion (ISSS-14)3D Hybrid PIC simulation of the plasma expansion (ISSS-14)
3D Hybrid PIC simulation of the plasma expansion (ISSS-14)
 
Micronuclei test.M.sc.zoology.fisheries.
Micronuclei test.M.sc.zoology.fisheries.Micronuclei test.M.sc.zoology.fisheries.
Micronuclei test.M.sc.zoology.fisheries.
 
aziz sancar nobel prize winner: from mardin to nobel
aziz sancar nobel prize winner: from mardin to nobelaziz sancar nobel prize winner: from mardin to nobel
aziz sancar nobel prize winner: from mardin to nobel
 
8.Isolation of pure cultures and preservation of cultures.pdf
8.Isolation of pure cultures and preservation of cultures.pdf8.Isolation of pure cultures and preservation of cultures.pdf
8.Isolation of pure cultures and preservation of cultures.pdf
 
The debris of the ‘last major merger’ is dynamically young
The debris of the ‘last major merger’ is dynamically youngThe debris of the ‘last major merger’ is dynamically young
The debris of the ‘last major merger’ is dynamically young
 
Nucleic Acid-its structural and functional complexity.
Nucleic Acid-its structural and functional complexity.Nucleic Acid-its structural and functional complexity.
Nucleic Acid-its structural and functional complexity.
 
Phenomics assisted breeding in crop improvement
Phenomics assisted breeding in crop improvementPhenomics assisted breeding in crop improvement
Phenomics assisted breeding in crop improvement
 
Thornton ESPP slides UK WW Network 4_6_24.pdf
Thornton ESPP slides UK WW Network 4_6_24.pdfThornton ESPP slides UK WW Network 4_6_24.pdf
Thornton ESPP slides UK WW Network 4_6_24.pdf
 
Topic: SICKLE CELL DISEASE IN CHILDREN-3.pdf
Topic: SICKLE CELL DISEASE IN CHILDREN-3.pdfTopic: SICKLE CELL DISEASE IN CHILDREN-3.pdf
Topic: SICKLE CELL DISEASE IN CHILDREN-3.pdf
 
NuGOweek 2024 Ghent programme overview flyer
NuGOweek 2024 Ghent programme overview flyerNuGOweek 2024 Ghent programme overview flyer
NuGOweek 2024 Ghent programme overview flyer
 
The use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptx
The use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptxThe use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptx
The use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptx
 
SAR of Medicinal Chemistry 1st by dk.pdf
SAR of Medicinal Chemistry 1st by dk.pdfSAR of Medicinal Chemistry 1st by dk.pdf
SAR of Medicinal Chemistry 1st by dk.pdf
 
Oedema_types_causes_pathophysiology.pptx
Oedema_types_causes_pathophysiology.pptxOedema_types_causes_pathophysiology.pptx
Oedema_types_causes_pathophysiology.pptx
 
Comparing Evolved Extractive Text Summary Scores of Bidirectional Encoder Rep...
Comparing Evolved Extractive Text Summary Scores of Bidirectional Encoder Rep...Comparing Evolved Extractive Text Summary Scores of Bidirectional Encoder Rep...
Comparing Evolved Extractive Text Summary Scores of Bidirectional Encoder Rep...
 
The binding of cosmological structures by massless topological defects
The binding of cosmological structures by massless topological defectsThe binding of cosmological structures by massless topological defects
The binding of cosmological structures by massless topological defects
 
molar-distalization in orthodontics-seminar.pptx
molar-distalization in orthodontics-seminar.pptxmolar-distalization in orthodontics-seminar.pptx
molar-distalization in orthodontics-seminar.pptx
 

2015 01 09 - Rende - Unical - Martin Gebser: Clingo = Answer Set Programming + Control

  • 1. Clingo = Answer Set Programming + Control Martin Gebser Roland Kaminski Benjamin Kaufmann Torsten Schaub University of Potsdam Aalto University M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 1 / 20
  • 2. Motivation ASP is an approach to declarative problem solving, combining a rich yet simple modeling language with high-performance solving capacities tailored to Knowledge Representation and Reasoning Elaborate reasoning processes feature incremental solving, as in planning or finite model finding, or even reactive solving, as in robotics or query-answering Problem Logic Program Grounder Solver Stable Models Solutions - - - ? 6 One-shot ASP Solving M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 2 / 20
  • 3. Motivation ASP is an approach to declarative problem solving, combining a rich yet simple modeling language with high-performance solving capacities tailored to Knowledge Representation and Reasoning Elaborate reasoning processes feature incremental solving, as in planning or finite model finding, or even reactive solving, as in robotics or query-answering Problem Logic Program Grounder Solver Stable Models Solutions - - - ? 6 Incremental ASP Solving 6 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 2 / 20
  • 4. Motivation ASP is an approach to declarative problem solving, combining a rich yet simple modeling language with high-performance solving capacities tailored to Knowledge Representation and Reasoning Elaborate reasoning processes feature incremental solving, as in planning or finite model finding, or even reactive solving, as in robotics or query-answering Problem Logic Program Grounder Solver Stable Models Solutions - - - ? 6 Reactive ASP Solving 66 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 2 / 20
  • 5. Outline 1 Background 2 (More) Control 3 Summary M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 3 / 20
  • 6. Background Outline 1 Background 2 (More) Control 3 Summary M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 4 / 20
  • 7. Background Clingo 3 Series One-shot ASP solving by means of grounder gringo and solver clasp Clingo: gringo | clasp Incremental ASP solving by dedicated handling of three program parts iClingo: Clingo [base ∪ n i=1cumulative(i) ∪ volatile(n)]∗ n=1 base: grounded once and stored by solver cumulative(i): grounded for increasing i-values and stored by solver volatile(i): grounded like cumulative(i) but not stored by solver Reactive ASP solving by further incorporating external program parts oClingo: iClingo [ m j=1external(j)]∗ m=1 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 5 / 20
  • 8. Background Clingo 3 Series One-shot ASP solving by means of grounder gringo and solver clasp Clingo: gringo | clasp Incremental ASP solving by dedicated handling of three program parts iClingo: Clingo [base ∪ n i=1cumulative(i) ∪ volatile(n)]∗ n=1 base: grounded once and stored by solver cumulative(i): grounded for increasing i-values and stored by solver volatile(i): grounded like cumulative(i) but not stored by solver Reactive ASP solving by further incorporating external program parts oClingo: iClingo [ m j=1external(j)]∗ m=1 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 5 / 20
  • 9. Background Clingo 3 Series One-shot ASP solving by means of grounder gringo and solver clasp Clingo: gringo | clasp Incremental ASP solving by dedicated handling of three program parts iClingo: Clingo [base ∪ n i=1cumulative(i) ∪ volatile(n)]∗ n=1 base: grounded once and stored by solver cumulative(i): grounded for increasing i-values and stored by solver volatile(i): grounded like cumulative(i) but not stored by solver Reactive ASP solving by further incorporating external program parts oClingo: iClingo [ m j=1external(j)]∗ m=1 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 5 / 20
  • 10. Background Elevator Control Example Setup: floor(1..3). at(1,0). Request 1: request(2,1,1). Request 2: request(3,1,2). 1 2 3 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 6 / 20
  • 11. Background Elevator Control Example Setup: floor(1..3). at(1,0). Request 1: request(2,1,1). Request 2: request(3,1,2). 1 2 3 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 6 / 20
  • 12. Background Elevator Control Example Setup: floor(1..3). at(1,0). Request 1: request(2,1,1). Request 2: request(3,1,2). 1 2 3 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 6 / 20
  • 13. Background Elevator Control Example Setup: floor(1..3). at(1,0). Request 1: request(2,1,1). Request 2: request(3,1,2). 1 2 3 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 6 / 20
  • 14. Background Elevator Control Example Setup: floor(1..3). at(1,0). Request 1: request(2,1,1). Request 2: request(3,1,2). 1 2 3 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 6 / 20
  • 15. Background Encoding for One-shot ASP Solving diff(-1;1). { move(D,T) : diff(D) } 1 :- time(T). move(T) :- move(D,T). % State update at(F, T) :- at(F,T-1), time(T), not move(T). at(F+D,T) :- at(F,T-1), move(D,T), floor(F+D). :- time(T), not 1 { at(F,T) } 1. % Pending requests task(F1,F2,D,T) :- request(F1,F2,T), D = (F2-F1)/|F2-F1|. task(F1,F2,D,T) :- task(F1,F2,D,T-1), time(T), not exec(F1,F2,D,T). % Started tasks must be processed till completion exec(F1,F2,D,T) :- task(F1,F2,D,T-1), at(F1,T-1), move(D,T). exec(F2,D,T) :- exec(F1,F2,D,T). exec(F2,D,T) :- exec(F2,D,T-1), time(T), not at(F2,T-1). exec(D,T) :- exec(F2,D,T). :- exec(D,T), not move(D,T). :- move(D,T), not move(D,T+1), not exec(D,T), not exec(-D,T+1). % Move iff there is some task to process open(T) :- task(F1,F2,D,T). open(T) :- exec(F2,D,T), not at(F2,T). :- move(T), not open(T-1). :- open(T), not move(T+1). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 7 / 20
  • 16. Background One-shot ASP Solving Request 1: clingo-3 <files> <(echo "time(1..3).") Solving... Answer: 1 move(1,2) move(-1,3) Request 2: clingo-3 <files> <(echo "time(1..5).") Solving... Answer: 1 move(1,2) move(1,3) move(-1,4) move(-1,5) 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 8 / 20
  • 17. Background One-shot ASP Solving Request 1: clingo-3 <files> <(echo "time(1..3).") Solving... Answer: 1 move(1,2) move(-1,3) Request 2: clingo-3 <files> <(echo "time(1..5).") Solving... Answer: 1 move(1,2) move(1,3) move(-1,4) move(-1,5) 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 8 / 20
  • 18. Background One-shot ASP Solving Request 1: clingo-3 <files> <(echo "time(1..3).") Solving... Answer: 1 move(1,2) move(-1,3) Request 2: clingo-3 <files> <(echo "time(1..5).") Solving... Answer: 1 move(1,2) move(1,3) move(-1,4) move(-1,5) 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 8 / 20
  • 19. Background One-shot ASP Solving Request 1: clingo-3 <files> <(echo "time(1..3).") Solving... Answer: 1 move(1,2) move(-1,3) Request 2: clingo-3 <files> <(echo "time(1..5).") Solving... Answer: 1 move(1,2) move(1,3) move(-1,4) move(-1,5) 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 8 / 20
  • 20. Background Encoding for Incremental ASP Solving #base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. { move(D,T) : diff(D) } 1 :- time(T). move(T) :- move(D,T). % State update at(F, T) :- at(F,T-1), time(T), not move(T). at(F+D,T) :- at(F,T-1), move(D,T), floor(F+D). :- time(T), not 1 { at(F,T) } 1. % Pending requests task(F1,F2,D,T) :- request(F1,F2,T), D = (F2-F1)/|F2-F1|. task(F1,F2,D,T) :- task(F1,F2,D,T-1), time(T), not exec(F1,F2,D,T). % Started tasks must be processed till completion ... :- move(D,T), not move(D,T+1), not exec(D,T), not exec(-D,T+1). % Move iff there is some task to process ... :- open(T), not move(T+1). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
  • 21. Background Encoding for Incremental ASP Solving #base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. { move(D,T) : diff(D) } 1 :- time(T). move(T) :- move(D,T). % State update at(F, T) :- at(F,T-1), time(T), not move(T). at(F+D,T) :- at(F,T-1), move(D,T), floor(F+D). :- time(T), not 1 { at(F,T) } 1. % Pending requests task(F1,F2,D,T) :- request(F1,F2,T), D = (F2-F1)/|F2-F1|. task(F1,F2,D,T) :- task(F1,F2,D,T-1), time(T), not exec(F1,F2,D,T). % Started tasks must be processed till completion ... :- move(D,T), not move(D,T+1), not exec(D,T), not exec(-D,T+1). % Move iff there is some task to process ... :- open(T), not move(T+1). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
  • 22. Background Encoding for Incremental ASP Solving #base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. { move(D,T) : diff(D) } 1 :- time(T). move(T) :- move(D,T). % State update at(F, T) :- at(F,T-1), time(T), not move(T). at(F+D,T) :- at(F,T-1), move(D,T), floor(F+D). :- time(T), not 1 { at(F,T) } 1. % Pending requests task(F1,F2,D,T) :- request(F1,F2,T), D = (F2-F1)/|F2-F1|. task(F1,F2,D,T) :- task(F1,F2,D,T-1), time(T), not exec(F1,F2,D,T). % Started tasks must be processed till completion ... :- move(D,T), not move(D,T+1), not exec(D,T), not exec(-D,T+1). % Move iff there is some task to process ... :- open(T), not move(T+1). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
  • 23. Background Encoding for Incremental ASP Solving #base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. { move(D,T) : diff(D) } 1 :- time(T). move(T) :- move(D,T). % State update at(F, T) :- at(F,T-1), time(T), not move(T). at(F+D,T) :- at(F,T-1), move(D,T), floor(F+D). :- time(T), not 1 { at(F,T) } 1. % Pending requests task(F1,F2,D,T) :- request(F1,F2,T), D = (F2-F1)/|F2-F1|. task(F1,F2,D,T) :- task(F1,F2,D,T-1), time(T), not exec(F1,F2,D,T). % Started tasks must be processed till completion ... :- move(D,T), not move(D,T+1), not exec(D,T), not exec(-D,T+1). % Move iff there is some task to process ... :- open(T), not move(T+1). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
  • 24. Background Encoding for Incremental ASP Solving #base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. { move(D,T) : diff(D) } 1 :- time(T). move(T) :- move(D,T). % State update at(F, T) :- at(F,T-1), time(T), not move(T). at(F+D,T) :- at(F,T-1), move(D,T), floor(F+D). :- time(T), not 1 { at(F,T) } 1. % Pending requests task(F1,F2,D,T) :- request(F1,F2,T), D = (F2-F1)/|F2-F1|. task(F1,F2,D,T) :- task(F1,F2,D,T-1), time(T), not exec(F1,F2,D,T). % Started tasks must be processed till completion ... :- move(D,T), not move(D,T+1), not exec(D,T), not exec(-D,T+1). % Move iff there is some task to process ... :- open(T), not move(T+1). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
  • 25. Background Encoding for Incremental ASP Solving #base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update at(F, t) :- at(F,t-1), not move(t). at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D). :- not 1 { at(F,t) } 1. % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t), not move(D,t+1), not exec(D,t), not exec(-D,t+1). % Move iff there is some task to process ... :- open(t), not move(t+1). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
  • 26. Background Encoding for Incremental ASP Solving #base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update at(F, t) :- at(F,t-1), not move(t). at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D). :- not 1 { at(F,t) } 1. % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t), not move(D,t+1), not exec(D,t), not exec(-D,t+1). % Move iff there is some task to process ... :- open(t), not move(t+1). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
  • 27. Background Encoding for Incremental ASP Solving #base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update at(F, t) :- at(F,t-1), not move(t). at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D). :- not 1 { at(F,t) } 1. % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process ... :- open(t-1), not move(t). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
  • 28. Background Encoding for Incremental ASP Solving #base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update at(F, t) :- at(F,t-1), not move(t). at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D). :- not 1 { at(F,t) } 1. % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process ... :- open(t-1), not move(t). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 9 / 20
  • 29. Background Incremental ASP Solving Request 1: iclingo-3 <files> Solving... Solving... Solving... Answer: 1 move(1,2) move(-1,3) Request 2: iclingo-3 <files> Solving... Solving... Solving... Solving... Solving... Answer: 1 move(1,2) move(1,3) move(-1,4) move(-1,5) 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 10 / 20
  • 30. Background Incremental ASP Solving Request 1: iclingo-3 <files> Solving... Solving... Solving... Answer: 1 move(1,2) move(-1,3) Request 2: iclingo-3 <files> Solving... Solving... Solving... Solving... Solving... Answer: 1 move(1,2) move(1,3) move(-1,4) move(-1,5) 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 10 / 20
  • 31. Background Incremental ASP Solving Request 1: iclingo-3 <files> Solving... Solving... Solving... Answer: 1 move(1,2) move(-1,3) Request 2: iclingo-3 <files> Solving... Solving... Solving... Solving... Solving... Answer: 1 move(1,2) move(1,3) move(-1,4) move(-1,5) 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 10 / 20
  • 32. Background Incremental ASP Solving Request 1: iclingo-3 <files> Solving... Solving... Solving... Answer: 1 move(1,2) move(-1,3) Request 2: iclingo-3 <files> Solving... Solving... Solving... Solving... Solving... Answer: 1 move(1,2) move(1,3) move(-1,4) move(-1,5) 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 10 / 20
  • 33. Background Encoding for Reactive ASP Solving #base. #external request(F1,F2,0) : floor(F1) : floor(F2) : F1 != F2. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. #external request(F1,F2,t) : floor(F1) : floor(F2) : F1 != F2. ... % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). ... Inputs: #step 1. request(2,1,1). #endstep. #step 2. request(3,1,2). #endstep. M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 11 / 20
  • 34. Background Encoding for Reactive ASP Solving #base. #external request(F1,F2,0) : floor(F1) : floor(F2) : F1 != F2. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. #external request(F1,F2,t) : floor(F1) : floor(F2) : F1 != F2. ... % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). ... Inputs: #step 1. request(2,1,1). #endstep. #step 2. request(3,1,2). #endstep. M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 11 / 20
  • 35. Background Encoding for Reactive ASP Solving #base. #external request(F1,F2,0) : floor(F1) : floor(F2) : F1 != F2. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. #external request(F1,F2,t) : floor(F1) : floor(F2) : F1 != F2. ... % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). ... Inputs: #step 1. request(2,1,1). #endstep. #step 2. request(3,1,2). #endstep. M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 11 / 20
  • 36. Background Encoding for Reactive ASP Solving #base. #external request(F1,F2,0) : floor(F1) : floor(F2) : F1 != F2. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. #external request(F1,F2,t) : floor(F1) : floor(F2) : F1 != F2. ... % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). ... Inputs: #step 1. request(2,1,1). #endstep. #step 2. request(3,1,2). #endstep. M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 11 / 20
  • 37. Background Reactive ASP Solving oclingo-3 <files> + controller.py Request 1: Solving... Solving... Solving... Answer: 1 move(1,2) move(-1,3) Request 2: Solving... Solving... Solving... Answer: 1 move(1,2) move(1,3) move(-1,4) move(-1,5) 1 2 3 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 12 / 20
  • 38. Background Reactive ASP Solving oclingo-3 <files> + controller.py Request 1: Solving... Solving... Solving... Answer: 1 move(1,2) move(-1,3) Request 2: Solving... Solving... Solving... Answer: 1 move(1,2) move(1,3) move(-1,4) move(-1,5) 1 2 3 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 12 / 20
  • 39. Background Reactive ASP Solving oclingo-3 <files> + controller.py Request 1: Solving... Solving... Solving... Answer: 1 move(1,2) move(-1,3) Request 2: Solving... Solving... Solving... Answer: 1 move(1,2) move(1,3) move(-1,4) move(-1,5) 1 2 3 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 12 / 20
  • 40. Background Reactive ASP Solving oclingo-3 <files> + controller.py Request 1: Solving... Solving... Solving... Answer: 1 move(1,2) move(-1,3) Request 2: Solving... Solving... Solving... Answer: 1 move(1,2) move(1,3) move(-1,4) move(-1,5) 1 2 3 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 12 / 20
  • 41. Background Reactive ASP Solving oclingo-3 <files> + controller.py Request 1: Solving... Solving... Solving... Answer: 1 move(1,2) move(-1,3) Request 2: Solving... Solving... Solving... Answer: 1 move(1,2) move(1,3) move(-1,4) move(-1,5) 1 2 3 1 2 3 1 1 2 3 1 2 3 1 2 3 1 2 1 2 3 1 2 2 3 4 5 M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 12 / 20
  • 42. (More) Control Outline 1 Background 2 (More) Control 3 Summary M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 13 / 20
  • 43. (More) Control Clingo 4 Approach Custom grounding and solving via embedded scripting languages Lua: main(prg), prg:ground(parts), prg:solve(), . . . Python: main(prg), prg.ground(parts), prg.solve(), . . . Library: prg.ground(parts), prg.solve(), . . . Predecessor systems can easily be scripted One-shot ASP solving (default): (ground | solve) Incremental ASP solving: (ground | solve)∗ Reactive ASP solving: (ground∗ | solve)∗ . . . Clingo: ASP + Control M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 14 / 20
  • 44. (More) Control Clingo 4 Approach Custom grounding and solving via embedded scripting languages Lua: main(prg), prg:ground(parts), prg:solve(), . . . Python: main(prg), prg.ground(parts), prg.solve(), . . . Library: prg.ground(parts), prg.solve(), . . . Predecessor systems can easily be scripted One-shot ASP solving (default): (ground | solve) Incremental ASP solving: (ground | solve)∗ Reactive ASP solving: (ground∗ | solve)∗ . . . Clingo: ASP + Control M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 14 / 20
  • 45. (More) Control Clingo 4 Approach Custom grounding and solving via embedded scripting languages Lua: main(prg), prg:ground(parts), prg:solve(), . . . Python: main(prg), prg.ground(parts), prg.solve(), . . . Library: prg.ground(parts), prg.solve(), . . . Predecessor systems can easily be scripted One-shot ASP solving (default): (ground | solve) Incremental ASP solving: (ground | solve)∗ Reactive ASP solving: (ground∗ | solve)∗ . . . Clingo: ASP + Control M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 14 / 20
  • 46. (More) Control Clingo 4 Approach Custom grounding and solving via embedded scripting languages Lua: main(prg), prg:ground(parts), prg:solve(), . . . Python: main(prg), prg.ground(parts), prg.solve(), . . . Library: prg.ground(parts), prg.solve(), . . . Predecessor systems can easily be scripted One-shot ASP solving (default): (ground | solve) Incremental ASP solving: (ground | solve)∗ Reactive ASP solving: (ground∗ | solve)∗ . . . Clingo: ASP + Control M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 14 / 20
  • 47. (More) Control Clingo 4 Approach Custom grounding and solving via embedded scripting languages Lua: main(prg), prg:ground(parts), prg:solve(), . . . Python: main(prg), prg.ground(parts), prg.solve(), . . . Library: prg.ground(parts), prg.solve(), . . . Predecessor systems can easily be scripted One-shot ASP solving (default): (ground | solve) Incremental ASP solving: (ground | solve)∗ Reactive ASP solving: (ground∗ | solve)∗ . . . Clingo: ASP + Control M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 14 / 20
  • 48. (More) Control Encoding for Incremental ASP Solving #base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update at(F, t) :- at(F,t-1), not move(t). at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D). :- not 1 { at(F,t) } 1. % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process ... :- open(t-1), not move(t). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 15 / 20
  • 49. (More) Control Encoding for Incremental ASP Solving #base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update at(F, t) :- at(F,t-1), not move(t). at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D). :- not 1 { at(F,t) } 1. % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process ... :- open(t-1), not move(t). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 15 / 20
  • 50. (More) Control Encoding for Incremental ASP Solving #program base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update at(F, t) :- at(F,t-1), not move(t). at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D). :- not 1 { at(F,t) } 1. % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process ... :- open(t-1), not move(t). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 15 / 20
  • 51. (More) Control Encoding for Incremental ASP Solving #program base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #cumulative t. { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update at(F, t) :- at(F,t-1), not move(t). at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D). :- not 1 { at(F,t) } 1. % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process ... :- open(t-1), not move(t). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 15 / 20
  • 52. (More) Control Encoding for Incremental ASP Solving #program base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #program cumulative(t). { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update at(F, t) :- at(F,t-1), not move(t). at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D). :- not 1 { at(F,t) } 1. % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process ... :- open(t-1), not move(t). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 15 / 20
  • 53. (More) Control Encoding for Incremental ASP Solving #program base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #program cumulative(t). { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update at(F, t) :- at(F,t-1), not move(t). at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D). :- not 1 { at(F,t) } 1. % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process ... :- open(t-1), not move(t). #volatile t. :- open(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 15 / 20
  • 54. (More) Control Encoding for Incremental ASP Solving #program base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #program cumulative(t). { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update at(F, t) :- at(F,t-1), not move(t). at(F+D,t) :- at(F,t-1), move(D,t), floor(F+D). :- not 1 { at(F,t) } 1. % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process ... :- open(t-1), not move(t). #external query(t). :- open(t), query(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 15 / 20
  • 55. (More) Control Script for Incremental ASP Solving #script(python) from gringo import * def main(prg): imin = prg.get const("imin") if imin == None: imin = 1 step = 0 parts = [("base", [])] while True: if step < imin: step = step+1 parts.append(("cumulative", [step])) if step == imin: prg.ground(parts) parts = [] prg.assign external(Fun("query", [step]), True) ret = prg.solve() if ret == SolveResult.SAT: break prg.release external(Fun("query", [step])) imin = imin+1 #end. M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
  • 56. (More) Control Script for Incremental ASP Solving #script(python) from gringo import * def main(prg): imin = prg.get const("imin") if imin == None: imin = 1 step = 0 parts = [("base", [])] while True: if step < imin: step = step+1 parts.append(("cumulative", [step])) if step == imin: prg.ground(parts) parts = [] prg.assign external(Fun("query", [step]), True) ret = prg.solve() if ret == SolveResult.SAT: break prg.release external(Fun("query", [step])) imin = imin+1 #end. M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
  • 57. (More) Control Script for Incremental ASP Solving #script(python) from gringo import * def main(prg): imin = prg.get const("imin") if imin == None: imin = 1 step = 0 parts = [("base", [])] while True: if step < imin: step = step+1 parts.append(("cumulative", [step])) if step == imin: prg.ground(parts) parts = [] prg.assign external(Fun("query", [step]), True) ret = prg.solve() if ret == SolveResult.SAT: break prg.release external(Fun("query", [step])) imin = imin+1 #end. M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
  • 58. (More) Control Script for Incremental ASP Solving #script(python) from gringo import * def main(prg): imin = prg.get const("imin") if imin == None: imin = 1 step = 0 parts = [("base", [])] while True: if step < imin: step = step+1 parts.append(("cumulative", [step])) if step == imin: prg.ground(parts) parts = [] prg.assign external(Fun("query", [step]), True) ret = prg.solve() if ret == SolveResult.SAT: break prg.release external(Fun("query", [step])) imin = imin+1 #end. M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
  • 59. (More) Control Script for Incremental ASP Solving #script(python) from gringo import * def main(prg): imin = prg.get const("imin") if imin == None: imin = 1 step = 0 parts = [("base", [])] while True: if step < imin: step = step+1 parts.append(("cumulative", [step])) if step == imin: prg.ground(parts) parts = [] prg.assign external(Fun("query", [step]), True) ret = prg.solve() if ret == SolveResult.SAT: break prg.release external(Fun("query", [step])) imin = imin+1 #end. M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
  • 60. (More) Control Script for Incremental ASP Solving #script(python) from gringo import * def main(prg): imin = prg.get const("imin") if imin == None: imin = 1 step = 0 parts = [("base", [])] while True: if step < imin: step = step+1 parts.append(("cumulative", [step])) if step == imin: prg.ground(parts) parts = [] prg.assign external(Fun("query", [step]), True) ret = prg.solve() if ret == SolveResult.SAT: break prg.release external(Fun("query", [step])) imin = imin+1 #end. M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
  • 61. (More) Control Script for Incremental ASP Solving #script(python) from gringo import * def main(prg): imin = prg.get const("imin") if imin == None: imin = 1 step = 0 parts = [("base", [])] while True: if step < imin: step = step+1 parts.append(("cumulative", [step])) if step == imin: prg.ground(parts) parts = [] prg.assign external(Fun("query", [step]), True) ret = prg.solve() if ret == SolveResult.SAT: break prg.release external(Fun("query", [step])) imin = imin+1 #end. M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
  • 62. (More) Control Script for Incremental ASP Solving #script(python) from gringo import * def main(prg): imin = prg.get const("imin") if imin == None: imin = 1 step = 0 parts = [("base", [])] while True: if step < imin: step = step+1 parts.append(("cumulative", [step])) if step == imin: prg.ground(parts) parts = [] prg.assign external(Fun("query", [step]), True) ret = prg.solve() if ret == SolveResult.SAT: break prg.release external(Fun("query", [step])) imin = imin+1 #end. M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
  • 63. (More) Control My Script for Incremental ASP Solving #script(python) from gringo import * def main(prg): imin = prg.get const("imin") if imin == None: imin = 1 step = 0 parts = [("base", [])] while True: if step < imin: step = step+1 parts.append(("cumulative", [step])) if step == imin: prg.ground(parts) parts = [] prg.assign external(Fun("query", [step]), True) ret = prg.solve() if ret == SolveResult.SAT: break prg.release external(Fun("query", [step])) imin = imin+1 #end. M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
  • 64. (More) Control My Script for Incremental ASP Solving #script(python) from gringo import * def main(prg): imin = prg.get const("imin") if imin == None: imin = 1 step = 0 parts = [("base", []), ("task", [step])] while True: if step < imin: step = step+1 parts.append(("cumulative", [step])) parts.append(("task", [step])) if step == imin: prg.ground(parts) parts = [] ret = prg.solve() if ret == SolveResult.SAT: break imin = imin+1 #end. M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 16 / 20
  • 65. (More) Control My Encoding for Incremental ASP Solving #program base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #program cumulative(t). { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update ... % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process open(t) :- task(F1,F2,D,t). open(t) :- exec(F2,D,t), not at(F2,t). :- move(t), not open(t-1). :- open(t-1), not move(t). #external query(t). :- open(t), query(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
  • 66. (More) Control My Encoding for Incremental ASP Solving #program base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #program cumulative(t). { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update ... % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process open(t) :- task(F1,F2,D,t). open(t) :- exec(F2,D,t), not at(F2,t). :- move(t), not open(t-1). :- open(t-1), not move(t). #external query(t). :- open(t), query(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
  • 67. (More) Control My Encoding for Incremental ASP Solving #program base. diff(-1;1). task(F1,F2,D,0) :- request(F1,F2,0), D = (F2-F1)/|F2-F1|. #program cumulative(t). { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update ... % Pending requests task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process open(t) :- task(F1,F2,D,t). open(t) :- exec(F2,D,t), not at(F2,t). :- move(t), not open(t-1). :- open(t-1), not move(t). #external query(t). :- open(t), query(t). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
  • 68. (More) Control My Encoding for Incremental ASP Solving #program base. diff(-1;1). #program task(t). #external move(t+1). task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. open(t) :- task(F1,F2,D,t). :- open(t), not move(t+1). #program cumulative(t). { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update ... % Pending requests task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process open(t) :- exec(F2,D,t), not at(F2,t). :- move(t), not open(t-1). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
  • 69. (More) Control My Encoding for Incremental ASP Solving #program base. diff(-1;1). #program task(t). #external move(t+1). task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. open(t) :- task(F1,F2,D,t). :- open(t), not move(t+1). #program cumulative(t). { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update ... % Pending requests task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process open(t) :- exec(F2,D,t), not at(F2,t). :- move(t), not open(t-1). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
  • 70. (More) Control My Encoding for Incremental ASP Solving #program base. diff(-1;1). #program task(t). #external move(t+1). task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. open(t) :- task(F1,F2,D,t). :- open(t), not move(t+1). #program cumulative(t). { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update ... % Pending requests task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t-1), not move(D,t), not exec(D,t-1), not exec(-D,t). % Move iff there is some task to process open(t) :- exec(F2,D,t), not at(F2,t). :- move(t), not open(t-1). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
  • 71. (More) Control My Encoding for Incremental ASP Solving #program base. diff(-1;1). #program task(t). #external move(t+1). task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. open(t) :- task(F1,F2,D,t). :- open(t), not move(t+1). #program cumulative(t). #external move(D,t+1) : diff(D). #external exec(D,t+1) : diff(D). { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update ... % Pending requests task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t), not move(D,t+1), not exec(D,t), not exec(-D,t+1). % Move iff there is some task to process open(t) :- exec(F2,D,t), not at(F2,t). :- move(t), not open(t-1). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
  • 72. (More) Control My Encoding for Incremental ASP Solving #program base. diff(-1;1). #program task(t). #external move(t+1). task(F1,F2,D,t) :- request(F1,F2,t), D = (F2-F1)/|F2-F1|. open(t) :- task(F1,F2,D,t). :- open(t), not move(t+1). #program cumulative(t). #external move(D,t+1) : diff(D). #external exec(D,t+1) : diff(D). { move(D,t) : diff(D) } 1. move(t) :- move(D,t). % State update ... % Pending requests task(F1,F2,D,t) :- task(F1,F2,D,t-1), not exec(F1,F2,D,t). % Started tasks must be processed till completion ... :- move(D,t), not move(D,t+1), not exec(D,t), not exec(-D,t+1). % Move iff there is some task to process open(t) :- exec(F2,D,t), not at(F2,t). :- move(t), not open(t-1). M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 17 / 20
  • 73. (More) Control Custom ASP Solving Encoding consisting of named and parameterizable subprograms #program base. (default), #program cumulative(t)., . . . External (yet undefined) atoms provide input interface to other parts #external <atom> [ : <body> ]. Embedded scripts allow for flexible grounding and solving control #script(python | lua) . . . main(prg) . . . #end. Instantiation triggered by passing subprogram names plus arguments prg.ground([("base", []), ("task", [step])]) Ground program parts constitute modules (with disjoint head atoms) Search for stable models of ground program parts stored by solver prg.solve(), prg.solve(on model = pretty print), . . . Incremental and/or reactive ASP solving via “i/oClingo” scripts #include <iclingo>. prg.add("request1", [], "request(2,1,1).") M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 18 / 20
  • 74. (More) Control Custom ASP Solving Encoding consisting of named and parameterizable subprograms #program base. (default), #program cumulative(t)., . . . External (yet undefined) atoms provide input interface to other parts #external <atom> [ : <body> ]. Embedded scripts allow for flexible grounding and solving control #script(python | lua) . . . main(prg) . . . #end. Instantiation triggered by passing subprogram names plus arguments prg.ground([("base", []), ("task", [step])]) Ground program parts constitute modules (with disjoint head atoms) Search for stable models of ground program parts stored by solver prg.solve(), prg.solve(on model = pretty print), . . . Incremental and/or reactive ASP solving via “i/oClingo” scripts #include <iclingo>. prg.add("request1", [], "request(2,1,1).") M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 18 / 20
  • 75. (More) Control Custom ASP Solving Encoding consisting of named and parameterizable subprograms #program base. (default), #program cumulative(t)., . . . External (yet undefined) atoms provide input interface to other parts #external <atom> [ : <body> ]. Embedded scripts allow for flexible grounding and solving control #script(python | lua) . . . main(prg) . . . #end. Instantiation triggered by passing subprogram names plus arguments prg.ground([("base", []), ("task", [step])]) Ground program parts constitute modules (with disjoint head atoms) Search for stable models of ground program parts stored by solver prg.solve(), prg.solve(on model = pretty print), . . . Incremental and/or reactive ASP solving via “i/oClingo” scripts #include <iclingo>. prg.add("request1", [], "request(2,1,1).") M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 18 / 20
  • 76. Summary Outline 1 Background 2 (More) Control 3 Summary M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 19 / 20
  • 77. Summary Summary ASP as an under-the-hood technology ! Clingo 4 Multi-shot ASP solving Continuously changing programs Opens up new areas of applications Agents Policies Planning Robotics Interaction Theory solving Query-answering . . . http://potassco.sourceforge.net M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 20 / 20
  • 78. Summary Summary ASP as an under-the-hood technology ! Clingo 4 Multi-shot ASP solving Continuously changing programs Opens up new areas of applications Agents Policies Planning Robotics Interaction Theory solving Query-answering . . . http://potassco.sourceforge.net M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 20 / 20
  • 79. Summary Summary ASP as an under-the-hood technology ! Clingo 4 Multi-shot ASP solving Continuously changing programs Opens up new areas of applications Agents Policies Planning Robotics Interaction Theory solving Query-answering . . . http://potassco.sourceforge.net M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub Clingo = ASP + Control 20 / 20