SciPy Differential Evolution

Scipy Differential Evolution



Αυτό το άρθρο αφορά το SciPy Differential Evolution (DE). Το SciPy είναι η βιβλιοθήκη της γλώσσας Python και το Differential Evolution είναι η μέθοδος ή η λειτουργία της βιβλιοθήκης SciPy. Οι περισσότεροι άνθρωποι μαθαίνουν Python, είτε είναι προγραμματιστές είτε όχι, καθώς οι πολυάριθμες βιβλιοθήκες και οι λειτουργίες της Python την καθιστούν πολύ ασφαλή και αξιόπιστη. Το SciPy χρησιμοποιείται συχνά για την επίλυση διαφορικών και αλγεβρικών εξισώσεων, παρεμβολής, βελτιστοποίησης κ.λπ. Εδώ, συζητάμε τη χρήση του SciPy DE για να σας βοηθήσουμε να κατανοήσετε πώς να εφαρμόσετε τη συνάρτηση διαφορικής εξέλιξης SciPy σε εφαρμογές Python.

Τι είναι η διαφορική εξέλιξη SciPy στη γλώσσα Python;

Το Scipy είναι μια επιφανειακή, δωρεάν και κατανοητή βιβλιοθήκη που χρησιμοποιείται για την επίλυση επιστημονικών και μαθηματικών ζητημάτων. Το SciPy είναι ένα κουτί θησαυρού για προγραμματιστές επειδή η βιβλιοθήκη του είναι γεμάτη από πολύτιμες ενότητες. Το SciPy επεκτείνει τη λειτουργικότητα του NumPy με ένα πολύτιμο σύμπλεγμα αλγορίθμων. Η βιβλιοθήκη SciPy έχει υποπακέτα που μπορούν να χρησιμοποιηθούν για υπολογισμούς, όπως scipy.io, scipy.optimize, κ.λπ. Το SciPy παράγει μια συνάρτηση «διαφορικής εξέλιξης» και πολλές ισχυρές συναρτήσεις στο πακέτο scipy.optimize. Το scipy.optimize χρησιμοποιείται για βελτιστοποίηση σε εφαρμογές Python.

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







Σύνταξη Συνάρτησης Διαφορικής Εξέλιξης

Η συνάρτηση διαφορικής εξέλιξης υπάρχει στην Python χρησιμοποιώντας τη συνάρτηση differential_evolution (). Η σύνταξη της συνάρτησης διαφορικής εξέλιξης φαίνεται παρακάτω:





Ας δούμε τις παραμέτρους της συνάρτησης:





Η συνάρτηση πρέπει να καλείται με f(x,*args). Τα όρια αναφέρεται στην ακολουθία μεταβλητών που μπορούν να καθοριστούν με δύο τρόπους: η στρατηγική είναι προαιρετική ή μια συμβολοσειρά με την προεπιλεγμένη τιμή 'best1bin'. Το maxiter είναι προαιρετικό ή μια τιμή int. Το popsize είναι int ή προαιρετικό. Το tol είναι int ή προαιρετικό. Η τιμή της μετάλλαξης είναι float ή προαιρετική. Η τιμή ανασυνδυασμού είναι float ή προαιρετική. το seed είναι none, int, NumPy και Random.

Στην επόμενη ενότητα, θα συζητήσουμε μια συνάρτηση διαφορικής εξέλιξης με τη βοήθεια εύκολων παραδειγμάτων.



Παράδειγμα 1

Ας ξεκινήσουμε με ένα απλό παράδειγμα που θα αναπτύξει το ενδιαφέρον σας για την κατανόηση της έννοιας της συνάρτησης διαφορικής εξέλιξης. Χρησιμοποιήσαμε τη συνάρτηση differential_evolution() για να βρούμε την ελάχιστη τιμή. Όμως, για να βρεθεί η ελάχιστη τιμή, η συνάρτηση απαιτούσε όρια αναζήτησης και μια καθορισμένη συνάρτηση στόχου που μπορεί να κληθεί. Ως αποτέλεσμα, ορίζουμε μια συνάρτηση πριν χρησιμοποιήσουμε τη συνάρτηση differential_evolution στο πρόγραμμα. Ο κωδικός αναφοράς του προγράμματος αναφέρεται παρακάτω:

εισαγωγή μουδιασμένος όπως και π.χ.
από πικάντικη εισαγωγή βελτιστοποίηση της
από πικάντικη. βελτιστοποίηση της εισαγωγή διαφορική_εξέλιξη
εισαγωγή matplotlib. pyplot όπως και py
από matplotlib εισαγωγή εκ

def func ( Π ) :

με , Χ = Π

η = π.χ. sqrt ( με ** 4 + x ** 4 )

ΕΠΙΣΤΡΟΦΗ π.χ. sqrt ( η )


DE_όρια = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

res = διαφορική_εξέλιξη ( func , DE_όρια )

Τυπώνω ( res )

Εισαγάγαμε βιβλιοθήκες όπως η SciPy και η NumPy για αριθμητικούς υπολογισμούς συστοιχιών. Εισαγάγαμε τη συνάρτηση differential_evolution από τη λειτουργική μονάδα scipy.optimize. Στη συνέχεια, με τη λέξη-κλειδί «def», ορίζουμε την καλούμενη αντικειμενική συνάρτηση και περνάμε την παράμετρο «p». Ορίζουμε με επιτυχία τη συνάρτηση που βρίσκει την τετραγωνική ρίζα της προσθήκης μεταβλητών NumPy, η οποία είναι z, x. Η τιμή της τετραγωνικής ρίζας αποθηκεύεται στη μεταβλητή 'h'. Επιστρέφουμε την τιμή της τετραγωνικής ρίζας στην καθορισμένη συνάρτηση. Επιστρέφεται ως επιχείρημα.

Μετά από αυτό, τακτοποιούμε τα όρια της μεταβλητής που μπορούν να τεθούν σε στοιχεία εξηγώντας τις ελάχιστες και μέγιστες τιμές της συνάρτησης. Εκτελούμε τη συνάρτηση differential_evolution με «DE_bounds» ως όρισμα. Καλέσαμε την τιμή της συνάρτησης με μια μεταβλητή που ονομάζεται res. Στο τέλος, χρησιμοποιούμε την πρόταση εκτύπωσης για να εμφανίσουμε το αποτέλεσμα. Το αποτέλεσμα εμφανίστηκε μετά την εκτέλεση του προγράμματος. Το αναμενόμενο στιγμιότυπο οθόνης εξόδου φαίνεται παρακάτω:

Differential_evolution() δείχνει ότι η ελάχιστη τιμή της συνάρτησης εμφανίζεται στο σημείο (0, 0).

Παράδειγμα 2

Αυτό είναι ένα άλλο παράδειγμα της συνάρτησης διαφορικής εξέλιξης. Σε αυτό, παίρνουμε πίνακες και εφαρμόζουμε διαφορετικές πράξεις μεταξύ τους. Ο κωδικός αναφοράς του προγράμματος αναφέρεται παρακάτω:

εισαγωγή μουδιασμένος όπως και π.χ.
από πικάντικη εισαγωγή βελτιστοποίηση της
από πικάντικη. βελτιστοποίηση της εισαγωγή διαφορική_εξέλιξη

def αντικειμενική_λειτουργία ( ρε ) :
ΕΠΙΣΤΡΟΦΗ ( ρε [ 1 ] - 1.2 ) / 2 + 0,5 * δ [ 0 ] * 1.3 * ( ρε [ 1 ] + 0,5 ) ** 3

_όρια = [ ( - 0.3 , 0.3 ) , ( - 0.3 , 0.3 ) ]

διαθ = διαφορική_εξέλιξη ( αντικειμενική_λειτουργία , _όρια , popsize = 80 , στίλβωση = Ψευδής )

Τυπώνω ( διαθ )

Όπως φαίνεται στο προηγούμενο στιγμιότυπο οθόνης, εισαγάγαμε με επιτυχία τη βιβλιοθήκη SciPy.optimize.differential_evolution και τη βιβλιοθήκη NumPy στο πρόγραμμα. Τώρα, ορίζουμε μια αντικειμενική συνάρτηση για λογαριασμό της οποίας βρίσκουμε μια ελάχιστη τιμή. Περάσαμε τη μαθηματική έκφραση στην αντικειμενική συνάρτηση και επιστρέψαμε μια τιμή ως όρισμα στην καθορισμένη συνάρτηση. Το όριο μεταξύ των τιμών συνάρτησης είναι απαραίτητο. Έτσι, αφού ορίσαμε τη συνάρτηση, καθορίσαμε και τις δύο τιμές (μέγιστη και ελάχιστη).

Αφού ορίσαμε όλες τις βασικές μεταβλητές, καλέσαμε τη συνάρτηση differential_evolution για να βρούμε την ελάχιστη τιμή μιας συνάρτησης. Αποθηκεύαμε την ελάχιστη τιμή επιστροφής της συνάρτησης σε μια μεταβλητή που ονομάζεται disp. Στο τέλος του προγράμματος, περνάμε τη μεταβλητή disp στη δήλωση εκτύπωσης για να εμφανιστεί το αποτέλεσμα. Μετά την εκτέλεση του προγράμματος, η ελάχιστη τιμή της καθορισμένης λειτουργίας εμφανίζεται στην οθόνη με όρια. Ακολουθεί η έξοδος:

Παράδειγμα 3

Όπως μπορούμε να δούμε, η διαφορική εξέλιξη επιστρέφει διαφορετικές ελάχιστες τιμές μιας αντικειμενικής συνάρτησης με βάση τον ορισμό της. Εδώ, παίρνουμε ένα άλλο παράδειγμα που σχετίζεται με το differential_evolution(). Ο κωδικός αναφοράς για αυτό το πρόγραμμα φαίνεται παρακάτω:

εισαγωγή μουδιασμένος όπως και π.χ.
από πικάντικη εισαγωγή βελτιστοποίηση της
από πικάντικη. βελτιστοποίηση της εισαγωγή διαφορική_εξέλιξη

def obj_func ( όπερ ) :
ΕΠΙΣΤΡΟΦΗ 3 ** 9 / 0.2 + 6 / 3 * 2 ** είκοσι

Όριο = [ ( - 0,5 , 0,5 ) , ( - 0,5 , 0,5 ) ]

έξω = διαφορική_εξέλιξη ( obj_func , Όριο , στίλβωση = Αληθής )

Τυπώνω ( 'Η έξοδος είναι:' , έξω )

Οι βιβλιοθήκες εισάγονται με επιτυχία σε αυτό το πρόγραμμα επειδή δεν μπορούμε να εκτελέσουμε τις λειτουργίες που επιθυμούμε χωρίς αυτές. Ως αποτέλεσμα, συμπεριλαμβάνουμε τη βιβλιοθήκη SciPy στο πρόγραμμα. Μετά από αυτό, ορίστε την αντικειμενική συνάρτηση με την απαιτούμενη λειτουργία. Βρίσκουμε την ελάχιστη τιμή αυτής της καθορισμένης συνάρτησης. Αφού ρυθμίσαμε το όριο της συνάρτησης, καλέσαμε την καθορισμένη συνάρτηση σε διαφορική εξέλιξη για να βρούμε την ελάχιστη τιμή της συνάρτησης. Αυτό στη συνέχεια διατηρείται στη μεταβλητή. Εμφανίζουμε αυτό καλώντας αυτήν τη μεταβλητή στην πρόταση εκτύπωσης. Η έξοδος αυτού του προγράμματος φαίνεται παρακάτω:

Όπως και στο προηγούμενο στιγμιότυπο οθόνης, η ελάχιστη τιμή της συνάρτησης είναι [0,29236931, 0,16808904]. Μπορείτε επίσης να εκτελέσετε αυτά τα παραδείγματα στο περιβάλλον σας για να κατανοήσετε καλύτερα την έννοια της συνάρτησης differential_evolution.

συμπέρασμα

Ας κάνουμε μια γρήγορη ανακεφαλαίωση αυτού του άρθρου. Καταλάβαμε τη βασική λειτουργικότητα της μεθόδου διαφορικής εξέλιξης που ανήκει στη βιβλιοθήκη SciPy στην Python. Η Python είναι η πιο πρόσφατη γλώσσα, με πολλές ευέλικτες βιβλιοθήκες. Οι περισσότεροι προγραμματιστές βοηθήθηκαν στην επίλυση πολύπλοκων δομών κώδικα από προκαθορισμένες συναρτήσεις και βιβλιοθήκες. Η διαφορική εξέλιξη είναι μια συνάρτηση ή μέθοδος βελτιστοποίησης πακέτου SciPy που χρησιμοποιείται για ελαχιστοποίηση. Όταν χρησιμοποιείτε αυτά τα προηγούμενα παραδείγματα σε κώδικα, κατανοείτε πιο ξεκάθαρα την έννοια της διαφορικής εξέλιξης.