Η αβεβαιότητα του πώς θα χρησιµοποιηθούν στην πράξη βιβλιοθήκες λογισµικού οδηγεί συχνά τους συγγραφείς τους στην αναγνώριση πιθανών σεναρίων χρήσης και στην κάλυψη αυτών µέσω προγραµµατιστικών διεπαφών πολλαπλών χρήσεων. Ωστόσο, πιο ευέλικτες διεπαφές δυσχεραίνουν την κατανόηση για αποδοτική χρήση τους. Για τη διατήρηση της απλότητας των διεπαφών κατά την υποστήριξη περίπλοκων σεναρίων χρήσης, στην παρούσα διπλωµατική προτείνουµε µια νέα µεθοδολογία, κατά την οποία µηχανικοί λογισµικού που χρησιµοποιούν βιβλιοθήκες δηλώνουν µόνο διαθέσιµα δεδοµένα και επιθυµητές µορφές (π.χ., τύπους δεδοµένων) που θα προέκυπταν µέσω κατάλληλων εφαρµογών των διαθέσιµων διεπαφών. Στη συνέχεια, αυτοµατοποιούµε τη διαδικασία µετασχηµατισµού των δεδοµένων σε επιθυµητούς τύπους εφαρµόζοντας µια τυπο-κατευθυνόµενη προσέγγιση σύνθεσης εντός πεδιακών γλωσσών (Domain Specific Languages - DSLs) που περιγράφουν τις διεπαφές βιβλιοθηκών. Για το σκοπό αυτό, εξετάζουµε τον Καρτεσιανό Γενετικό Προγραµµατισµό (Cartesian Genetic Programming - CGP) ως µέθοδο σύνθεσης µετασχηµατισµών δεδοµένων που συνδυάζουν διεπαφές. ∆υστυχώς, υπάρχουσες συναρτήσεις καταλληλότητας του CGP που συνιστούν ποιες διεπαφές πρέπει να εφαρµοστούν σε κάθε βήµα µετασχηµατισµού αδυνατούν να αποτυπώσουν ορθά το κατά πόσο οι συντεθειµένες λύσεις προσεγγίζουν τις επιθυµητές και, ως εκ τούτου, αποτυγχάνουν να συνθέσουν περίπλοκους µετασχηµατισµούς. Για την αντιµετώπιση αυτής της ανεπάρκειας, παρουσιάζουµε ένα σύστηµα που µαθαίνει νευρωνικές συναρτήσεις καταλληλότητας και το εκπαιδεύουµε σε κάθε DSL δηµιουργώντας τεχνητά παραδείγµατα σύνθεσης. Η προσέγγισή µας υλοποιείται ως πακέτο της γλώσσας Python, ονοµαζόµενο Pymeleon, το οποίο µπορεί να χρησιµοποιηθεί προς απλοποίηση σεναρίων χρήσης πραγµατικών βιβλιοθηκών. Πειϱάµατα σε 20 εργασίες σύνθεσης διαφορετικής πολυπλοκότητας 4 υπαρχουσών προγραµµατιστικών διεπαφών δείχνουν πως η προτεινόµενη νευρωνική συνάρτηση καταλληλότητας αποδίδει καλύτερα από τον CGP, κυρίως στη σύνθεση περίπλοκων µετασχηµατισµών και, στις περισσότερες περιπτώσεις, παράγει το επιθυµητό αποτέλεσµα. Πραγµατοποιούµε επίσης µια περιπτωσιολογική µελέτη, στην οποία δείχνουµε πως, σε σύγκριση µε την υλοποίηση περίπλοκων περιτυλιγµάτων διεπαφών που απλοποιούν τον τελικό κώδικα αλλά είναι δύσκολα στη χρήση, επαρκεί ελάχιστη επιπρόσθετη προσπάθεια για τη δήλωση DSL βιβλιοθηκών ώστε να µειώσει δραστικά την απαιτούµενη προσπάθεια των µηχανικών λογισµικού κατά την επαναχρησιµοποίηση διεπαφών.
Design and implementation of an automation mechanism to automatically develop...
Τυπο-κατευθυνόµενος Νευρωνικός Καρτεσιανός Γενετικός Προγραµµατισµός σε Πεδιακές Γλώσσες για Σύνθεση Συναρτήσεων κατά την Εκτέλεση
1. Τυπο-κατευθυνόμενος Nευρωνικός Καρτεσιανός Γενετικός
Προγραμματισμός σε Πεδιακές Γλώσσες για Σύνθεση
Συναρτήσεων κατά την Εκτέλεση
Ορέστης Φαρμάκης 8262
Επιβλέπων καθηγητής: Ανδρέας Συμεωνίδης
Συνεπιβλέπων διδάκτωρ: Εμμανουήλ Κρασανάκης
Διπλωματική εργασία – 12/2022
Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης
Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών
Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών
2. Πρόβλημα
Συχνή χρήση βιβλιοθηκών
Περίπλοκη χρήση προγραμματιστικών διεπαφών
ppr(graph, "A")
ppr(graph_signal, ["A", "B"])
ppr(signal2graph(graph_signal), str2list("B"))
• Τεκμηρίωση, κατανόηση ⇒
• Επιτάχυνση;
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 2
…
3. Υπόθεση
1. Βιβλιοθήκη = πεδιακή γλώσσα
2. Τύποι δεδομένων = περιορισμοί
π.χ. «η συνάρτηση μου επιστρέφει έναν πραγματικό αριθμό»
3. Τρόποι χρήσης διεπαφών = κανόνες μετασχηματισμού
π.χ. «η συνάρτηση numpy.sum δέχεται μια λίστα πραγματικών και επιστρέφει έναν πραγματικό αριθμό»
⇒ Πρόταση: διατύπωση περιορισμών επιθυμητών αποτελεσμάτων
π.χ. «θέλω να καλέσω διεπαφές της βιβλιοθήκης numpy ώστε να μετατρέψω τη λίστα [1, 4, 3.5] σε πραγματικό αριθμό»
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 3
5. Βιβλιογραφία
Αυτόματη παραγωγή ζητούμενων τύπων δεδομένων
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 5
• Σύνθεση προγραμμάτων
• Γενετικός προγραμματισμός
• Καρτεσιανός γενετικός
προγραμματισμός
π.χ. «append character c to string s» → s.append(c)
π.χ. «append character c to string s» → [1, 0, 1] → s.append(c)
π.χ. «append character c to string s» → → s.append(c)
7. Βιβλιογραφία
Αυτόματη παραγωγή ζητούμενων τύπων δεδομένων
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 7
• Σύνθεση προγραμμάτων
• Γενετικός προγραμματισμός
• Καρτεσιανός γενετικός
προγραμματισμός
π.χ. «append character c to string s» → s.append(c)
π.χ. «append character c to string s» → [1, 0, 1] → s.append(c)
π.χ. «append character c to string s» → → s.append(c)
Eυριστική συνάρτηση καταλληλότητας ⇒
Αδυναμία περίπλοκων συνδυασμών διεπαφών για εξαγωγή συγκεκριμένων τύπων δεδομένων
οι διεπαφές θα εκτελεστούν μόνο μία φορά (στο τέλος)
10. Pymeleon
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 11
DSL
defines
extends
Viewer
Genetic
Viewer
PymLiz Object
User Input Result
Synthesis
member
11. Pymeleon
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 12
DSL
Create
synthetic data
defines
extends
Train
Viewer
Genetic
Viewer
PymLiz Object
User Input Result
Trained Neural
Network
Synthesis
member
member
16. Συνθετικά δεδομένα
• Προσομοίωση της εξελικτικής διαδικασίας
• Τυχαίες εφαρμογές κανόνων της πεδιακής γλώσσας
⇒ γνωστό επιθυμητό αποτέλεσμα και ενδιάμεσα βήματα
• 4-πλέτες εκπαίδευσης
(Gbefore , Gafter , Gnegative , Gfinal)
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 19
17. Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 20
str int
float
Δημιουργία συνθετικών δεδομένων
18. Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 21
str int
float
x
str int
float
random Rule
Δημιουργία συνθετικών δεδομένων
19. Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 22
x
str int
x
float
str int
float
x
str int
float
x
str int
x
float
f
random Rule random Rule random Rule
Δημιουργία συνθετικών δεδομένων
x
str int
x
float
f
g
random Rule
20. Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 23
x
str int
x
float
str int
float
x
str int
float
x
str int
x
float
f
random Rule random Rule random Rule
Δημιουργία συνθετικών δεδομένων
𝐺𝑏𝑒𝑓𝑜𝑟𝑒
x
str int
x
float
f
g
random Rule
21. Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 24
x
str int
x
float
str int
float
x
str int
float
x
str int
x
float
f
random Rule random Rule random Rule
Δημιουργία συνθετικών δεδομένων
𝐺𝑏𝑒𝑓𝑜𝑟𝑒 𝐺𝑎𝑓𝑡𝑒𝑟
x
str int
x
float
f
g
random Rule
22. Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 25
x
str int
x
float
str int
float
x
str int
float
x
str int
x
float
f
random Rule random Rule random Rule
Δημιουργία συνθετικών δεδομένων
𝐺𝑏𝑒𝑓𝑜𝑟𝑒 𝐺𝑎𝑓𝑡𝑒𝑟
x
str int
x
float
f
𝐺𝑓𝑖𝑛𝑎𝑙
g
random Rule
23. Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 26
x
str int
x
float
str int
float
x
str int
float
x
str int
x
float
f
random Rule random Rule random Rule
Δημιουργία συνθετικών δεδομένων
x
str int
x
float
f
𝐺𝑓𝑖𝑛𝑎𝑙
g
random Rule
𝐺𝑏𝑒𝑓𝑜𝑟𝑒 𝐺𝑎𝑓𝑡𝑒𝑟
𝐺𝑛𝑒𝑔𝑎𝑡𝑖𝑣𝑒
x
str int
+
float
24. Νευρωνικό δίκτυο
Διανυσματική αναπαράσταση γράφων
μέσω αναζήτησης κατά βάθος (DFS) και συνένωσης με αναπαράσταση του 𝐺𝑓𝑖𝑛𝑎𝑙
𝐺𝑏𝑒𝑓𝑜𝑟𝑒 , 𝐺𝑓𝑖𝑛𝑎𝑙 → 𝑉𝑏𝑒𝑓𝑜𝑟𝑒
𝐺𝑎𝑓𝑡𝑒𝑟 , 𝐺𝑓𝑖𝑛𝑎𝑙 → 𝑉𝑎𝑓𝑡𝑒𝑟
𝐺𝑛𝑒𝑔𝑎𝑡𝑖𝑣𝑒 , 𝐺𝑓𝑖𝑛𝑎𝑙 → 𝑉𝑛𝑒𝑔𝑎𝑡𝑖𝑣𝑒
Σφάλμα
Μεγαλύτερη καταλληλότητα (= έξοδος νευρωνικού 𝑛𝑛) σε γράφους που:
α) εφαρμόζουν το σωστό μετασχηματισμό και
β) είναι πιο κοντά στον τελικό γράφο σε σχέση με το προηγούμενο βήμα
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 27