Προβλήματα Προσχεδιασμού
Ο κόσμος των κύβων Πρόβλημα προσχεδιασμού κατάλληλων πύργων Η Κατάσταση του κόσμου μπορεί να αναπαρασταθεί με μια λίστα από: on(Block1,Block2) ή on(Block,TablePlace) Οι δράσεις είναι: –to_block(Block1,PresentPos, Block2) μεταφέρει το Block1 από τη θέση PresentPos πάνω στο Block2 –to_place(Block,PresentPos, Place) μεταφέρει το Block από τη θέση PresentPos πάνω στη θέση Place
Ο κόσμος των κύβων b a c –Αρχική κατάσταση: [on(a,b), on(b,p), on(c,r)] –Τελική κατάσταση: [on(c,r), on(b,c), on(a,b)] pqr c b a pqr
Ο κόσμος των κύβων transform (State1, State2,Plan) Plan is a plan of actions to transform State1 into State2. transform (State1, State2, Plan) :- transform (State1, State2, [State1], Plan). transform (State, State, Visited, [ ]). transform (State1, State2, Visited, [Action|Actions]) :- legal_action (Action, State1), update(Action, State1, State), not member (State,Visited), transform (State, State2, [State|Visited], Actions).
Ο κόσμος των κύβων legal_action (to_place(Block, Y, Place), State) :- on (Block, Y, State), clear (Block, State), place (Place), clear (Place, State). legal_action (to_block (Block1, Y, Block2), State):- on (Blockl, Y, State), clear (Block1, State), block(Block2), Block1 ≠ Block2, clear (Block2, State).
Ο κόσμος των κύβων clear (X, State) :- not member (on (A,X), State). on (X, Y, State) :- member (on (X, Y), State). update (to_block (X, Y, Z), State, State1) :- substitute (on (X, Y), on (X,Z), State, State1). update (to_place (X, Y, Z), State, State1) :- substitute (on (X,Y), on(X, Z), State, State1). substitute (X, Y,Xs, Ys) Exercise
Ο κόσμος των κύβων Το πλάνο του απλού προβλήματος μας είναι το ακόλουθο: [to_place(a,b,q), to_block(a,q,c), to_place(b,p,q), to_place(a,c,p), to_block(a,p,b), to_place(c,r,p),……………, to_block(a,p,b)] Το πλάνο περιέχει 25 κινήσεις!
Ο κόσμος των κύβων Αντικαθιστούμε το legal_action με την πιο ευφυή επιλογή κινήσεων choose_action: –choose_action(Action, State1,FinalState2):- suggest(Action, FinalState2), legal_action(Action, State1). choose_action(Action, State1,FinalState2):- legal_action(Action, State1). –suggest(to_place(X,Y,Z), FinalState):- member(on(X,Z), FinalState), place(Z). suggest(to_block(X,Y,Z), FinalState):- member(on(X,Z), FinalState), block(Z). Το πλάνο τώρα είναι: [to_place(a,b,q), to_block(b.p.c), to_block(a.q.b)]
Ο κόσμος των κύβων Πειραματισμός με διάφορα προβλήματα: test_plan(NameOfTest, Plan):- initial_state(NameOfTest,I), final_state(NameOfTest,F), transform(I,F,Plan). initial_state(test1, [on(a,b), on(b,p), on(c,r)]). final_state(test1, [on(c,r), on(b,c), on(a,b)]). block(a). block(b). block(c). place(p).place(q). place(r). ?test_plan(test1, Plan).