Rule Based Systems (Prolog)

Post on 19-Jan-2016

36 views 3 download

Tags:

description

Rule Based Systems (Prolog). M. Reza Zakerinasab mrzakeri@ucalgary.ca Please include [CPSC433] in the subject line of any emails regarding this course. Slides originally created by Andrew M Kuipers. Some slides adopted from 600.325/425 Declarative Methods - J. Eisner. - PowerPoint PPT Presentation

Transcript of Rule Based Systems (Prolog)

CPSC 433 Artificial Intelligence

Rule Based Systems(Prolog)

M. Reza Zakerinasabmrzakeri@ucalgary.ca

Please include [CPSC433] in the subject line of any emails regarding this course.Slides originally created by Andrew M Kuipers.Some slides adopted from 600.325/425 Declarative Methods - J. Eisner

2

Prolog as constraint programming

• An ordinary constraint between two variables: Person and Food• Prolog makes you name this constraint.

Here’s a program that defines it:– eats(sam, dal). eats(josie, samosas).– eats(sam, curry). eats(josie, curry).– eats(rajiv, dal). …

• Now it acts like a subroutine! At the Prolog prompt you can type – eats(Person1, Food1). % constraint over two variables– eats(Person2, Food2). % constraint over two other variables

(Person, Food)Person Food

sam dal

sam curry

josie samosas

josie curry

rajiv dal

CPSC 433 Artificial Intelligence

3

Using Prolog

– eats(sam, dal). eats(josie, samosas).– eats(sam, curry). eats(josie, curry).– eats(rajiv, burgers). eats(rajiv, dal). …

– eats(Person1, Food), eats(Person2, Food).

• Person1=sam, Person2=josie, Food=curry• Person1=josie, Person2=sam, Food=curry …

Your program file (compiled)Sometimes called the “database”

“Query” that you type interactively

Prolog’s answer

CPSC 433 Artificial Intelligence

CPSC 433 Artificial Intelligence

Adding more rules…

eats(sam, dal). eats(josie, samosas).eats(sam, curry). eats(josie, curry).eats(rajiv, burgers). eats(rajiv, dal).

compatible(Person1, Person2) :- eats(Person1, Food), eats(Person2, Food).

compatible(Person1, Person2) :- watches(Person1, Movie),watches(Person2, Movie).

compatible(hal, Person2) :- female(Person2), rich(Person2).

CPSC 433 Artificial Intelligence

Basic Prolog Process

Negate query, set as current goal.

while current goal is non-empty:choose the leftmost subgoalif a rule applies to the subgoal:

select the first applicable rule (top-to-bottom)perform resolution on subgoal and selected rule

else:backtrack if possible, otherwise fail

success

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

Logically sound?!!

?- witch(X).

Goals

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0) madeofwood(_G0)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0) madeofwood(_G0)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0)madeofwood(_G0)

floats(_G0)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0)madeofwood(_G0)

floats(_G0)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0)madeofwood(_G0)

floats(duck)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0)madeofwood(duck)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(duck) woman(duck)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(duck) woman(duck)

fail! backtrack...

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0)madeofwood(_G0)

floats(_G0)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0)madeofwood(_G0)

floats(_G0)floats(_G1) sameweight(_G1, _G0)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0)madeofwood(_G0)

floats(_G0)floats(_G1) sameweight(_G1, _G0)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0)madeofwood(_G0)

floats(_G0)floats(duck) sameweight(duck, _G0)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0)madeofwood(_G0)

floats(_G0)floats(duck) sameweight(duck, _G0)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0)madeofwood(_G0)

floats(_G0)floats(duck) sameweight(duck, girl)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0)madeofwood(_G0)

floats(girl)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(_G0) woman(_G0)madeofwood(girl)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(girl) woman(girl)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(_G0)

burns(girl) woman(girl)

works this time

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

Goalswitch(girl)

CPSC 433 Artificial Intelligence

Sir Bedevere’s Infamous Deductionwitch(X) :- burns(X),woman(X).woman(girl).burns(X) :- madeofwood(X).madeofwood(X) :- floats(X).floats(duck).floats(Y) :- floats(X),sameweight(X,Y).sameweight(duck,girl).

?- witch(X).

X = girl