Instanciando clases, solapando objetos

plok27
11 de Agosto del 2003
Hola, tengo el siguiente problema:


XClassifier cl1P=selectXClassifierRW(fitSum);
XClassifier cl2P=selectXClassifierRW(fitSum);

XClassifier cl1=new XClassifier(cl1P);
XClassifier cl2=new XClassifier(cl2P);

cl1.applyMutation(state, numberOfActions);
System.out.println ("DESPUES DE MUTAR EL PRIMERO");
System.out.println ("Clasificador1, cl1");
cl1.printXClassifier();
System.out.println ("Clasificador1, cl2");
cl2.printXClassifier();

cl2.applyMutation(state, numberOfActions);
System.out.println ("DESPRES DE FER APPLYMUTATION DEL SEGON!!");
System.out.println ("Clasificador1, cl1");
cl1.printXClassifier();
System.out.println ("Clasificador2, cl2");
cl2.printXClassifier();


La función selectXClassifierRW (int) me devuelve un objeto de la clase XClassifier. Cuando ejecuto este código, resulta que el método cl1.applyMutation no sólo me modifica los atributos de cl1, sinó que, la mayoría de las veces, también me modifica los atributos de cl2, y después de ejecutar la misma función sobre el objeto cl2, sucede lo mismo, modifica sus atributos y algunos (no siempre todos) los de cl1.

He probado también con

XClassifier cl1P=new XClassifier (selectXClassifierRW(fitSum));
XClassifier cl2P=new XClassifier (selectXClassifierRW(fitSum));

en lugar de las dos primeras líneas de código puestas antes, pero los resultados son los mismos. El constructor de la clase XClassifier es el siguiente:

public XClassifier(XClassifier clOld)
{

// condition=new Vector (0);
// condition=(Vector) clOld.condition.clone();

condition= new Vector (clOld.condition);

action=clOld.action;
this.prediction=clOld.prediction;
this.predictionError=clOld.predictionError;
this.fitness=clOld.fitness/clOld.numerosity;
this.numerosity=1;
this.experience=0;
this.actionSetSize=clOld.actionSetSize;
this.timeStamp=clOld.timeStamp;
}

Las líneas que aparecen comentadas han sido también probadas, con unos resultados parecidos.

Si alguien encuentra una explicación lógica, o sabe cual es el problema y la solución, le agradecería que me la explicara, porque no encuentro el modo de resolverlo.

Muchas gracias.

plok27
11 de Agosto del 2003
La función applyMutation solo modifica el vector Condition del XClassifier; y los demás campos de XClassifier son de tipo int y doubles.