Newsgroup: it.comp.java
Titolo: algoritmo genetico[usando weka] : problema serializable exception

Ciao a tutti,
ho implementato questa funzione per fare il ranking di una popolazione:
private void rankPopulation() {
         Individual indv;
         double fitness = 0, best = 0;
         for (int i = 0; i < mThisGeneration.size(); i++) {
             try {
                 indv = (Individual) mThisGeneration.get(i);
                 mEvaluation.crossValidateModel(indv, 
mTrainingInstances, 10, new Random()); <<<<<<<<<<<<-----------------
                 fitness = mEvaluation.pctCorrect();
                 indv.setFitness(fitness);
                 if (best <= fitness)
                     best = fitness;
                 if (mBestFitness <= fitness){
                     mBestFitness = fitness;
                     mBestIndividual = indv;
                 }
             }
             catch (Exception e) {
                 e.printStackTrace();
             }
         }
         System.out.println("Best Fitness: "+ best);
         // Sort the list. Worse first, and the best last
         Collections.sort(mThisGeneration);
     }
Il problema sta nel fatto che al momento dell'esecuzione (in 
compilazione va tutto bene), mi appare questo errore e il programma va 
in loop:
java.io.NotSerializableException: core.RuleSet
         at 
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1075)
         at 
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1369)
         at 
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1341)
         at 
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1284)
         at 
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)
         at 
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)
         at weka.core.SerializedObject.<init>(Unknown Source)
         at weka.core.SerializedObject.<init>(Unknown Source)
         at weka.classifiers.Classifier.makeCopy(Unknown Source)
         at weka.classifiers.Evaluation.crossValidateModel(Unknown Source)
         at core.GeneticSet.rankPopulation(GeneticSet.java:103)
         at core.GeneticSet.runGenetic(GeneticSet.java:88)
         at core.GeneticSet.<init>(GeneticSet.java:41)
         at Main.<init>(Main.java:17)
         at Main.main(Main.java:47)
Visto che non riesco minimamente a capire il motivo di questo errore, 
qualcuno può darmi un suggerimento o indirizzarmi su quale possa essere 
un'ipotetica causa che possa lanciare questa eccezione?
Grazie
/l.

Scusate,
aggiungo pure che, a seguito dell'eccezione di cui sopra, ho 
implementato l'interfaccia serializable nella classe di appartenenza, 
senza per questo avere miglioramenti.
/l.

 un'ipotetica causa che possa lanciare questa eccezione?
Direi che mancano alcuni elementi per valutare le eccezioni:
- che tipo di Collection è mThisGeneration?
- è possibile chiamare il metodo Collections.sort() sulla tua struttura? 
Attraverso quali criteri di ordinamento?

donato ha scritto:

mThisGeneration è un arraylist che viene così definito e creato:
mThisGeneration = new ArrayList(POPULATIONSIZE);
e riempito tramite la seguente funzione:
     private void createPopulation() {
         mThisGeneration.clear();
         RuleSet ruleSet;
         for (int i = 0; i < POPULATIONSIZE; i++) {
             try {
                 ruleSet = new RuleSet(RuleSet.randomRuleSet());
                 mThisGeneration.add(new Individual(ruleSet));
             }
             catch (Exception e) {
                 System.out.println("RuleSet");
                 e.printStackTrace();
             }
         }
         System.out.println("Size " + mThisGeneration.size());
     }
Dimmi pure se ti servono altre informazioni, io sto facendo un pò di 
prove per capire dove stia il problema.
/l.