Part 1

Προβλήματα Προσχεδιασμού
ΤO ΠΡOBΛHMA TOY BOΣΚOY (1)
Αναπαράσταση του προβλήματος
• Δομή δεδομένων - Κατάσταση:
–
state(_, _, _,_)
Θέση βοσκού, λύκου, προβάτου, χόρτου
– state: A4 -> U όπου A={initial,final} (={i,f})
– Αρχική κατάσταση: state(i,i,i,i)
– Τελική κατάσταση: state(f,f,f,f)
ΤO ΠΡOBΛHMA TOY BOΣΚOY (1)
• transition(State1, State2}
– Ορίζει τις επιτρεπτές αλλαγές καταστάσεων από
State1 σε State2
– Αν ισχύει η transition(initial_state, final_state) τότε
υπάρχει διαδρομή – σχέδιο
• transition(state{f,f, f,f), state(f,f, f,f)).
• transition(X,Z):
move(X,Y),
safe_state(Y),
transition(Y,Z).
• safe_state (state(X,_, X,_)).
• safe_state ( state (X, X,_, X)).
ΤO ΠΡOBΛHMA TOY BOΣΚOY (1)
• move (state (B,X,Y,Z), state (B1,X,Y,Z)) : other _side(B,B1).
• move (state (B,B,Y,Z), state(B1 ,B1 ,Y,Z)) : other_side(B, B1 ).
• move (state (B,X,B,Z), state(B1 ,X,B1 ,Z)) : other_side(B,81 ).
• move (state (B,X,Y,B), state(B1,X,Y,B1)) : other_side(B,B1 ).
• other_side(i,f).
• other_side(f,i).
? transition (state ( i, i, i, i), state (f, f, f, f)).
Β
i
f
i
f
i
f
i
f
Λ
i
i
i
f
f
f
f
f
Π
i
f
f
f
i
i
i
f
Χ
i
i
i
i
i
f
f
f
(2)
(1)
(2)
(3)
(4)
(1)
(3)
ΤΟ ΠΡΟΓΡΑΜΜΑ ΔΕΝ ΔΙΔΕΙ ΤΗ ΛΥΣΗ ΣΑΝ ΔΕΔΟΜΕΝΟ ΕΞΟΔΟΥ!
TO ΠPOBΛHMA TOY BOΣKOY (2)
• % transition{State1, State2, Accummulator, Plan)
• transition{state{f,f,f,f), state{f,f,f,f), X, X).
• transition{X, Z, A, P) :
move{X, Υ),
safe_state{Y),
new_state{Y, A),
transition{Y, Z, [Y IA], P).
• new_state(State, List) :- not member(State, List).
• ? transition(stat_(i,i,i,i), state(f,f,f,f), [state(i,i,i,i)], X).
ΕΙΣΟΔΟΣ-ΕΞΟΔΟΣ
• %generate_plan (lnitiaIState, FinalState, Plan)
• generate_plan (l, F, P) :
transition (l, F, [I], X), reverse (X, P), display (P).
• display ([state(X, V, Z, W) I Rest]) :
write ('Voskos: '), write(X),
write('--Likos:'), write{V),
write('--Provato:'), write(Z),
write('--Xorta: '), write{W),
nl, nl,
display(Rest).
display([]).
Ο πίθηκος και η μπανάνα
• Ένας πίθηκος βρίσκεται στην πόρτα και μια μπανάνα
κρέμεται στο κέντρο του δωματίου
– Πως μπορεί να πιάσει ο πίθηκος τη μπανάνα;
• Ο πίθηκος μπορεί να κάνει τις εξής δράσεις:
–
–
–
–
walk(pos1,pos2) - on the floor
climb – onto the box
push – the box
grasp – the banana
Ο πίθηκος και η μπανάνα
• Κατάσταση του κόσμου:
state(_, _, _,_)
Θέση πιθήκου στο πάτωμα, Θέση πιθήκου στο κουτί,
Θέση κουτιού στο πάτωμα, Θέση μπανάνας: ναι/όχι
– Αρχική κατάσταση:
• state(atdoor,onfloor,atwindow,hasnot)
– Τελική κατάσταση:
• state(_,_,_,has)
Ο πίθηκος και η μπανάνα
move(State1, MoveType, State2)
•
•
•
•
move( state( middle, onbox, middle, hasnot),
grasp,
state( middle, onbox, middle, has) ).
% Grasp banana
move( state(P, onfloor, P, H),
climb,
state( P, onbox, P, H) ).
% Climb box
move( state( PI, onfloor, PI, H),
push( PI, P2),
state( P2, onfloor, P2, H) ).
move( state( PI, onfloor, B,H),
walk PI, P2),
state( P2, onfloor, B, H) ).
% Push box from PI to P2
% Walk from PI to P2
Ο πίθηκος και η μπανάνα
canget(State) - ο πίθηκος μπορεί να πιάσει τη
μπανάνα από την κατάσταση State
• canget( state( _, _, _, has) ).
canget( State1) :
move( Statel, Move, State2),
canget( State2).
• ?canget(state(atdoor,onfloor,atwindow,hasnot))
Αναζήτηση στο χώρο καταστάσεων