Tuning of the Serializer - should load faster now.
This commit is contained in:
parent
513bf3df7d
commit
1430b33335
@ -75,7 +75,13 @@ public class GOEPanel extends JPanel implements ItemListener {
|
||||
m_goe = goe;
|
||||
|
||||
//System.out.println("GOEPanel.Constructor !!");
|
||||
try {
|
||||
if (!(Proxy.isProxyClass(m_Object.getClass()))) m_Backup = copyObject(m_Object);
|
||||
} catch(OutOfMemoryError err) {
|
||||
m_Backup=null;
|
||||
System.gc();
|
||||
System.err.println("Could not create backup object: not enough memory (GOEPanel backup of " + m_Object + ")");
|
||||
}
|
||||
m_ObjectNames = new DefaultComboBoxModel(new String [0]);
|
||||
m_ObjectChooser = new JComboBox(m_ObjectNames);
|
||||
m_ObjectChooser.setEditable(false);
|
||||
@ -211,6 +217,7 @@ public class GOEPanel extends JPanel implements ItemListener {
|
||||
protected Object copyObject(Object source) {
|
||||
Object result = null;
|
||||
try {
|
||||
// System.out.println("Copying " + BeanInspector.toString(source));
|
||||
SerializedObject so = new SerializedObject(source);
|
||||
result = so.getObject();
|
||||
} catch (Exception ex) {
|
||||
|
@ -12,8 +12,21 @@ package eva2.gui;
|
||||
/*==========================================================================*
|
||||
* IMPORTS
|
||||
*==========================================================================*/
|
||||
import java.io.*;
|
||||
import java.util.zip.*;
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.Serializable;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
import eva2.server.modules.GOParameters;
|
||||
import eva2.tools.Serializer;
|
||||
/**
|
||||
* This class stores an object serialized in memory. It allows compression,
|
||||
* to be used to conserve memory (for example, when storing large strings
|
||||
@ -29,9 +42,10 @@ public class SerializedObject implements Serializable {
|
||||
* Serializes the supplied object into a byte array without compression.
|
||||
*
|
||||
* @param obj the Object to serialize.
|
||||
* @throws IOException
|
||||
* @exception Exception if the object is not Serializable.
|
||||
*/
|
||||
public SerializedObject(Object obj) throws Exception {
|
||||
public SerializedObject(Object obj) throws IOException {
|
||||
this(obj, false);
|
||||
}
|
||||
/**
|
||||
@ -39,9 +53,10 @@ public class SerializedObject implements Serializable {
|
||||
*
|
||||
* @param obj the Object to serialize.
|
||||
* @param compress true if the object should be stored compressed.
|
||||
* @throws IOException
|
||||
* @exception Exception if the object is not Serializable.
|
||||
*/
|
||||
public SerializedObject(Object obj, boolean compress) throws Exception {
|
||||
public SerializedObject(Object obj, boolean compress) throws IOException {
|
||||
//System.err.print("."); System.err.flush();
|
||||
m_Compressed = compress;
|
||||
m_Serialized = toByteArray(obj, m_Compressed);
|
||||
@ -52,9 +67,10 @@ public class SerializedObject implements Serializable {
|
||||
* @param obj the Object to serialize
|
||||
* @param compress true if the object should be compressed.
|
||||
* @return the byte array containing the serialized object.
|
||||
* @throws IOException
|
||||
* @exception Exception if the object is not Serializable.
|
||||
*/
|
||||
protected static byte [] toByteArray(Object obj, boolean compress) throws Exception {
|
||||
protected static byte [] toByteArray(Object obj, boolean compress) throws IOException {
|
||||
ByteArrayOutputStream bo = new ByteArrayOutputStream();
|
||||
OutputStream os = bo;
|
||||
if (compress)
|
||||
|
@ -59,7 +59,7 @@ class treeElement implements java.io.Serializable {
|
||||
*/
|
||||
public class SelectXProbRouletteWheel implements InterfaceSelection, java.io.Serializable {
|
||||
|
||||
private treeElement[] m_TreeRoot;
|
||||
private transient treeElement[] m_TreeRoot = null;
|
||||
private InterfaceSelectionProbability m_SelProbCalculator = new SelProbStandard();
|
||||
private boolean m_ObeyDebsConstViolationPrinciple = true;
|
||||
|
||||
@ -86,8 +86,9 @@ public class SelectXProbRouletteWheel implements InterfaceSelection, java.io.Ser
|
||||
this.m_TreeRoot = this.buildSelectionTree(population);
|
||||
}
|
||||
|
||||
/** This method will select a pool of individuals from the given
|
||||
* Population in respect to the selection propability of the
|
||||
/**
|
||||
* This method will select a pool of individuals from the given
|
||||
* Population in respect to the selection probability of the
|
||||
* individuals.
|
||||
* @param population The source population where to select from
|
||||
* @param size The number of Individuals to select
|
||||
@ -97,21 +98,15 @@ public class SelectXProbRouletteWheel implements InterfaceSelection, java.io.Ser
|
||||
Population result = new Population();
|
||||
result.setTargetSize(size);
|
||||
|
||||
if (true) {
|
||||
//this.m_TreeRoot = this.buildSelectionTree(population);
|
||||
for (int i = 0; i < size; i++) {
|
||||
result.add(this.selectTree(population));
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < size; i++) {
|
||||
result.add(this.selectStandard(population));
|
||||
}
|
||||
for (int i = 0; i < size; i++) {
|
||||
result.add(this.selectTree(population));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/** This method will build a selection tree
|
||||
/**
|
||||
* This method will build a selection tree.
|
||||
* @param p The population
|
||||
*/
|
||||
private treeElement[] buildSelectionTree(Population p) {
|
||||
@ -155,6 +150,7 @@ public class SelectXProbRouletteWheel implements InterfaceSelection, java.io.Ser
|
||||
}
|
||||
|
||||
private AbstractEAIndividual selectStandard(Population population) {
|
||||
// old version
|
||||
double sum = 1, random, tmpD;
|
||||
int currentCriteria = 0, critSize;
|
||||
|
||||
|
@ -1677,8 +1677,8 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
|
||||
return new double[]{1.,1.,1.,1.};
|
||||
}
|
||||
if (!(pop.getEAIndividual(0) instanceof InterfaceDataTypeDouble)) {
|
||||
EVAERROR.errorMsgOnce("Warning: population correlations can only be calculated for double valued data!");
|
||||
return new double[]{1.,1.,1.,1.};
|
||||
// EVAERROR.errorMsgOnce("Warning: population correlations can only be calculated for double valued data!");
|
||||
return new double[]{Double.NaN,Double.NaN,Double.NaN,Double.NaN};
|
||||
}
|
||||
int index=0;
|
||||
double corsSum=0, minCor = 10., maxCor=-10.;
|
||||
|
@ -68,6 +68,7 @@ public class GeneticAlgorithm implements InterfaceOptimizer, java.io.Serializabl
|
||||
public void initByPopulation(Population pop, boolean reset) {
|
||||
this.m_Population = (Population)pop.clone();
|
||||
if (reset) {
|
||||
this.m_Problem.initPopulation(m_Population);
|
||||
this.m_Population.init();
|
||||
this.evaluatePopulation(this.m_Population);
|
||||
this.firePropertyChangedEvent(Population.nextGenerationPerformed);
|
||||
|
@ -3,7 +3,6 @@ package eva2.server.modules;
|
||||
import java.io.Serializable;
|
||||
|
||||
import eva2.server.go.InterfaceGOParameters;
|
||||
import eva2.server.go.individuals.GAIndividualDoubleData;
|
||||
import eva2.server.go.operators.terminators.EvaluationTerminator;
|
||||
import eva2.server.go.problems.F1Problem;
|
||||
import eva2.server.go.strategies.GeneticAlgorithm;
|
||||
|
@ -21,9 +21,11 @@ import java.io.IOException;
|
||||
import java.io.InvalidClassException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.PipedInputStream;
|
||||
import java.io.PipedOutputStream;
|
||||
import java.io.Serializable;
|
||||
|
||||
import eva2.gui.SerializedObject;
|
||||
import eva2.server.go.problems.PSymbolicRegression;
|
||||
import eva2.server.modules.GOParameters;
|
||||
/*==========================================================================*
|
||||
* CLASS DECLARATION
|
||||
*==========================================================================*/
|
||||
@ -33,13 +35,23 @@ import java.io.Serializable;
|
||||
public class Serializer {
|
||||
/**
|
||||
* Serialize the object o (and any Serializable objects it refers to) and
|
||||
* store its serialized state in File f.
|
||||
* store its serialized state in File f. If serializeInMem is true, the object
|
||||
* is wrapped in a SerializedObject first, which seems to be more efficient than
|
||||
* writing a nested object directly to a file.
|
||||
*
|
||||
* @param o the object to write
|
||||
* @param f the file to write to
|
||||
* @param serializeInMem flag whether to wrap the object in a SerializedObject
|
||||
* @throws IOException
|
||||
**/
|
||||
static public void store(Serializable o, File f) throws IOException {
|
||||
static public void store(Serializable o, File f, boolean serializeInMem) throws IOException {
|
||||
FileOutputStream file = new FileOutputStream(f);
|
||||
ObjectOutputStream out = new ObjectOutputStream(file);
|
||||
try {
|
||||
out.writeObject(o);
|
||||
Object objToStore = o;
|
||||
if (serializeInMem) objToStore = new SerializedObject((Object)o);
|
||||
// System.out.println("Writing " + o.getClass());
|
||||
out.writeObject(objToStore);
|
||||
} catch (java.io.NotSerializableException e) {
|
||||
System.err.println("Error: Object " + o.getClass() + " is not serializable - run settings cannot be stored.");
|
||||
e.printStackTrace();
|
||||
@ -59,12 +71,14 @@ public class Serializer {
|
||||
// }
|
||||
|
||||
/**
|
||||
* Deserialize the contents of File f and return the resulting object
|
||||
* Deserialize the contents of File f and return the resulting object.
|
||||
* A SerializedObject is unwrapped once.
|
||||
**/
|
||||
static public Object load(File f) throws IOException, ClassNotFoundException {
|
||||
FileInputStream file = new FileInputStream(f);
|
||||
ObjectInputStream in = new ObjectInputStream(file);
|
||||
Object ret = in.readObject();
|
||||
if (ret instanceof SerializedObject) ret = ((SerializedObject)ret).getObject();
|
||||
in.close();
|
||||
file.close();
|
||||
return ret;
|
||||
@ -167,7 +181,7 @@ public class Serializer {
|
||||
// Output it to a file
|
||||
File f = new File("datastructure.ser");
|
||||
System.out.println("Storing to a file...");
|
||||
Serializer.store(ds, f);
|
||||
Serializer.store(ds, f, true);
|
||||
// Read it back from the file, and display it again
|
||||
ds = (DataStructure) Serializer.load(f);
|
||||
System.out.println("Read from the file: " + ds);
|
||||
@ -184,7 +198,7 @@ public class Serializer {
|
||||
**/
|
||||
public static void storeString (String Filename,String s) {
|
||||
try {
|
||||
store(s, new File(Filename));
|
||||
store(s, new File(Filename), false);
|
||||
} catch (Exception e) {
|
||||
System.out.println("ERROR writing string File "+Filename+ " String "+s);
|
||||
}
|
||||
@ -209,7 +223,7 @@ public class Serializer {
|
||||
public static File storeObject (String Filename,Serializable s) {
|
||||
File ret = new File(Filename);
|
||||
try {
|
||||
store(s, ret);
|
||||
store(s, ret, true);
|
||||
} catch (Exception e) {
|
||||
System.err.println("ERROR writing Object File "+Filename+ " String "+s);
|
||||
System.err.println(e.getMessage());
|
||||
|
Loading…
x
Reference in New Issue
Block a user