Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Το "step". Πως θα πας στο όριο; Πχ σε ένα πολυώνυμο εάν πας με χ, τότε θα θες ψ επαναλήψεις για να περάσεις την κοιλιά. Εάν πας με χ/10 τότε θα θες ψ*10 επαναλήψεις.

 

Και τα δύο είναι άγνωστα. Το να βάλεις ένα 500ρι εκεί στο πουθενά, δεν θα σου δώσει σοβαρή απάντηση.

Δημοσ. (επεξεργασμένο)

Όταν η αναζητούμενη τιμή είναι άγνωστης τάξης μεγέθους, δεν μπορεί να χρησιμοποιηθεί απόλυτη τιμή ως φράγμα,

σχετική πρέπει να χρησιμοποιηθεί, δηλ. σχετική διαφορά,

ΔΕ = abs(Εk - Εk+1)/abs(Ek)

όπου είναι k o δείκτης της επανάληψης και Ε η αναζητούμενη τιμή.

 

Αν κατά την τρέχουσα επανάληψη βρεθεί ότι ΔΕ ≤ ΔΕο, μπορεί να θεωρηθεί ότι επήλθε η σύγκλιση.

Π.χ. για ΔΕο =.01 οι επαναλήψεις θα σταματήσουν όταν η σχετική διαφορά μεταξύ των δύο τελευταίων είναι κάτω από 1%,

ανεξάρτητα αν η αναζητούμενη τιμή είναι 1, 100 ή 100000.

Συνήθως οι τιμές του ΔΕο, ειδικά οι μικρές, δεν επιτυγχάνονται λόγω διαφόρων σφαλμάτων που οφείλονται σε εγγενείς ιδιότητες της διακριτοποίησης (αριθμητική διάχυση, αριθμητική διασπορά, σφάλματα ακύρωσης κ.α.).

Π.χ. δεν είναι σίγουρο ότι ΔΕο =.01 θα μπορεί να επιτευχθεί, όσες επαναλήψεις κι αν γίνουν.

Γι αυτό πρέπει να τεθεί ένα μέγιστο πλήθος επαναλήψεων όπου ο βρόχος θα τερματίζει.

 

Ο παραπάνω τρόπος είναι ο πιο γενικός κι εύκολος.

Αρκετές τεχνικές (π.χ. Newton-Rapshon) παρέχουν τρόπους να μεταβάλλεται αυτόματα το βήμα (adaptive) ώστε να επιταχύνεται η σύγκλιση ελαττώνοντας το πλήθος επαναλήψεων στο ελάχιστο δυνατό. Αρχικά το βήμα είναι μεγάλο για να φτάσει γρήγορα στη γειτονιά της λύσης και μετά καθώς πλησιάζουμε στη λύση μειώνεται καταλλήλως, αυτόματα.

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

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

 

-

Επεξ/σία από V.I.Smirnov
  • Like 3
Δημοσ.

Εάν είχες την foo() που έκανε την συνάρτηση... τότε θα μπορούσες:

function foo(&$var)

να δήλωνες την συνάρτηση, όπου ως &$var θα έπαιρνε τον αριθμό, θα επέστρεφε την διαφορά του αποτελέσματος με την προηγούμενη τιμή και θα άλλαζε την τιμή του ορίσματός της ($var)

 

Έτσι, θα είχες:

while(foo($var) < threshold)
continue;

και ως threshold θα είχες το όριο. 

 

Η foo θα ήταν κάπως ως:

function foo(&$var) {
 $currentValue = $var;
 //do the job
 //calculate difference
 return $difference;
}
Δημοσ.

Όταν η αναζητούμενη τιμή είναι άγνωστης τάξης μεγέθους, δεν μπορεί να χρησιμοποιηθεί απόλυτη τιμή ως φράγμα,

σχετική πρέπει να χρησιμοποιηθεί, δηλ. σχετική διαφορά,

ΔΕ = abs(Εk - Εk+1)/abs(Ek)

όπου είναι k o δείκτης της επανάληψης και Ε η αναζητούμενη τιμή.

 

Αν κατά την τρέχουσα επανάληψη βρεθεί ότι ΔΕ ≤ ΔΕο, μπορεί να θεωρηθεί ότι επήλθε η σύγκλιση.

Π.χ. για ΔΕο =.01 οι επαναλήψεις θα σταματήσουν όταν η σχετική διαφορά μεταξύ των δύο τελευταίων είναι κάτω από 1%,

ανεξάρτητα αν η αναζητούμενη τιμή είναι 1, 100 ή 100000.

Συνήθως οι τιμές του ΔΕο, ειδικά οι μικρές, δεν επιτυγχάνονται λόγω διαφόρων σφαλμάτων που οφείλονται σε εγγενείς ιδιότητες της διακριτοποίησης (αριθμητική διάχυση, αριθμητική διασπορά, σφάλματα ακύρωσης κ.α.).

Π.χ. δεν είναι σίγουρο ότι ΔΕο =.01 θα μπορεί να επιτευχθεί, όσες επαναλήψεις κι αν γίνουν.

Γι αυτό πρέπει να τεθεί ένα μέγιστο πλήθος επαναλήψεων όπου ο βρόχος θα τερματίζει.

 

-

 

Νομίζω τα γράφεις πάρα πολύ ωραία και με το λίγο που το σκέφτομαι τώρα, έχει καλή βάση και λογική για να το πάω έτσι με το ΔΕ. Θα κάνω μια προσπάθεια. 

 

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

 

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

  • 2 εβδομάδες αργότερα...

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...