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

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

Δημοσ.

Γεια χαρά σε όλους...

Έχω 1 πολύ "κουφό" πρόβλημα...

Έχω 1 εφαρμογή Γενετικών Αλγορίθμων σε Java την οποία αναλύω για να μπορέσω να την τροποποιήσω κατα τις δικές μου απαιτήσεις...

Τρέχω την εφαρμογή για διάφορα runs και σε κάθε run βγάζει διαφορετικά αποτελέσματα και όλα καλά και ωραία..έτσι είναι η δομή του και έτσι πρέπει να δουλεύει...βασίζεται σε τυχαίους αριθμούς βάση των οποίων δημιουργεί 1 πληθυσμό και απο εκεί επιλέγει τα "καλύτερα"....

Μόλις όμως φυτεύω System.out.println να δείξει τις τιμές των Object....τότε απλώς τρέχει τα ίδια και τα ίδια....όσα runs και να βάλω η τιμή του πρωτου run παραμένει και στα υπόλοιπα....κανένα deviation τίποτα...τα ίδια και τα ίδια....

Μόλις κάνω comment out to println ....όλα καλά και σωστά.....το έχει δει κανένας άλλος αυτό το πρόβλημα....?

 

 

Δημοσ.

Υποθέτω ότι τρέχεις πάνω από ένα thread και η println κάνει πιο αργό το ένα από αυτά και τα αποτελεσματα σου γίνονται πιο προβλέψιμα.

Αυτή η καθυστέρηση ίσως να μειώνει τα race conditions. 

Θεωρητικά σε single-threaded η προσθήκη μιας "αθώας" εντολής δεν θα έπρεπε να επηρεάσει τα αποτελέσματα.

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

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

Σκεφτομαι να τα φορτώσω όλο αυτό το "debug" σε 1 stringbuilder και στο τέλος να το κάνω Iterate για να πάρω την πληροφορία που χρειάζομαι....

Βέβαια έτσι και αλλιώς η εφαρμογή θα μεταφερθεί σε άλλη γλώσσα (C#) οπότε για εκ βαθέως αναζητήσεις δεν προκειται ...αλλά και πάλι είναι παράξενο....

Επεξ/σία από masteripper
Δημοσ. (επεξεργασμένο)
18 λεπτά πριν, albNik είπε

Επίσης η τιμή της Random έχει σχέση με την system clock. H println θέλει κάποιες εκατοντάδες nanoseconds να εκτελεστεί.

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

 Thread.sleep((long) (10*r.nextDouble()));

αλλά παλι τζίφος

Επεξ/σία από masteripper
Δημοσ.
58 λεπτά πριν, makisvisual είπε

Κάνε post τον κυρίως κώδικα

Δεν έχει νόημα πίστεψε με...είναι ολόκληρη εφαρμογή....επειδή έτσι και αλλιώς θα τον μεταφέρω μαζί με αρκετές αλλαγές θα το εξετάσω σοβαρά όταν θα είμαι στην C#...πάντως είναι παράξενο....

Δημοσ.

Δεν πιστεύω να βοηθήσει αλλά αυτός είναι ο κώδικας που αν φυτέψω το Logging -- καταστρέφει το random

 if(children.length>1)
        {       	
        	
        	GUI.appendString(GUI.sbuilder,"Indicator : " + children[0] + " Value of : " + children[1]);
        try {
        	Thread.sleep((long) (10*r.nextDouble()));	
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        

        }

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

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

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

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

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

Σύνδεση

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

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