Προβλήματα Προσχεδιασμού
ΤO ΠΡOBΛHMA TOY BOΣΚOY (1) Αναπαράσταση του προβλήματος Δομή δεδομένων - Κατάσταση: – state(_, _, _,_) Θέση βοσκού, λύκου, προβάτου, χόρτου –state: A 4 -> 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)). ΒΛΠΧ iiii fifi(2) iifi(1) fffi(2) ifii(3) ffif(4) ifif(1) ffff(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, % Grasp banana state( middle, onbox, middle, has) ). move( state(P, onfloor, P, H), climb, % Climb box state( P, onbox, P, H) ). move( state( PI, onfloor, PI, H), push( PI, P2), % Push box from PI to P2 state( P2, onfloor, P2, H) ). move( state( PI, onfloor, B,H), walk PI, P2),% Walk from PI to P2 state( P2, onfloor, B, H) ).
Ο πίθηκος και η μπανάνα canget(State) - ο πίθηκος μπορεί να πιάσει τη μπανάνα από την κατάσταση State canget( state( _, _, _, has) ). canget( State1) : move( Statel, Move, State2), canget( State2). ?canget(state(atdoor,onfloor,atwindow,hasnot))
Αναζήτηση στο χώρο καταστάσεων