ΛΟΓΙΣΜΙΚΟ ΒΕΛΤΙΣΤΟΠΟΙΗΣΗΣ MERLIN / MCL 3.0 ΠΕΡΙΒΑΛΛΟΝ ΕΛΑΧΙΣΤΟΠΟΙΗΣΗΣ
Merlin & ΜCL Merlin Τι είναι το Merlin Πακέτο λογισμικού που προσφέρει ένα περιβάλλον κατάλληλο για επίλυση προβλημάτων ελαχιστοποίησης. MCL MCL Τι είναι η MCL (Merlin Control Language) Γλώσσα ελέγχου του περιβάλλοντος κατάλληλη για τον προγραμματισμό "στρατηγικών" ελαχιστοποίησης.
Τι προβλήματα αντιμετωπίζονται Ελαχιστοποίηση πολυδιάστατων συνεχών συναρτήσεων. Περιορισμοί ορίων για κάθε μεταβλητή. Ειδική μέριμνα για συναρτήσεις που είναι άθροισμα τετραγώνων. Συστήματα μη γραμμικών εξισώσεων.
Τρόπος αντιμετώπισης Παροχή εύχρηστου συστήματος επικοινωνίας με τον χρήστη. Υλοποίηση μιας πλειάδας στιβαρών αλγορίθμων βελτιστοποίησης. Παροχή συστήματος βοήθειας χρήσης. Ύπαρξη γλώσσας προγραμματισμού.
Αλγόριθμοι Μέθοδοι χωρίς χρήση παραγώγων Simplex (Nelder and Mead ) Roll (Pattern Search ) Μέθοδοι με χρήση παραγώγων Συζυγών κλίσεων (Τρεις αλγόριθμοι ) Μεταβλητής μετρικής (BFGS, DFP ) Levenberg-Marquardt
Tι απαιτείται από τον χρήστη Το λογισμικό έχει γραφτεί σε Fortran-77 Το λογισμικό έχει γραφτεί σε Fortran-77. Το Merlin χωρίζεται σε τρία μέρη Ένα μικρό κυρίως πρόγραμμα. Ένα σύνολο υποπρογραμμάτων που υλοποιούν το όλο περιβάλλον. Υποπρογράμματα που υλοποιούν την αντικειμενική συνάρτηση και προαιρετικά τις παραγώγους της. Υποπρογράμματα που υλοποιούν την αντικειμενική συνάρτηση και προαιρετικά τις παραγώγους της.
O χρήστης πρέπει να κωδικοποιήσει σε ANSI Fortran - 77 τα προγράμματα: Αντικειμενική συνάρτηση: (υποχρεωτικά) Την κλίση: (προαιρετικά) Τον Εσσιανό πίνακα: (προαιρετικά)
Όταν η συνάρτηση είναι άθροισμα τετραγώνων... Εάν δηλαδή: Τότε αντί της συνάρτησης f(x) μπορεί να προγραμματιστούν μόνο οι όροι f k (x). Προαιρετικά δε μπορεί να προγραμματιστεί και η Ιακωβιανή:
Ενα απλό παράδειγμα... Ελαχιστοποίηση της: Η κλίση: Ο Εσσιανός πίνακας:
FUNCTION FUNMIN(X,N) DIMENSION X(N) FUNMIN= X(1)**2 + (X(2)-1)**4 END SUBROUTINE GRANAL(N,X,GRAD) DIMENSION X(N),GRAD(N) GRAD(1)= 2*X(1) GRAD(2)= 4*(X(2)-1))**3 END SUBROUTINE HANAL(H,LD,N,X) DIMENSION X(N),H(LD,N) H(1,1)= 2. H(2,1)= 0. H(2,2)= 12*(X(2)-1)**2 END Μόνο το κάτω μέρος του Εσσιανού πίνακα H(I,J), υπολογίζεται. Η κλίση αντιστοιχεί στο άνυσμα GRAD Η αντικειμενική συνάρτηση (γενικής μορφής).
Αθροισμα τετραγώνων... Η συνάρτηση μπορεί να γραφτεί ως: Η Ιακωβιανή:
SUBROUTINE SUBSUM(M,N,X,F) DIMENSION X(N),F(M) F(1)= X(1) F(2)= (X(2)-1)**2 END SUBROUTINE JANAL(M,N,X,FJ,LD) DIMENSION X(N),FJ(LD,N) FJ(1,1)= 1. FJ(1,2)= 0. FJ(2,1)= 0. FJ(2,2)= 2*(X(2)-1) END Οι όροι f k (x), ένας προς ένας. Οι όροι J ki (x), ένας προς ένας.
Προσαρμογή δεδομένων. Ένα συχνά εμφανιζόμενο πρόβλημα. Δεδομένων των σημείων (x i,y i ), i=1,2,...,M προσαρμόστε μια αναλυτική μορφή N(x,p) (με παραμέτρους p i ) που αναπαριστά τα δεδομένα ικανοποιητικά. x y
Προσαρμογή δεδομένων με χρήση Τεχνητών Νευρωνικών δικτύων Ενα σιγμοειδές Perceptron με ένα κρυφό επίπεδο έχει την μορφή: Όπου η σιγμοειδής συνάρτηση δίδεται από:
Η προσαρμογή επιτυγχάνεται ελαχιστοποιώντας την παράσταση: Η Ιακωβιανή έχει την μορφή:
Η κλίση γράφεται ως: Ο Εσσιανός πίνακας δε, ως εξής:
Υλοποίηση subroutine ann(p,nodes,x,per) implicit double precision (a-h,o-z) dimension p(3*nodes) per = 0 do 1 i=1,nodes arg = p(3*i-1)*x + p(3*i) per = per + p(3*i-2)/(1.+exp(-arg)) 1 continue end Νευρωνικό δίκτυο p (input) οι παράμετροι nodes (input) οι κόμβοι x (input) per (output) το δίκτυο subroutine gann(p,nodes,x,gper) implicit double precision (a-h,o-z) dimension p(3*nodes),gper(3*nodes) do 1 k=1,3*nodes,3 arg = p(k+1)*x+p(k+2) sig = 1./(1+exp(-arg)) gper(k)= sig gper(k+2)= p(k)*sig*(1-sig) gper(k+1)= x*gper(k+2) 1 continue end Η κλίση του δικτύου. p (input) οι παράμετροι nodes (input) οι κόμβοι x (input) gper (output) η κλίση Ο κώδικας για τον Εσσιανό πίνακα δεν έχει υλοποιηθεί και αφήνεται σαν άσκηση για τον αναγνώστη.
subroutine subsum ( m, n, p, f ) implicit double precision (a-h,o-z) save parameter(mx=8000) dimension p(n), f(m) common/xydata/x(mx),y(mx),mm data itric /0/ if(itric.eq.0) then itric = 1 if(m.gt.mx) stop mm=m if( (n/3)*3.ne. n) stop nodes = n/3 open(1,file='xy.data',status='old') do 10 i=1,m read(1,*)x(i),y(i) 10 continue close(1) endif do 1 i = 1,m call ann(p,nodes,x(i),per) f(i)= per-y(i) 1 continue end Υπολογισμός των επι μέρους όρων. Το υποπρόγραμμα: SUBROUTINE SUBSUM Τα σημεία x-y είναι στο αρχείο: xy.data Η διαδικασία αυτή εκτελείται μόνο την πρώτη φορά που καλείται η ρουτίνα SUBSUM
Υπολογισμός της Ιακωβιανής. Το υποπρόγραμμα: SUBROUTINE JANAL subroutine janal ( m, n, p, fj, ld ) implicit double precision (a-h,o-z) save parameter(mx=8000,nx=250) common/xydata/x(mx),y(mx),mm dimension p(n), fj(ld,n),gper(nx) nodes = n/3 do 1 i=1,m call gann(p,nodes,x(i),gper) do 2 j=1,n fj(i,j) = gper(j) 2 continue 1 continue end
Η κλίση της αντικειμενικής συνάρτησης. Το υποπρόγραμμα: SUBROUTINE GRANAL subroutine granal ( n, p, grad ) implicit double precision (a-h,o-z) save parameter(mx=8000,nx=250) common/xydata/x(mx),y(mx),mm dimension p(n),grad(n),ff(mx),g(nx) nodes = n/3 call subsum ( mm, n, p, ff ) do 10 i=1,n grad(i)=0 10 continue do 1 l=1,mm call gann(p,nodes,x(l),g) do 2 j=1,n grad(j)= grad(j) + 2*ff(l)*g(j) 2 continue 1 continue end