Merging mk rev 140:141 (preloader thread, InterfaceProblemDouble)
This commit is contained in:
parent
72c83a3c77
commit
93fdeff913
@ -5,7 +5,7 @@ package eva2;
|
||||
*
|
||||
* --- Changelog
|
||||
* 2.029: Tuned the 2d-graphs which now paints quicker and changes size depending on the
|
||||
* surrounding plot window.
|
||||
* surrounding plot window. Added a preloader-thread to accelerate the GUI at starting time.
|
||||
* 2.028: Tuned the Population to sort only when necessary on calls to getBestN... Added StatisticsDummy.
|
||||
* Slightly tuned SimpleProblemWrapper to call initProblem of simple problems if available.
|
||||
* 2.027: Renamed SetData and SetDataLamarckian from individual datatype interfaces to SetGenotype and SetPhenotype.
|
||||
|
34
src/eva2/client/ClassPreloader.java
Normal file
34
src/eva2/client/ClassPreloader.java
Normal file
@ -0,0 +1,34 @@
|
||||
package eva2.client;
|
||||
|
||||
import eva2.gui.GenericObjectEditor;
|
||||
|
||||
/**
|
||||
* This Runnable just requests a number of classes as does the GenericObjectEditor
|
||||
* so that they are loaded into the system cache. It can be done at startup time and
|
||||
* accelerates later reloading.
|
||||
*
|
||||
* @author mkron
|
||||
*
|
||||
*/
|
||||
public class ClassPreloader implements Runnable {
|
||||
String[] clsNames = null;
|
||||
private static boolean TRACE=false;
|
||||
|
||||
public ClassPreloader(String ... strs) {
|
||||
setClassNames(strs);
|
||||
}
|
||||
|
||||
private void setClassNames(String[] strs) {
|
||||
clsNames = strs;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
if (clsNames !=null) {
|
||||
for (int i = 0; i < clsNames.length; i++) {
|
||||
if (TRACE) System.out.println("Preloading " + clsNames[i]);
|
||||
GenericObjectEditor.getClassesFromClassPath(clsNames[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -150,12 +150,16 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
public EvAClient(final String hostName) {
|
||||
final SplashScreen fSplashScreen = new SplashScreen(EvAInfo.splashLocation);
|
||||
|
||||
fSplashScreen.splash();
|
||||
// preload some classes (into system cache) in a parallel thread
|
||||
preloadClasses();
|
||||
|
||||
// activate the splash screen (show later using SwingUtilities)
|
||||
fSplashScreen.splash();
|
||||
|
||||
currentModule = null;
|
||||
|
||||
m_ComAdapter = EvAComAdapter.getInstance();
|
||||
|
||||
|
||||
SwingUtilities.invokeLater( new Runnable() {
|
||||
public void run(){
|
||||
long startTime = System.currentTimeMillis();
|
||||
@ -170,7 +174,12 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private void preloadClasses() {
|
||||
ClassPreloader cp = new ClassPreloader( "eva2.server.go.strategies.InterfaceOptimizer", "eva2.server.go.problems.InterfaceOptimizationProblem", "eva2.server.go.InterfaceTerminator");
|
||||
new Thread(cp).start();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@ -660,16 +669,12 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
private void showLicense() {
|
||||
HtmlDemo temp = new HtmlDemo(EvAInfo.licenseFile);
|
||||
temp.show();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void showNoHostFoundDialog() {
|
||||
JOptionPane.showMessageDialog(m_Frame.getContentPane(), "No host with running EVASERVER found. Please start one or \nadd the correct address to the properties list.", EvAInfo.infoTitle, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void selectAvailableHostToKill(String[] HostNames) {
|
||||
if (TRACE) System.out.println("SelectAvailableHostToKill");
|
||||
if (HostNames == null || HostNames.length == 0) {
|
||||
@ -686,9 +691,6 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
// m_LogPanel.statusMessage("");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void selectAllAvailableHostToKill(String[] HostNames) {
|
||||
System.out.println("SelectAllAvailableHostToKill");
|
||||
if (HostNames == null || HostNames.length == 0) {
|
||||
@ -730,12 +732,6 @@ public class EvAClient implements RemoteStateListener, Serializable {
|
||||
SwingUtilities.invokeLater(doSetProgressBarValue);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// public void test(Object o) {
|
||||
// System.out.println("hello from EvAClient.test!");
|
||||
// System.out.println("object gives " + o);
|
||||
// }
|
||||
}
|
||||
|
||||
final class SplashScreen extends Frame {
|
||||
|
@ -504,6 +504,16 @@ public class GenericObjectEditor implements PropertyEditor {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the names of all classes in the same package that are assignable
|
||||
* from the named class, and that can be loaded through the classpath.
|
||||
* If a class has a declared field called "hideFromGOE" this method will skip it.
|
||||
* Abstract classes and interfaces will be skipped as well.
|
||||
*
|
||||
* @see ReflectPackage.getAssignableClassesInPackage
|
||||
* @param className
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<String> getClassesFromClassPath(String className) {
|
||||
ArrayList<String> classes = new ArrayList<String>();
|
||||
int dotIndex = className.lastIndexOf('.');
|
||||
@ -519,7 +529,7 @@ public class GenericObjectEditor implements PropertyEditor {
|
||||
clsArr = null;
|
||||
}
|
||||
if (clsArr == null) {
|
||||
System.out.println("Warning: No configuration property found in: "
|
||||
System.err.println("Warning: No configuration property found in: "
|
||||
+EvAInfo.propertyFile + " "+"for "+className);
|
||||
classes.add(className);
|
||||
} else {
|
||||
|
@ -8,7 +8,7 @@ import eva2.server.go.strategies.InterfaceOptimizer;
|
||||
import wsi.ra.math.RNG;
|
||||
import eva2.server.go.problems.Interface2DBorderProblem;
|
||||
|
||||
public abstract class AbstractProblemDouble extends AbstractOptimizationProblem implements Interface2DBorderProblem {
|
||||
public abstract class AbstractProblemDouble extends AbstractOptimizationProblem implements InterfaceProblemDouble, Interface2DBorderProblem {
|
||||
private double m_DefaultRange = 10;
|
||||
private double m_Noise = 0;
|
||||
|
||||
@ -107,7 +107,7 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem
|
||||
*
|
||||
* @return a range array
|
||||
*/
|
||||
protected double[][] makeRange() {
|
||||
public double[][] makeRange() {
|
||||
double[][] range = new double[this.getProblemDimension()][2];
|
||||
for (int i = 0; i < range.length; i++) {
|
||||
range[i][0] = getRangeLowerBound(i);
|
||||
@ -126,7 +126,7 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem
|
||||
* @return the lower bound of the double range in the given dimension
|
||||
*/
|
||||
protected double getRangeLowerBound(int dim) {
|
||||
return -m_DefaultRange;
|
||||
return -getDefaultRange();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -139,7 +139,7 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem
|
||||
* @return the upper bound of the double range in the given dimension
|
||||
*/
|
||||
protected double getRangeUpperBound(int dim) {
|
||||
return m_DefaultRange;
|
||||
return getDefaultRange();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -194,7 +194,7 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem
|
||||
*
|
||||
* @return value of the absolute range limit
|
||||
*/
|
||||
public double getDefaultRange() {
|
||||
protected double getDefaultRange() {
|
||||
return m_DefaultRange;
|
||||
}
|
||||
/**
|
||||
|
@ -25,7 +25,7 @@ public class F13Problem extends F1Problem implements InterfaceMultimodalProblem
|
||||
return (Object) new F13Problem(this);
|
||||
}
|
||||
|
||||
protected double[][] makeRange() {
|
||||
public double[][] makeRange() {
|
||||
double[][] range = new double[this.m_ProblemDimension][2];
|
||||
for (int i = 0; i < range.length; i++) {
|
||||
range[i][0] = -512.03;
|
||||
|
31
src/eva2/server/go/problems/InterfaceProblemDouble.java
Normal file
31
src/eva2/server/go/problems/InterfaceProblemDouble.java
Normal file
@ -0,0 +1,31 @@
|
||||
package eva2.server.go.problems;
|
||||
|
||||
/**
|
||||
* A minimal interface for double valued problems.
|
||||
*
|
||||
* @author mkron
|
||||
*
|
||||
*/
|
||||
public interface InterfaceProblemDouble {
|
||||
/**
|
||||
* Evaluate a double vector, representing the target function.
|
||||
*
|
||||
* @param x the vector to evaluate
|
||||
* @return the target function value
|
||||
*/
|
||||
public double[] eval(double[] x);
|
||||
|
||||
/**
|
||||
* Get the problem dimension.
|
||||
*
|
||||
* @return the problem dimension
|
||||
*/
|
||||
public int getProblemDimension();
|
||||
|
||||
/**
|
||||
* Create a new range array by using the getRangeLowerBound and getRangeUpperBound methods.
|
||||
*
|
||||
* @return a range array
|
||||
*/
|
||||
public double[][] makeRange();
|
||||
}
|
@ -156,11 +156,11 @@ public class MatlabProblem extends AbstractProblemDouble implements InterfaceTex
|
||||
return problemDimension;
|
||||
}
|
||||
|
||||
public String problemDimensionTipTex() {
|
||||
public String problemDimensionTipText() {
|
||||
return "The dimension of the problem.";
|
||||
}
|
||||
|
||||
protected double[][] makeRange() {
|
||||
public double[][] makeRange() {
|
||||
if (range==null) range=super.makeRange();
|
||||
return range;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user