44
➢ System.Numerics
Ο χώρος ονομάτων System.Numerics επεκτείνει τους βασικούς αριθμητικούς τύπους
προσφέροντας σύνθετες δομές. Δομές όπως αυθαίρετα μεγάλοι προσημασμένοι ακέραιοι
(BigInteger), μιγαδικοί αριθμοί και διανύσματα περιέχονται στο System.Numerics.
2.8.5 Google OR-Tools
Το OR-Tools είναι μία σουίτα ανοιχτού κώδικα που αναλαμβάνει την επίλυση
προβλημάτων γραμμικού προγραμματισμού, προγραμματισμού περιορισμών, μεικτών
ακεραίων, δρομολόγησης οχημάτων και των αντίστοιχων προβλημάτων βελτιστοποίησης.
Αναπτύχθηκε το 2011 από τον Laurent Perron και βρήκε ιδιαίτερη επιτυχία στον παγκόσμιο
διαγωνισμό προγραμματισμού περιορισμών MiniZinc Challenge κατακτώντας την πρώτη
θέση σε διάφορες δοκιμασίες από το 2018 έως και το 2021 [76].
Για τη μοντελοποίηση και επίλυση ενός CSP μπορεί να γίνει χρήση του επιλυτή CP-
SAT που προσφέρει το OR-Tools. To CP-SAT χρησιμοποιεί έναν επιλυτή Lazy Clause
Generation σε συνδυασμό με έναν επιλυτή SAT όπως περιγράφεται στην παρουσίαση
"Search is Dead Long Live Proof" [72]. Η εκτέλεση του επιλυτή περιλαμβάνει ένα στάδιο
προεπεξεργασίας πριν ξεκινήσει η επίλυση για τη μείωση του χώρου αναζήτησης. Στην αρχή
της προεπεξεργασίας εξετάζονται όλοι οι περιορισμοί μέχρι να μην είναι δυνατές άλλες
αλλαγές. Οι μεταβλητές δε διαγράφονται, αλλά τα πεδία ορισμού τους μπορεί να μειωθούν.
Όσον αφορά τους περιορισμούς, μπορούν να σημανθούν ως κενοί αλλά δε μπορούν να
διαγραφούν. Στο στάδιο αυτό, μπορούν να προστεθούν νέες μεταβλητές ή περιορισμοί μετά
τους προϋπάρχοντες με την προϋπόθεση ότι οι περιορισμοί προστίθενται μόνο όταν
χρειάζονται στο πρόβλημα χαρτογράφησης. Στο τέλος, όλες οι μεταβλητές αντιγράφονται στο
μοντέλο χαρτογράφησης του προβλήματος αλλά αντιστοιχίζονται με κάποιο δείκτη μόνο
αυτές που χρησιμοποιούνται σε κάποιο περιορισμό.
Αναλυτικά, η διαδικασία της προεπεξεργασίας περιλαμβάνει με τη σειρά:
1. Μείωση των πεδίων ορισμού και την απλοποίηση των περιορισμών
2. Επέκταση ή αποσύνθεση περιορισμών
3. Εντοπισμός ισοδυναμίας μεταβλητών και καθορισμός σχέσεων
4. Αντικατάσταση με κανονική αναπαράσταση
5. Αλλαγή μεταβλητών και έλεγχος διάδοσης