diff --git a/src/eva2/server/go/operators/selection/probability/AbstractSelProb.java b/src/eva2/server/go/operators/selection/probability/AbstractSelProb.java index b85bd822..712c7540 100644 --- a/src/eva2/server/go/operators/selection/probability/AbstractSelProb.java +++ b/src/eva2/server/go/operators/selection/probability/AbstractSelProb.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import eva2.server.go.individuals.AbstractEAIndividual; import eva2.server.go.populations.Population; +import eva2.tools.EVAERROR; /** This abstract implementation gives some general * methods for retrieving and cleaning fitness values. @@ -70,34 +71,42 @@ public abstract class AbstractSelProb implements InterfaceSelectionProbability, tmpList = new ArrayList(); for (int j = 0; j < inputs.length; j++) { obj = tmpIndy.getData(inputs[j]); + if (obj==null) EVAERROR.errorMsgOnce("Error: could not get data by key " + inputs[j] + " from individual in AbstractSelProb"); if (obj instanceof double[]) { for (int m = 0; m < ((double[])obj).length; m++) { tmpList.add(new Double(((double[])obj)[m])); } + continue; } if (obj instanceof Double) { tmpList.add((Double)obj); + continue; } if (obj instanceof float[]) { for (int m = 0; m < ((float[])obj).length; m++) { tmpList.add(new Double(((float[])obj)[m])); } + continue; } if (obj instanceof Float) { tmpList.add((Float)obj); + continue; } if (obj instanceof long[]) { for (int m = 0; m < ((long[])obj).length; m++) { tmpList.add(new Double(((long[])obj)[m])); } + continue; } if (obj instanceof Long) { tmpList.add((Long)obj); + continue; } if (obj instanceof int[]) { for (int m = 0; m < ((int[])obj).length; m++) { tmpList.add(new Double(((int[])obj)[m])); } + continue; } if (obj instanceof Integer) { tmpList.add((Integer)obj); diff --git a/src/eva2/server/modules/Processor.java b/src/eva2/server/modules/Processor.java index 3e950639..073814ca 100644 --- a/src/eva2/server/modules/Processor.java +++ b/src/eva2/server/modules/Processor.java @@ -402,6 +402,7 @@ public class Processor extends Thread implements InterfaceProcessor, InterfacePo resultPop.setPopulationSize(resultPop.size()); } resultPop = PostProcess.postProcess(ppp, resultPop, (AbstractOptimizationProblem)goParams.getProblem(), listener); + resPop = resultPop; return resultPop; } else return null; } diff --git a/src/eva2/tools/Serializer.java b/src/eva2/tools/Serializer.java index 7a42f8cd..57088da8 100644 --- a/src/eva2/tools/Serializer.java +++ b/src/eva2/tools/Serializer.java @@ -35,7 +35,12 @@ public class Serializer { static public void store(Serializable o, File f) throws IOException { FileOutputStream file = new FileOutputStream(f); ObjectOutputStream out = new ObjectOutputStream(file); - out.writeObject(o); + try { + out.writeObject(o); + } catch (java.io.NotSerializableException e) { + System.err.println("Error: Object " + o.getClass() + " is not serializable - run settings cannot be stored."); + e.printStackTrace(); + } out.flush(); out.close(); file.close(); diff --git a/src/wsi/ra/math/Jama/Matrix.java b/src/wsi/ra/math/Jama/Matrix.java index b676955a..8671d440 100644 --- a/src/wsi/ra/math/Jama/Matrix.java +++ b/src/wsi/ra/math/Jama/Matrix.java @@ -11,6 +11,7 @@ import java.util.Locale; import wsi.ra.math.Jama.util.Maths; import eva2.gui.BeanInspector; +import eva2.tools.Mathematics; import eva2.tools.Pair; @@ -232,6 +233,17 @@ public class Matrix implements Cloneable, java.io.Serializable { return A; } + /** + * Produce a matrix with the diagonal entries of the instance. All others are set to zero. + * + * @return a diagonal matrix + */ + public Matrix getDiagonalMatrix() { + double[][] D = new double[m][n]; + for (int i=0; i=m)) throw new IllegalArgumentException("Invalid matrix dimensions for rowMinus!"); + rowSubtract(rowIndex, rowIndex, v); + } + + /** + * Subtract a line from each line of this matrix in place. + * + * @param rowIndex + * @param B + */ + public void rowSubtract(double[] v) { + if ((v.length != n)) throw new IllegalArgumentException("Invalid matrix dimensions for rowMinus!"); + rowSubtract(0, m-1, v); + } + + private void rowSubtract(int start, int end, double[] v) { + for (int i=start; i<=end; i++) Mathematics.vvSub(A[i], v, A[i]); + } + } diff --git a/src/wsi/ra/math/RNG.java b/src/wsi/ra/math/RNG.java index 5296c88c..1af7d74e 100644 --- a/src/wsi/ra/math/RNG.java +++ b/src/wsi/ra/math/RNG.java @@ -1,8 +1,10 @@ package wsi.ra.math; import java.util.ArrayList; +import java.util.Arrays; import java.util.Random; +import eva2.tools.EVAHELP; import eva2.tools.Mathematics; public class RNG extends Random { @@ -165,8 +167,9 @@ public class RNG extends Random { public static double randomDouble(double lo,double hi) { return (hi-lo)*random.nextDouble()+lo; } + /** - * + * Create a uniform random vector within the given bounds. */ public static double[] randomDoubleArray(double[] lo,double[] hi) { double[] xin = new double[lo.length]; @@ -174,14 +177,35 @@ public class RNG extends Random { xin[i] = (hi[i]-lo[i])*random.nextDouble()+lo[i]; return xin; } + /** - * + * Create a uniform random vector within the given bounds. */ - public static double[] randomDoubleArray(double lo,double hi,int size) { - double[] xin = new double[size]; - for (int i=0;i