ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2

Σχετικά έγγραφα
ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 1

Ευρετική αναζήτηση (πληροφορημένη αναζήτηση)

Αναζήτηση χωρίς πληροφόρηση

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 3

Ασκήσεις ανακεφαλαίωσης στο μάθημα Τεχνητή Νοημοσύνη

Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου. Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης)

Ερώτημα Α 1. Να γράψετε τις εντολές που πραγματοποιούν τα ακόλουθα:

Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με openmp

Φροντιςτήριο. Linked-List

Η γλώσσα προγραμματισμού C

Εκφωνήσεις ασκήσεων εργαστηρίου 1

Εργαστήριο 2: Πίνακες

Προγραμματισμός Ι (HY120)

Προγραμματισμός Ι (ΗΥ120)

Η γλώσσα προγραμματισμού C

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Περίληψη Φροντιστηρίου. Κατανεμημένα Συστήματα Ι. Το περιβάλλον DAP - Χαρακτηριστικά. Το περιβάλλον DAP Τι είναι.

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

24ος ΠΑΝΕΛΛΗΝΙΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Δομές Δεδομένων και Αλγόριθμοι

Δομές Δεδομένων και Αλγόριθμοι

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

Προγραμματισμός ΙI (E)

ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΑΤΙΣΜΟΣ Α (C++) ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΤΩΝ Δρ. Νικόλαος Ζ. Ζάχαρης

!! " &' ': " /.., c #$% & - & ' ()",..., * +,.. * ' + * - - * ()",...(.

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα εξής ακαδημαϊκά έτη: Διάρκεια: 2,5 ώρες, κλειστά βιβλία και σημειώσεις ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

Προγραμματισμός Ι (ΗΥ120)

Υπολογισμός - Εντολές Επανάληψης

Ενδεικτικές λύσεις και στατιστικά

Εκφωνήσεις ασκήσεων εργαστηρίου 2 (pthreads)

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

Σημειώσεις όγδοης εβδομάδας

Δομημένος Προγραμματισμός (ΤΛ1006)

#4. Heaps (σωροί), η ταξινόμηση HeapSort, η δομή std::priority_queue της STL

Εισαγωγή στον Προγραμματισμό

Τεχνητή Νοημοσύνη. 4η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

C: Από τη Θεωρία στην Εφαρμογή

Κεφάλαιο 4. Αλγόριθµοι Ευριστικής Αναζήτησης. Τεχνητή Νοηµοσύνη - Β' Έκδοση. Ι. Βλαχάβας, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκκορας, Η.

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

Red-Black Δέντρα. Red-Black Δέντρα

ΕΠΛ232: Εργαστήριο 2

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός

Κεφάλαιο 3. Αλγόριθµοι Τυφλής Αναζήτησης. Τεχνητή Νοηµοσύνη - Β' Έκδοση. Ι. Βλαχάβας, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκκορας, Η.

Προγραμματισμός I (Θ)

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

n true false if t then t else t u t t b t emptylist cons t t t t λx.t u ::= head tail isempty

Κεφάλαιο : Επαναλήψεις (for, do-while)

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V

Δομές Δεδομένων και Αλγόριθμοι

Επίλυση Προβλημάτων. Περιγραφή Προβλημάτων Αλγόριθμοι αναζήτησης Αλγόριθμοι τυφλής αναζήτησης. Αλγόριθμοι ευρετικής αναζήτησης Παιχνίδια δύο αντιπάλων

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Δομές Δεδομένων και Αλγόριθμοι

Διδάσκων: Παναγιώτης Ανδρέου

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

ΕΠΛ131 Αρχές Προγραμματισμού

ΔΙΑΣΧΙΣΗ ΓΡΑΦΗΜΑΤΩΝ 1

Ηλεκτρονικοί Υπολογιστές

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α')

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα προηγούμενα ακαδημαϊκά έτη: ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

Προγραμματισμός Ι (HY120)

Σημειώσεις έκτης και έβδομης εβδομάδας

Εργαστήριο 3 Εντολή for while, do while

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

Δομές Δεδομένων και Αλγόριθμοι

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

Αλγόριθμοι Ταξινόμησης Μέρος 1

Αλγόριθμοι Τυφλής Αναζήτησης

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Υπολογιστών με C++

Αποθήκες Δεδομένων και Εξόρυξη Δεδομένων

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

Μεταφραστής (Compiler)

Προγραμματισμός Ι (ΗΥ120)

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI

Γλώσσα Προγραμματισμού C

ΕΠΛ131 Αρχές Προγραμματισμού

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 1 Συμβολοσειρές, Πίνακες, Δείκτες

Μεθόδων Επίλυσης Προβλημάτων

ΟΝΟΜΑΤΕΠΩΝΥΜΟ : Αντικείμενα: περιγραφική στατιστική, γραφήματα, συναρτήσεις βάσεων δεδομένων, συγκεντρωτικοί πίνακες

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Transcript:

Version 1.5 (16/03/2017) Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος 2016-2017 εαρινό εξάμηνο ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2 Άσκηση 1 Σχεδιάστε στον ακόλουθο χώρο δεξιά το γράφημα που αντιστοιχεί στα παρακάτω δεδομένα. [VERTICES:4] A B C D [EDGES:5] A,B,5 A,C,2 C,B,1 C,D,10 B,D,8 [STRAIGHT_LINE_DISTANCE_TO:D] A,10 B,4 C,8 D,0 toy2_h.txt Άσκηση 2 Για το γράφημα toy1_h.txt με τα ακόλουθα δεδομένα να εφαρμοστούν οι αλγόριθμοι HC, BestFS και A* και να συμπληρωθούν οι ακόλουθοι πίνακες για την εύρεση της διαδρομής από την κορυφή A στην κορυφή G. [VERTICES:7] A B C D E F G [EDGES:8] A,B,25 A,D,15 B,C,15 B,E,20 D,C,35 D,F,20 E,F,15 F,G,14 [STRAIGHT_LINE_DISTANCE_TO:G] A,34 B,16 C,12 D,26 E,15 F,10 G,0 toy1_h.txt Για τον αλγόριθμο HC Τρέχουσα Κατάσταση Παιδιά 1

Για τον αλγόριθμο ΒestFS Για τον αλγόριθμο A* Άσκηση 3 Γράψτε πρόγραμμα που να εκτυπώνει όλες τις πόλεις οι οποίες αν χρησιμοποιηθούν στην αναρρίχηση λόφου ως αφετηρίες στο πρόβλημα tour_romania με προορισμό την πόλη B (Bucharest) οδηγούν σε αδιέξοδο. Άσκηση 4 Τροποποιήστε τον αλγόριθμο Α* έτσι ώστε να μην χρησιμοποιεί κλειστό σύνολο. Χρησιμοποιήστε και τους δύο αλγορίθμους Α* (με κλειστό σύνολο και χωρίς κλειστό σύνολο) έτσι ώστε να βρεθεί η συντομότερη διαδρομή από την κορυφή Α στην κορυφή D στο γράφημα της Άσκησης 1 (toy2_h.txt). Συμπληρώστε τους ακόλουθους πίνακες. Τι παρατηρείτε; Για τον αλγόριθμο A* (με κλειστό σύνολο) Για τον αλγόριθμο A* (χωρίς κλειστό σύνολο) Μέτωπο αναζήτησης Τρέχουσα Κατάσταση Παιδιά 2

ΛΥΣΕΙΣ ΑΣΚΗΣΕΩΝ Άσκηση 1 [VERTICES:4] A B C D [EDGES:5] A,B,5 A,C,2 C,B,1 C,D,10 B,D,8 [STRAIGHT_LINE_DISTANCE_TO:D] A,10 B,4 C,8 D,0 Άσκηση 2 Για τον αλγόριθμο HC Τρέχουσα Κατάσταση (Α,34) (B,16) (C,12) αδιέξοδο (B,16),(D,26) (C,12),(E,15) Παιδιά Για τον αλγόριθμο ΒestFS [(Α-34)] Α [B,D] [(A-B,16),(A-D,26)] [A] B [C,E] [(A-B-C,12),(A-B-E,15),(A-D,26)] [A,B] C [(A-B-E,15),(A-D,26)] [A,B,C] E [F] [(A-B-E-F,10),(A-D,26)] [A,B,C,E] F [G] [(A-B-E-F-G,0),(A-D,26)] [A,B,C,E,F] G A-B-E-F-G,74 Για τον αλγόριθμο A* [(Α,0+34=34)] Α [B,D] [(Α-Β,25+16=41), (A-D,15+26=41)] [A] B [C,E] [(A-D,15+26=41), (Α-Β-C,40+12=52), (A-B-E,45+15=60)] [A,B] D [C,F] [(A-D-F,35+10=45), (A-B-C,40+12=52), (A-B-E 45+15=60), [A,B,D] F G (A-D-C,50+12=62)] (A-D-F-G,49+0=49), (A-B-C,40+12=52), (A-B-E,45+15=60), [A,B,D,F] G (A-D-C 50+12=62) A-D-F-G,49 Άσκηση 3 #include "lab02_search.hpp" #include <stdlib.h> bool hill_climbing_base(struct di_graph graph, string start_vertex, string goal_vertex) { 3

string current_state = start_vertex; while (goal_vertex.compare(current_state)!= 0) { list<string> children = get_successors(graph, current_state); if (children.empty()) return false; string best_child = children.front(); for (string v : children) { if (get_heuristic(graph, v) < get_heuristic(graph, best_child)) best_child = v; if (get_heuristic(graph, best_child) < get_heuristic(graph, current_state)) current_state = best_child; else return false; return true; int main(int argc, char **argv) { struct di_graph graph { ; graph = read_data("data/tour_romania_h.txt"); for (int i = 0; i < graph.v; i++) { string source_vertex{get_vertex_label(graph, i); bool flag = hill_climbing_base(graph, source_vertex, graph.goal_vertex); if (!flag) cout << "source: " << source_vertex << " destination: " << graph.goal_vertex << " DEADLOCK"<< endl; free_memory(graph); lab02_exercise03.cpp Ο κώδικας μεταγλωττίζεται με την ακόλουθη εντολή: g++ lab02_exercise03.cpp lab02_graph.cpp lab02_search.cpp -o lab02_exercise03 -std=c++11 Η εκτέλεση του κώδικα γίνεται ως εξής:./lab02_exercise03 source: L destination: B DEADLOCK source: M destination: B DEADLOCK source: T destination: B DEADLOCK Άσκηση 4 #include "lab02_search.hpp" #include <stdlib.h> void print_status_astar_without_closed_set(list<search_node> frontier, string current_state, list<string> successors) { cout << "frontier:["; for (search_node sn : frontier) cout << search_node_astar_as_string(sn); cout << "]"; cout << " current node:" << current_state; cout << " successors:" << list_as_string(successors) << endl; 4

void alpha_star_search_without_closed_set(struct di_graph graph, string start_vertex, string goal_vertex) { cout << "A* no closed set" << endl; priority_queue<search_node> frontier { ; frontier.push( to_search_node(start_vertex, get_heuristic(graph, start_vertex))); search_node current_state = frontier.top(); string current_state_back = current_state.path.back(); bool found { true ; while (goal_vertex.compare(current_state_back)!= 0) { print_status_astar_without_closed_set(priority_queue_to_list(frontier), current_state_back, get_successors(graph, current_state_back)); frontier.pop(); for (string v : get_successors(graph, current_state_back)) frontier.push( to_search_node(graph, current_state, v, get_heuristic(graph, v))); if (frontier.empty()) { found = false; break; current_state = frontier.top(); current_state_back = current_state.path.back(); if (found) { print_status_astar_without_closed_set(priority_queue_to_list(frontier), current_state_back, get_successors(graph, current_state_back)); cout << "Path to goal node found: " << solution_path_cost(graph, current_state) << endl; else cout << "Goal not found!" << endl; int main(int argc, char **argv) { struct di_graph graph { ; string fn{; string start_vertex{, search_method{; if (argc!= 3) { printf("wrong number of arguments\n"); printf("usage : %s <problem_instance> <source>\n", argv[0]); printf("example : %s tour_romania_h.txt A \n", argv[0]); exit(-1); fn = argv[1]; start_vertex = argv[2]; graph = read_data(fn); cout << "Origin: " << start_vertex << " destination: " << graph.goal_vertex << endl; alpha_star_search(graph, start_vertex, graph.goal_vertex); alpha_star_search_without_closed_set(graph, start_vertex, graph.goal_vertex); free_memory(graph); 5

lab02_exercise04.cpp Ο κώδικας μεταγλωττίζεται με την ακόλουθη εντολή: g++ lab02_exercise04.cpp lab02_graph.cpp lab02_search.cpp -o lab02_exercise04 -std=c++11 Η εκτέλεση του κώδικα γίνεται ως εξής:./lab02_exercise04 data\toy2_h.txt A Origin: A destination: D A* frontier:[(a 0+10=10)] closed set:[] current node:a successors:[b C] frontier:[(a-b 5+4=9)(A-C 2+8=10)] closed set:[a] current node:b successors:[d] frontier:[(a-c 2+8=10)(A-B-D 13+0=13)] closed set:[a B] current node:c successors:[b D] frontier:[(a-c-b 3+4=7)(A-C-D 12+0=12)(A-B-D 13+0=13)] closed set:[a B C] current node:b successors:[loop] frontier:[(a-c-d 12+0=12)(A-B-D 13+0=13)] closed set:[a B C] current node:d successors:[] Path to goal node found: (A-C-D 12) A* no closed set frontier:[(a 0+10=10)] current node:a successors:[b C] frontier:[(a-b 5+4=9)(A-C 2+8=10)] current node:b successors:[d] frontier:[(a-c 2+8=10)(A-B-D 13+0=13)] current node:c successors:[b D] frontier:[(a-c-b 3+4=7)(A-C-D 12+0=12)(A-B-D 13+0=13)] current node:b successors:[d] frontier:[(a-c-b-d 11+0=11)(A-C-D 12+0=12)(A-B-D 13+0=13)] current node:d successors:[] Path to goal node found: (A-C-B-D 11) Για τον αλγόριθμο A* (με κλειστό σύνολο) [(A,0+10=10)] Α B C [(A-B 5+4=9), (A-C 2+8=10)] [A] B D [(A-C 2+8=10), (A-B-D 13+0=13)] [A B] C B D [(A-C-B 3+4=7), (A-C-D 12+0=12), (A-B-D 13+0=13)] [A B C] B βρόχος [(A-C-D 12+0=12), (A-B-D 13+0=13)] [A B C] D A-C-D, 12 Για τον αλγόριθμο A* (χωρίς κλειστό σύνολο) Μέτωπο αναζήτησης Τρέχουσα Κατάσταση Παιδιά [(A,0+10=10)] A B,C [(A-B,5+4=9), (A-C,2+8=10)] B D [(A-C,2+8=10), (A-B-D,13+0=13)] C B,D [(A-C-B 3+4=7), (A-C-D,12+0=12), (A-B-D,13+0=13)] B D [(A-C-B-D,11+0=11), (A-C-D,12+0=12), (A-B-D,13+0=13)] D A-C-B-D, 11 Στο συγκεκριμένο πρόβλημα οι δύο αλγόριθμοι δεν επιστρέφουν το ίδιο αποτέλεσμα. Ο αλγόριθμος Α* με το κλειστό σύνολο δεν επιστρέφει τη βέλτιστη τιμή ενώ ο Α* χωρίς κλειστό σύνολο την επιστρέφει. Αυτό συμβαίνει διότι το γράφημα δεν είναι συνεπές. 6