INTELLIGENTE SYSTEMEN TT 2
College 8: A closer look at terms
The identity predicate
We hebben een unificatie operator (=/2) en een numerieke gelijkheid operator (=:=/2).
We hebben ook een identiteitspredikaat (==/2):
- In tegenstelling tot (=/2) instantieert het geen variabelen.
- Het checkt de identiteit van termen, ook al is het anders vermeld.
- Het ondersteunt infix en prefix notatie gelijkheid.
Voorbeelden:
1+2 = 2+1. True
1+2 =:= 3. False
1+2 == +(1,2). True
1+2 == +(2,1). False
We hebben =\=/2 voor numerieke ongelijkheid.
\==/2 geldt wanneer de argumenten niet identiek zijn.
Voorbeelden:
a == ‘a’. True
a \== a. False
X = Y. True, X= _2808, Y=_2808
X==Y. False
X \== Y. True
a = X, a == X. True, X = a
a == X, a = X. False
X \== a. True
Identiteit van complexe termen:
2-3 == -(2,3).
2*(7+2) == *(2,+(7,2)).
(2 =< 3) == =<(2,3).
(2 =:= 3) == =:=(2,3).
==((2 =:= 3), =:=(2,3)).
[a,b,c,d] == [a| [b,c,d]].
[a,b,c,d] == [a,b| [c,d]].
[a,b,c,d] == [a,b,c,d|[]].
Overview =, =:= en ==
- = Unificatie predikaat
o True als het z’n argumenten kan unificeren, anders false
- \= Negatie van unificatie predikaat
o True als = fails, en andersom
- == Identiteits predikaat
o True als argumenten gelijk zijn, anders false
- \== Negatie van identiteits predikaat
o True == fails, en andersom
- =:= Arithmetische equality predikaat
o True als argumenten evaluate zelfde getal/integer
- =\= Arithmetische equality predikaat negation
o True als argumenten andere getallen evaluaten
Built-in predikaten
- Atom/1 argument een atoom?
- Integer/1 argument een integer?
- Float/1 argument een floating point getal? (float(42) geeft false: geen integers!)
- Number/1 argument een integer of een floating point getal?
1
, - Atomic/1 argument constant?
- Var/1 argument een uninstantiated variabele
- Nonvar/1 argument een instantiated variabele of een andere term dat geen uninstantiated
variabele is (nonvar(eats(vincent, spagetti)). True)
Structure of complex terms
Hoe kunnen we de structuur van een complexe term leren?
Prolog heeft een ingebouwd predikaat, functor/3 die: Voorbeeld functor/3
- De term als het eerste argument neemt
- De functor als het tweede argument
- De ariteit als het derde argument
Checken of een argument een complexe term is:
Arg/3 neemt getal N en een complexe term T en
returnt het Nde argument van T als derde argument.
‘=..’/2 neemt complexe term en returnt
een lijst dat de functor als hoofd heeft, en
dan alle argumenten in volgorde, als
elementen van de tail.
Atom_codes/2 staat conversions van strings
en atoms naar en van ASCII lijst
representatie
Prolog gebruikt gebruiksvriendelijke (infix) notatie voor operatoren, maar gebruikt intern onamibigu
prefix notatie.
Om gebruiksvriendelijke notatie te
disambigueren moet Prolog het operator type
(infix, prefix, postfix), its precedence en zn
associativity weten.
We kunnen onze operator definen door :- op(Precedence, Type, Name).
- Type = een atoom dat het type en associativity van de operator specificeert. Mogelijkheden
zijn:
o Infix xfx, xfy, yfx
o Prefix fx, fy
o Suffix xf, yf
- Yfx: x heeft lower precedence dan de infix operator f, terwijl y equal of lower precedence zou
kunnen hebben
- :- op(Precedence, Type, Name). Definieert geen functie.
2
,College 9: Classical Planning
- Planning is het process van computing several steps of a problem-solving procedure before
executing any of them
- Dit probleem kan opgelost worden met search
- Het grootste verschil tussen search en planning is de representatie van toestanden
o Search: toestanden worden gerepresenteerd als een enkele entity (kan complex object
zijn, maar interne structuur wordt niet gebruikt bij search algoritmes)
o Planning: toestanden hebben gestructureerde representaties (collecties van
eigenschappen) welke gebruikt worden door het planning algoritme
Verschillende toestanden representaties
- Atomic: Toestanden hebben geen interne structuur
- Factored: Toestanden zijn vectoren van attribute
values
- Structured: Toestanden bestaan uit objecten met
eigenschappen en onderlinge relaties
Toestand representatie in planning
- Toestanden zijn lijsten van ground (geen variabelen) atomische formules (positive literals)
o Bijv. S = {At(BBG), Sells(Spar, Milk)}
- Toestand beschrijving is bedoelt om alle positive ground literals die waar zijn te listen
- Als een positive ground literal niet listed is, is ie false
o Bijv. Sells(BBG, Milk) is false in s.
- Goal state beschrijving kan variabelen hebben: At(x) ^ Have(y).
- Een eigenschap met een variabele zoals At(x) is satisfied in een toestand als er een manier is
om een object te substitueren voor x, zodat de resulterende formule waar is in de toestand.
Search vs planning
Planningsystemen doen het volgende:
- Vinden actie en doelrepresentaties om selectie te veroorloven.
- Divide-and-conquer door subdoelen te stellen.
- Opeenvolgende constructie van oplossingen
Search Planning
States Data structuren Logische zinnen
Actions Code Precondities/outcomes
Goal Code Logische zinnen (conjuncties
Plan Sequence from S0 Beperkingen bij acties
Assumpties van classical planning:
- Omgeving is deterministisch
- Omgeving is oberveerbaar
- Omgeving is statisch (verandert alleen door de acties van de agent)
STRIPS-operator
STRIPS-planning language. Overzichtelijke actiebeschrijvingen, beperkte taal (> dus efficiënt
algoritme). Acties/operatoren zijn gespecificeerd met actieschema’s.
- Preconditie: conjunctie van positieve literals
- Effect: conjunctie van literals
- Goal: conjunctie van positieve literals
3
, PDDL (planning domein definitie language)
- Meer relaxed dan STRIPS
- Precondities en goals kunnen negatieve literalen bevatten
- Toestanden zijn sets van ground, functieloze atomen
- Ground atomen die niet worden genoemd zijn false (closed world assumpties)
- A \in Actions(s) iff s |= Precond(a)
- Result(s,a) = (s – Del(a)) U Add(a)
o Add(a) is de lijst van positieve literalen in het effect van a (feiten die waargemaakt
worden)
o Del(a) is de lijst van feiten die false gemaakt zijn (atomen die in negatie voorkomen in
het effect van a)
Vb. domein: blocks world
Domein bestaat uit:
o Een tafel, een set van kubussen en een robotarm
o Iedere kubus ligt op de tafel of op een andere kubus
o De arm kan een blok oppakken en naar een andere positie bewegen (op de tafel of op
een andere kubus)
o De arm kan maar een kubus per keer oppakken, dus het kan niet een kubus oppakken
met een andere kubus erop.
o Een goal is een vraag om een of meerdere stacks van kubussen te bouwen,
gespecifieerd in termen van welke kubussen op welke andere kubussen staan.
- Kubussen worden gerepresenteerd door constanten A, B, C, etc en een additionele constante
Table.
- De volgende predikaten worden gebruikt om toestanden te beschrijven:
o Bl(x): x is een kubusblok
o On(x,y): x is op y, waar y een kubusblok is of een tafel
o Clear(x): er is een lege plek on x to hold a block
Actieschema’s:
Planning problem:
= planning domein + objecten + initiele toestand + goal.
- Goal is een conjunctie van literalen, bijv: On(A,B)^
¬On(B,C)
- We kunnen dit probleem oplossen met search.
Search
- Zoek algoritmen worden meestal gezien als een
forward search van de initiële toestand naar een
goal toestand
4