Merging mk branch rev 199, new Population event for initialization (introducing final Strings for the event names), renaming Indy.SetData to putData, replacing static rank-mu-CMA parameters by a population-associated structure; oh and the "Description" button has made room for a "Show Solution" button.
This commit is contained in:
		@@ -21,9 +21,16 @@ import java.awt.event.ActionEvent;
 | 
			
		||||
import java.awt.event.ActionListener;
 | 
			
		||||
import javax.swing.JButton;
 | 
			
		||||
import javax.swing.JComponent;
 | 
			
		||||
import javax.swing.JFrame;
 | 
			
		||||
import javax.swing.JOptionPane;
 | 
			
		||||
import javax.swing.JPanel;
 | 
			
		||||
 | 
			
		||||
import eva2.server.go.InterfaceGOParameters;
 | 
			
		||||
import eva2.server.go.individuals.AbstractEAIndividual;
 | 
			
		||||
import eva2.server.go.problems.AbstractOptimizationProblem;
 | 
			
		||||
import eva2.server.go.problems.InterfaceOptimizationProblem;
 | 
			
		||||
import eva2.server.go.strategies.InterfaceOptimizer;
 | 
			
		||||
import eva2.server.modules.AbstractModuleAdapter;
 | 
			
		||||
import eva2.server.modules.ModuleAdapter;
 | 
			
		||||
 | 
			
		||||
import wsi.ra.jproxy.RMIProxyLocal;
 | 
			
		||||
@@ -44,6 +51,7 @@ public class JModuleGeneralPanel implements RemoteStateListener, Serializable  {
 | 
			
		||||
	private JButton m_actStop;
 | 
			
		||||
//	private JButton m_actExitMod;
 | 
			
		||||
	private JButton m_JHelpButton;
 | 
			
		||||
	private JButton m_ShowSolButton;
 | 
			
		||||
	private JPanel m_Panel;
 | 
			
		||||
	private String m_HelperFileName;
 | 
			
		||||
 | 
			
		||||
@@ -90,10 +98,10 @@ public class JModuleGeneralPanel implements RemoteStateListener, Serializable  {
 | 
			
		||||
					m_RunButton.setEnabled(false);
 | 
			
		||||
					m_PPButton.setEnabled(false);
 | 
			
		||||
//					m_RestartButton.setEnabled(false);
 | 
			
		||||
					m_JHelpButton.setEnabled(true);
 | 
			
		||||
//					m_JHelpButton.setEnabled(true);
 | 
			
		||||
				} catch (Exception ee) {
 | 
			
		||||
					ee.printStackTrace();
 | 
			
		||||
					System.out.print ("Error in run: " +ee +" : " + ee.getMessage() );
 | 
			
		||||
					System.err.print ("Error in run: " +ee +" : " + ee.getMessage() );
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -111,7 +119,7 @@ public class JModuleGeneralPanel implements RemoteStateListener, Serializable  {
 | 
			
		||||
			public void actionPerformed(ActionEvent e){
 | 
			
		||||
				try {
 | 
			
		||||
					m_Adapter.stopOpt();	// this means user break
 | 
			
		||||
				} catch (Exception ee) { System.out.print ("Error in stop: " + ee.getMessage() ); }
 | 
			
		||||
				} catch (Exception ee) { System.err.print ("Error in stop: " + ee.getMessage() ); }
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		);
 | 
			
		||||
@@ -132,7 +140,7 @@ public class JModuleGeneralPanel implements RemoteStateListener, Serializable  {
 | 
			
		||||
//					m_RunButton.setEnabled(false);
 | 
			
		||||
				} catch (Exception ee) {
 | 
			
		||||
					ee.printStackTrace();
 | 
			
		||||
					System.out.println("Error in run: " +ee +" : " + ee.getMessage() );
 | 
			
		||||
					System.err.println("Error in run: " +ee +" : " + ee.getMessage() );
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -140,8 +148,43 @@ public class JModuleGeneralPanel implements RemoteStateListener, Serializable  {
 | 
			
		||||
		m_PPButton.setEnabled(m_StateRunning && m_Adapter.hasPostProcessing());
 | 
			
		||||
		m_Panel.add(m_PPButton);
 | 
			
		||||
		
 | 
			
		||||
		makeHelpButton();
 | 
			
		||||
		
 | 
			
		||||
		if (m_Adapter instanceof AbstractModuleAdapter && (m_Adapter != null)) {
 | 
			
		||||
		    /** This action listener, called by the "show" button will show the
 | 
			
		||||
		     * currently best solution in a frame.
 | 
			
		||||
		     */
 | 
			
		||||
			m_ShowSolButton = new JButton("Show Solution");
 | 
			
		||||
			m_ShowSolButton.addActionListener(new ActionListener() {
 | 
			
		||||
		        public void actionPerformed(ActionEvent event) {
 | 
			
		||||
					InterfaceGOParameters goParams = ((AbstractModuleAdapter)m_Adapter).getGOParameters();
 | 
			
		||||
					InterfaceOptimizationProblem goProblem = goParams.getProblem();
 | 
			
		||||
					InterfaceOptimizer opt = goParams.getOptimizer();
 | 
			
		||||
					AbstractEAIndividual indy = opt.getPopulation().getBestEAIndividual();
 | 
			
		||||
					if (indy != null) {
 | 
			
		||||
			            JFrame frame = new JFrame();
 | 
			
		||||
			            frame.setTitle("The current best solution for "+goProblem.getName());
 | 
			
		||||
			            frame.setSize(400, 300);
 | 
			
		||||
			            frame.setLocation(450, 250);
 | 
			
		||||
			            frame.getContentPane().add(goProblem.drawIndividual(indy));
 | 
			
		||||
			            frame.validate();
 | 
			
		||||
			            frame.setVisible(true);
 | 
			
		||||
					} else System.out.println("No current solution available.");
 | 
			
		||||
		        }
 | 
			
		||||
			}
 | 
			
		||||
					);
 | 
			
		||||
			m_ShowSolButton.setEnabled(false);
 | 
			
		||||
			m_Panel.add(m_ShowSolButton);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
//		m_actExitMod = new JButton("Exit Module");
 | 
			
		||||
//		m_actExitMod.setToolTipText("todo !!.");// TODO
 | 
			
		||||
		return m_Panel;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	private void makeHelpButton() {
 | 
			
		||||
		///////////////////////////////////////////////////////////////
 | 
			
		||||
		if (m_HelperFileName.equals("")== false) {
 | 
			
		||||
		if (m_HelperFileName!=null && (!m_HelperFileName.equals(""))) {
 | 
			
		||||
			m_JHelpButton= new JButton("Description");
 | 
			
		||||
			m_JHelpButton.setToolTipText("Description of the current optimization algorithm.");
 | 
			
		||||
			m_JHelpButton.addActionListener(new ActionListener() {
 | 
			
		||||
@@ -162,11 +205,8 @@ public class JModuleGeneralPanel implements RemoteStateListener, Serializable  {
 | 
			
		||||
			);
 | 
			
		||||
			m_Panel.add(m_JHelpButton);
 | 
			
		||||
		}
 | 
			
		||||
//		m_actExitMod = new JButton("Exit Module");
 | 
			
		||||
//		m_actExitMod.setToolTipText("todo !!.");// TODO
 | 
			
		||||
		return m_Panel;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
	/**
 | 
			
		||||
	 *
 | 
			
		||||
	 */
 | 
			
		||||
@@ -180,6 +220,7 @@ public class JModuleGeneralPanel implements RemoteStateListener, Serializable  {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void performedStart(String infoString) {
 | 
			
		||||
		m_ShowSolButton.setEnabled(true);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -199,7 +240,22 @@ public class JModuleGeneralPanel implements RemoteStateListener, Serializable  {
 | 
			
		||||
	 *
 | 
			
		||||
	 */
 | 
			
		||||
	public void setHelperFilename (String s) {
 | 
			
		||||
		m_HelperFileName = s;
 | 
			
		||||
		if ((s==null) && (s==m_HelperFileName)) return; // both are null, do nothing
 | 
			
		||||
		if (s!=null) {
 | 
			
		||||
			if (m_HelperFileName != null) {
 | 
			
		||||
				if (!m_HelperFileName.equals(s)) {
 | 
			
		||||
					m_Panel.remove(m_JHelpButton);
 | 
			
		||||
					m_HelperFileName = s;
 | 
			
		||||
					makeHelpButton();					
 | 
			
		||||
				} //else // both are equal, do nothing
 | 
			
		||||
			} else { // only old is null, nothing to be removed
 | 
			
		||||
				m_HelperFileName = s;
 | 
			
		||||
				makeHelpButton();
 | 
			
		||||
			}
 | 
			
		||||
		} else { // s is null, so just remove
 | 
			
		||||
			m_Panel.remove(m_JHelpButton);
 | 
			
		||||
			m_HelperFileName=s;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -555,41 +555,43 @@ public class GOStandaloneVersion implements InterfaceGOStandalone, InterfacePopu
 | 
			
		||||
     * @param name          Could be used to indicate the nature of the event.
 | 
			
		||||
     */
 | 
			
		||||
    public void registerPopulationStateChanged(Object source, String name) {
 | 
			
		||||
        Population population = ((InterfaceOptimizer)source).getPopulation();
 | 
			
		||||
        double x = 100/this.m_MultiRuns;
 | 
			
		||||
        if (this.m_GO.getTerminator() instanceof EvaluationTerminator) {
 | 
			
		||||
            double y = x/(double)((EvaluationTerminator)this.m_GO.getTerminator()).getFitnessCalls();
 | 
			
		||||
            currentProgress = (int)(this.currentRun * x + population.getFunctionCalls()*y);
 | 
			
		||||
        } else {
 | 
			
		||||
            currentProgress = (int)(this.currentRun * x);
 | 
			
		||||
        }
 | 
			
		||||
        updateStatus(currentProgress);
 | 
			
		||||
    	if (name.equals(Population.nextGenerationPerformed)) {
 | 
			
		||||
    		Population population = ((InterfaceOptimizer)source).getPopulation();
 | 
			
		||||
    		double x = 100/this.m_MultiRuns;
 | 
			
		||||
    		if (this.m_GO.getTerminator() instanceof EvaluationTerminator) {
 | 
			
		||||
    			double y = x/(double)((EvaluationTerminator)this.m_GO.getTerminator()).getFitnessCalls();
 | 
			
		||||
    			currentProgress = (int)(this.currentRun * x + population.getFunctionCalls()*y);
 | 
			
		||||
    		} else {
 | 
			
		||||
    			currentProgress = (int)(this.currentRun * x);
 | 
			
		||||
    		}
 | 
			
		||||
    		updateStatus(currentProgress);
 | 
			
		||||
 | 
			
		||||
        // data to be stored in file
 | 
			
		||||
        double tmpd = 0;
 | 
			
		||||
        StringBuffer  tmpLine = new StringBuffer("");
 | 
			
		||||
        tmpLine.append(population.getFunctionCalls());
 | 
			
		||||
        tmpLine.append("\t");
 | 
			
		||||
        tmpLine.append(population.getBestEAIndividual().getFitness(0));
 | 
			
		||||
        tmpLine.append("\t");
 | 
			
		||||
        for (int i = 0; i < population.size(); i++) tmpd += ((AbstractEAIndividual)population.get(i)).getFitness(0)/(double)population.size();
 | 
			
		||||
        tmpLine.append("\t");
 | 
			
		||||
        tmpLine.append(tmpd);
 | 
			
		||||
        tmpLine.append("\t");
 | 
			
		||||
        tmpLine.append(population.getWorstEAIndividual().getFitness(0));
 | 
			
		||||
        //tmpLine.append("\t");
 | 
			
		||||
        //tmpLine.append(this.m_GO.getProblem().getAdditionalFileStringValue(population));
 | 
			
		||||
        this.writeToFile(tmpLine.toString());
 | 
			
		||||
    		// data to be stored in file
 | 
			
		||||
    		double tmpd = 0;
 | 
			
		||||
    		StringBuffer  tmpLine = new StringBuffer("");
 | 
			
		||||
    		tmpLine.append(population.getFunctionCalls());
 | 
			
		||||
    		tmpLine.append("\t");
 | 
			
		||||
    		tmpLine.append(population.getBestEAIndividual().getFitness(0));
 | 
			
		||||
    		tmpLine.append("\t");
 | 
			
		||||
    		for (int i = 0; i < population.size(); i++) tmpd += ((AbstractEAIndividual)population.get(i)).getFitness(0)/(double)population.size();
 | 
			
		||||
    		tmpLine.append("\t");
 | 
			
		||||
    		tmpLine.append(tmpd);
 | 
			
		||||
    		tmpLine.append("\t");
 | 
			
		||||
    		tmpLine.append(population.getWorstEAIndividual().getFitness(0));
 | 
			
		||||
    		//tmpLine.append("\t");
 | 
			
		||||
    		//tmpLine.append(this.m_GO.getProblem().getAdditionalFileStringValue(population));
 | 
			
		||||
    		this.writeToFile(tmpLine.toString());
 | 
			
		||||
 | 
			
		||||
        Double[] tmpData = new Double[2];
 | 
			
		||||
        tmpData[0] = new Double(population.getFunctionCalls());
 | 
			
		||||
        // instead of adding simply the best fitness value i'll ask the problem what to show
 | 
			
		||||
        tmpData[1] = this.m_GO.getProblem().getDoublePlotValue(population);
 | 
			
		||||
        if (this.m_Plot != null) {
 | 
			
		||||
            if (this.m_ContinueFlag) this.m_Plot.setConnectedPoint(tmpData[0].doubleValue()+this.m_RecentFC, tmpData[1].doubleValue(), 1000+this.currentRun);
 | 
			
		||||
            else this.m_Plot.setConnectedPoint(tmpData[0].doubleValue(), tmpData[1].doubleValue(), 1000+this.currentRun);
 | 
			
		||||
        }
 | 
			
		||||
        this.m_TmpData.add(tmpData);
 | 
			
		||||
    		Double[] tmpData = new Double[2];
 | 
			
		||||
    		tmpData[0] = new Double(population.getFunctionCalls());
 | 
			
		||||
    		// instead of adding simply the best fitness value i'll ask the problem what to show
 | 
			
		||||
    		tmpData[1] = this.m_GO.getProblem().getDoublePlotValue(population);
 | 
			
		||||
    		if (this.m_Plot != null) {
 | 
			
		||||
    			if (this.m_ContinueFlag) this.m_Plot.setConnectedPoint(tmpData[0].doubleValue()+this.m_RecentFC, tmpData[1].doubleValue(), 1000+this.currentRun);
 | 
			
		||||
    			else this.m_Plot.setConnectedPoint(tmpData[0].doubleValue(), tmpData[1].doubleValue(), 1000+this.currentRun);
 | 
			
		||||
    		}
 | 
			
		||||
    		this.m_TmpData.add(tmpData);
 | 
			
		||||
    	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method writes Data to file.
 | 
			
		||||
 
 | 
			
		||||
@@ -498,19 +498,21 @@ public class MOCCOStandalone implements InterfaceGOStandalone, InterfacePopulati
 | 
			
		||||
     * @param name          Could be used to indicate the nature of the event.
 | 
			
		||||
     */
 | 
			
		||||
    public void registerPopulationStateChanged(Object source, String name) {
 | 
			
		||||
        int currentProgress;
 | 
			
		||||
        if (this.m_State.isVisible) {
 | 
			
		||||
            Population population = ((InterfaceOptimizer)source).getPopulation();
 | 
			
		||||
            double x = 100;
 | 
			
		||||
            if (this.m_State.m_Terminator instanceof EvaluationTerminator) {
 | 
			
		||||
                double y = x/(double)((EvaluationTerminator)this.m_State.m_Terminator).getFitnessCalls();
 | 
			
		||||
                currentProgress = (int)(population.getFunctionCalls()*y);
 | 
			
		||||
            } else {
 | 
			
		||||
                currentProgress = (int)(0);
 | 
			
		||||
            }
 | 
			
		||||
            updateStatus("Optimizing...",currentProgress);
 | 
			
		||||
        } else {
 | 
			
		||||
            // perhaps i could write it to file!?
 | 
			
		||||
        }
 | 
			
		||||
    	int currentProgress;
 | 
			
		||||
    	if (name.equals(Population.nextGenerationPerformed)) {
 | 
			
		||||
    		if (this.m_State.isVisible) {
 | 
			
		||||
    			Population population = ((InterfaceOptimizer)source).getPopulation();
 | 
			
		||||
    			double x = 100;
 | 
			
		||||
    			if (this.m_State.m_Terminator instanceof EvaluationTerminator) {
 | 
			
		||||
    				double y = x/(double)((EvaluationTerminator)this.m_State.m_Terminator).getFitnessCalls();
 | 
			
		||||
    				currentProgress = (int)(population.getFunctionCalls()*y);
 | 
			
		||||
    			} else {
 | 
			
		||||
    				currentProgress = (int)(0);
 | 
			
		||||
    			}
 | 
			
		||||
    			updateStatus("Optimizing...",currentProgress);
 | 
			
		||||
    		} else {
 | 
			
		||||
    			// perhaps i could write it to file!?
 | 
			
		||||
    		}
 | 
			
		||||
    	}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -749,7 +749,7 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java.
 | 
			
		||||
     * @param name      The identifying name.
 | 
			
		||||
     * @param obj       The object that is to be stored.
 | 
			
		||||
     */
 | 
			
		||||
    public void SetData(String name, Object obj) {
 | 
			
		||||
    public void putData(String name, Object obj) {
 | 
			
		||||
   		m_dataHash.put(name, obj);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -118,7 +118,7 @@ public class ArchivingNSGAII extends ArchivingNSGA implements java.io.Serializab
 | 
			
		||||
            tmpNonDom   = new Population();
 | 
			
		||||
            for (int i = 0; i < tmpPop.size(); i++) {
 | 
			
		||||
                if (this.isDominant((AbstractEAIndividual) tmpPop.get(i), tmpPop)) {
 | 
			
		||||
                    ((AbstractEAIndividual)tmpPop.get(i)).SetData("ParetoLevel", new Integer(level));
 | 
			
		||||
                    ((AbstractEAIndividual)tmpPop.get(i)).putData("ParetoLevel", new Integer(level));
 | 
			
		||||
                    tmpDom.add(tmpPop.get(i));
 | 
			
		||||
 | 
			
		||||
                } else {
 | 
			
		||||
@@ -130,7 +130,7 @@ public class ArchivingNSGAII extends ArchivingNSGA implements java.io.Serializab
 | 
			
		||||
                System.out.println("Problem NSGA II at level " + level + ".");
 | 
			
		||||
                tmpDom.addPopulation(tmpNonDom);
 | 
			
		||||
                for (int i = 0; i < tmpDom.size(); i++)
 | 
			
		||||
                    ((AbstractEAIndividual)tmpDom.get(i)).SetData("ParetoLevel", new Integer(level));
 | 
			
		||||
                    ((AbstractEAIndividual)tmpDom.get(i)).putData("ParetoLevel", new Integer(level));
 | 
			
		||||
                tmpPop.clear();
 | 
			
		||||
//                System.out.println(""+tmpPop.getStringRepresentation());
 | 
			
		||||
//                tmpPop.removeDoubleInstancesUsingFitness();
 | 
			
		||||
@@ -158,7 +158,7 @@ public class ArchivingNSGAII extends ArchivingNSGA implements java.io.Serializab
 | 
			
		||||
            }
 | 
			
		||||
            hyperCube = heidi.calculateHyperCubeVolumes(fitness);
 | 
			
		||||
            for (int j = 0; j < fronts[i].size(); j++) {
 | 
			
		||||
                ((AbstractEAIndividual)fronts[i].get(j)).SetData("HyperCube", new Double(hyperCube[j]));
 | 
			
		||||
                ((AbstractEAIndividual)fronts[i].get(j)).putData("HyperCube", new Double(hyperCube[j]));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -249,8 +249,8 @@ public class ArchivingPESAII extends AbstractArchiving implements java.io.Serial
 | 
			
		||||
                for (int j = 0; j < coll.size(); j++) {
 | 
			
		||||
                    result[((Integer)coll.get(j)).intValue()] = coll.size();
 | 
			
		||||
                    tmpIndy = (AbstractEAIndividual)pop.get(((Integer)coll.get(j)).intValue());
 | 
			
		||||
                    tmpIndy.SetData("SqueezeFactor", new Integer(coll.size()));
 | 
			
		||||
                    tmpIndy.SetData("GridBox", curGrid);
 | 
			
		||||
                    tmpIndy.putData("SqueezeFactor", new Integer(coll.size()));
 | 
			
		||||
                    tmpIndy.putData("GridBox", curGrid);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -512,8 +512,8 @@ public class ArchivingSPEAII extends AbstractArchiving implements java.io.Serial
 | 
			
		||||
        for (int i = 0; i < SPEAResult.length; i++) {
 | 
			
		||||
            if (1/(2+D[i]) >= 1) System.out.println("d " +1/(2+D[i]));
 | 
			
		||||
            SPEAResult[i] = SPEAFitness[i] + (1/(2+D[i]));
 | 
			
		||||
            ((AbstractEAIndividual)pop.get(i)).SetData("RawFit", new Double(SPEAFitness[i]));
 | 
			
		||||
            ((AbstractEAIndividual)pop.get(i)).SetData("SPEAFit", new Double(SPEAResult[i]));
 | 
			
		||||
            ((AbstractEAIndividual)pop.get(i)).putData("RawFit", new Double(SPEAFitness[i]));
 | 
			
		||||
            ((AbstractEAIndividual)pop.get(i)).putData("SPEAFit", new Double(SPEAResult[i]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (this.m_Debug && this.m_Plot != null) {
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ public class RemoveSurplusIndividualsStaticHyperCube extends RemoveSurplusIndivi
 | 
			
		||||
        }
 | 
			
		||||
        space = this.calculateHyperCubeVolumes(fitness);
 | 
			
		||||
        for (int i = 0; i < archive.size(); i++) {
 | 
			
		||||
            ((AbstractEAIndividual)archive.get(i)).SetData("HyperCube", new Double(space[i]));
 | 
			
		||||
            ((AbstractEAIndividual)archive.get(i)).putData("HyperCube", new Double(space[i]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        while(archive.size() > archive.getPopulationSize()) {
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,7 @@ public class MOSODynamicallyWeightedFitness implements InterfaceMOSOConverter, j
 | 
			
		||||
        double[]    weights;
 | 
			
		||||
 | 
			
		||||
        tmpFit = indy.getFitness();
 | 
			
		||||
        indy.SetData("MOFitness", tmpFit);
 | 
			
		||||
        indy.putData("MOFitness", tmpFit);
 | 
			
		||||
        weights = new double[tmpFit.length];
 | 
			
		||||
 | 
			
		||||
        // calculate the dynamic weights
 | 
			
		||||
 
 | 
			
		||||
@@ -53,7 +53,7 @@ public class MOSOEpsilonConstraint implements InterfaceMOSOConverter, java.io.Se
 | 
			
		||||
        double[]    tmpFit;
 | 
			
		||||
 | 
			
		||||
        tmpFit = indy.getFitness();
 | 
			
		||||
        indy.SetData("MOFitness", tmpFit);
 | 
			
		||||
        indy.putData("MOFitness", tmpFit);
 | 
			
		||||
        resultFit[0] = tmpFit[this.m_EpsilonConstraint.m_OptimizeObjective];
 | 
			
		||||
        for (int i = 0; i < this.m_EpsilonConstraint.m_TargetValue.length; i++) {
 | 
			
		||||
            if (i != this.m_EpsilonConstraint.m_OptimizeObjective) {
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ public class MOSOEpsilonThreshold implements InterfaceMOSOConverter, java.io.Ser
 | 
			
		||||
        double[]    tmpFit;
 | 
			
		||||
 | 
			
		||||
        tmpFit = indy.getFitness();
 | 
			
		||||
        indy.SetData("MOFitness", tmpFit);
 | 
			
		||||
        indy.putData("MOFitness", tmpFit);
 | 
			
		||||
        for (int i = 0; i < tmpFit.length; i++) {
 | 
			
		||||
            if (new Double(tmpFit[i]).isNaN()) System.out.println("Fitness is NaN");
 | 
			
		||||
            if (new Double(tmpFit[i]).isInfinite()) System.out.println("Fitness is Infinite");
 | 
			
		||||
 
 | 
			
		||||
@@ -50,7 +50,7 @@ public class MOSOGoalProgramming implements InterfaceMOSOConverter, java.io.Seri
 | 
			
		||||
        double[]    tmpFit;
 | 
			
		||||
 | 
			
		||||
        tmpFit = indy.getFitness();
 | 
			
		||||
        indy.SetData("MOFitness", tmpFit);
 | 
			
		||||
        indy.putData("MOFitness", tmpFit);
 | 
			
		||||
        resultFit[0] = 0;
 | 
			
		||||
        for (int i = 0; (i < this.m_Goals.m_DoubleArray.length) && (i < tmpFit.length) ; i++)
 | 
			
		||||
            resultFit[0] += tmpFit[i]-this.m_Goals.m_DoubleArray[i];
 | 
			
		||||
 
 | 
			
		||||
@@ -52,7 +52,7 @@ public class MOSOLpMetric implements InterfaceMOSOConverter, java.io.Serializabl
 | 
			
		||||
        double[]    tmpFit;
 | 
			
		||||
 | 
			
		||||
        tmpFit = indy.getFitness();
 | 
			
		||||
        indy.SetData("MOFitness", tmpFit);
 | 
			
		||||
        indy.putData("MOFitness", tmpFit);
 | 
			
		||||
        if (m_P >= 1) {
 | 
			
		||||
            // standard Lp Metric
 | 
			
		||||
            resultFit[0] = 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ public class MOSOMOGARankBased implements InterfaceMOSOConverter, java.io.Serial
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        for (int i = 0; i < pop.size(); i++) {
 | 
			
		||||
            ((AbstractEAIndividual)pop.get(i)).SetData("MOGARank", new Integer(MOGARank[i]));
 | 
			
		||||
            ((AbstractEAIndividual)pop.get(i)).putData("MOGARank", new Integer(MOGARank[i]));
 | 
			
		||||
        }
 | 
			
		||||
        for (int i = 0; i < pop.size(); i++) {
 | 
			
		||||
             this.convertSingleIndividual((AbstractEAIndividual)pop.get(i));
 | 
			
		||||
@@ -56,7 +56,7 @@ public class MOSOMOGARankBased implements InterfaceMOSOConverter, java.io.Serial
 | 
			
		||||
        double[]    tmpFit;
 | 
			
		||||
 | 
			
		||||
        tmpFit = indy.getFitness();
 | 
			
		||||
        indy.SetData("MOFitness", tmpFit);
 | 
			
		||||
        indy.putData("MOFitness", tmpFit);
 | 
			
		||||
        resultFit[0] = ((Integer)indy.getData("MOGARank")).doubleValue();
 | 
			
		||||
        indy.SetFitness(resultFit);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@ public class MOSOMaxiMin implements InterfaceMOSOConverter, java.io.Serializable
 | 
			
		||||
            // write the result to the individuals
 | 
			
		||||
            tmpIndy     = (AbstractEAIndividual) pop.get(i);
 | 
			
		||||
            tmpFit      = tmpIndy.getFitness();
 | 
			
		||||
            tmpIndy.SetData("MOFitness", tmpFit);
 | 
			
		||||
            tmpIndy.putData("MOFitness", tmpFit);
 | 
			
		||||
            resultFit   = new double[1];
 | 
			
		||||
            resultFit[0] = result[i];
 | 
			
		||||
            tmpIndy.SetFitness(resultFit);
 | 
			
		||||
@@ -107,7 +107,7 @@ public class MOSOMaxiMin implements InterfaceMOSOConverter, java.io.Serializable
 | 
			
		||||
        double[]    tmpFit;
 | 
			
		||||
 | 
			
		||||
        tmpFit          = indy.getFitness();
 | 
			
		||||
        indy.SetData("MOFitness", tmpFit);
 | 
			
		||||
        indy.putData("MOFitness", tmpFit);
 | 
			
		||||
        System.out.println("The MaxiMin MOSO can not be applied to single individuals! I default to random criterion.");
 | 
			
		||||
        resultFit[0]    = tmpFit[RNG.randomInt(0, tmpFit.length)];
 | 
			
		||||
        indy.SetFitness(resultFit);
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ public class MOSONoConvert implements InterfaceMOSOConverter, java.io.Serializab
 | 
			
		||||
        double[]    tmpFit;
 | 
			
		||||
 | 
			
		||||
        tmpFit          = indy.getFitness();
 | 
			
		||||
        indy.SetData("MOFitness", tmpFit);
 | 
			
		||||
        indy.putData("MOFitness", tmpFit);
 | 
			
		||||
//        resultFit[0]    = tmpFit[RNG.randomInt(0, tmpFit.length)];
 | 
			
		||||
//        indy.SetFitness(resultFit);
 | 
			
		||||
    }    
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ public class MOSORandomChoice  implements InterfaceMOSOConverter, java.io.Serial
 | 
			
		||||
        double[]    tmpFit;
 | 
			
		||||
 | 
			
		||||
        tmpFit          = indy.getFitness();
 | 
			
		||||
        indy.SetData("MOFitness", tmpFit);
 | 
			
		||||
        indy.putData("MOFitness", tmpFit);
 | 
			
		||||
        resultFit[0]    = tmpFit[RNG.randomInt(0, tmpFit.length-1)];
 | 
			
		||||
        indy.SetFitness(resultFit);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ public class MOSORandomWeight implements InterfaceMOSOConverter, java.io.Seriali
 | 
			
		||||
        double      sum = 0;
 | 
			
		||||
 | 
			
		||||
        tmpFit = indy.getFitness();
 | 
			
		||||
        indy.SetData("MOFitness", tmpFit);
 | 
			
		||||
        indy.putData("MOFitness", tmpFit);
 | 
			
		||||
        tmpWeight = new double[tmpFit.length];
 | 
			
		||||
        for (int i = 0; i < tmpWeight.length; i++) {
 | 
			
		||||
            tmpWeight[i] = RNG.randomDouble(0,1);
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ public class MOSORankbased implements InterfaceMOSOConverter, java.io.Serializab
 | 
			
		||||
        double[]    tmpFit;
 | 
			
		||||
 | 
			
		||||
        tmpFit = indy.getFitness();
 | 
			
		||||
        indy.SetData("MOFitness", tmpFit);
 | 
			
		||||
        indy.putData("MOFitness", tmpFit);
 | 
			
		||||
        resultFit[0] = ((Integer)indy.getData("ParetoLevel")).doubleValue();
 | 
			
		||||
        indy.SetFitness(resultFit);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -46,7 +46,7 @@ public class MOSOUtilityFunction implements InterfaceMOSOConverter, java.io.Seri
 | 
			
		||||
        double[]    tmpFit;
 | 
			
		||||
 | 
			
		||||
        tmpFit = indy.getFitness();
 | 
			
		||||
        indy.SetData("MOFitness", tmpFit);
 | 
			
		||||
        indy.putData("MOFitness", tmpFit);
 | 
			
		||||
        resultFit[0] = 0;
 | 
			
		||||
 | 
			
		||||
        /**********************************************************************************************
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,7 @@ public class MOSOWeightedFitness implements InterfaceMOSOConverter, java.io.Seri
 | 
			
		||||
        double[]    tmpFit;
 | 
			
		||||
 | 
			
		||||
        tmpFit = indy.getFitness();
 | 
			
		||||
        indy.SetData("MOFitness", tmpFit);
 | 
			
		||||
        indy.putData("MOFitness", tmpFit);
 | 
			
		||||
        for (int i = 0; (i < this.m_Weights.m_DoubleArray.length) && (i < tmpFit.length) ; i++)
 | 
			
		||||
            resultFit[0] += tmpFit[i]*this.m_Weights.m_DoubleArray[i];
 | 
			
		||||
        indy.SetFitness(resultFit);
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,7 @@ public class MOSOWeightedLPTchebycheff implements InterfaceMOSOConverter, java.i
 | 
			
		||||
        double[]    tmpFit;
 | 
			
		||||
 | 
			
		||||
        tmpFit = indy.getFitness();
 | 
			
		||||
        indy.SetData("MOFitness", tmpFit);
 | 
			
		||||
        indy.putData("MOFitness", tmpFit);
 | 
			
		||||
        resultFit[0] = 0;
 | 
			
		||||
        for (int i = 0; i < tmpFit.length; i++) {
 | 
			
		||||
            if (this.m_WLPT.m_P == 0) {
 | 
			
		||||
 
 | 
			
		||||
@@ -8,68 +8,230 @@ import wsi.ra.math.Jama.EigenvalueDecomposition;
 | 
			
		||||
import wsi.ra.math.Jama.Matrix;
 | 
			
		||||
import eva2.gui.BeanInspector;
 | 
			
		||||
import eva2.gui.GenericObjectEditor;
 | 
			
		||||
import eva2.server.go.InterfacePopulationChangedEventListener;
 | 
			
		||||
import eva2.server.go.enums.ESMutationInitialSigma;
 | 
			
		||||
import eva2.server.go.individuals.AbstractEAIndividual;
 | 
			
		||||
import eva2.server.go.individuals.InterfaceDataTypeDouble;
 | 
			
		||||
import eva2.server.go.populations.Population;
 | 
			
		||||
import eva2.server.go.problems.InterfaceOptimizationProblem;
 | 
			
		||||
import eva2.server.go.strategies.EvolutionStrategies;
 | 
			
		||||
import eva2.tools.EVAERROR;
 | 
			
		||||
import eva2.tools.Mathematics;
 | 
			
		||||
import eva2.tools.Pair;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The collection of all population specific data required for a rank-mu-CMA optimization.
 | 
			
		||||
 * Besides methods for initialization, this class implements the InterfacePopulationChangedEventListener
 | 
			
		||||
 * and is added as listener to the population it is initialized on. The reason for this is that the
 | 
			
		||||
 * CMA parameters must be reinitialized whenever the population itself is initialized, so the reinit
 | 
			
		||||
 * event is caught and handled. As there are numerous mutator instances but only one CMA parameter
 | 
			
		||||
 * set per population, this way is the good one.
 | 
			
		||||
 *  
 | 
			
		||||
 * @author mkron
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
class CMAParamSet implements InterfacePopulationChangedEventListener, Serializable {
 | 
			
		||||
	private static final long serialVersionUID = -1940875082544233819L;
 | 
			
		||||
	protected double firstSigma = -1.;
 | 
			
		||||
	protected double sigma;
 | 
			
		||||
	protected double d_sig, c_sig;
 | 
			
		||||
	protected double[] meanX, pathC, pathS, eigenvalues;
 | 
			
		||||
	protected double[] weights = null;
 | 
			
		||||
	protected double[][] range = null;
 | 
			
		||||
	protected Matrix              mC;
 | 
			
		||||
	protected Matrix              mB;
 | 
			
		||||
	protected boolean firstAdaptionDone = false;
 | 
			
		||||
	
 | 
			
		||||
	public String toString() {
 | 
			
		||||
		return "d_sig " + d_sig + ", c_sig" + ", sigma " + sigma + ", firstSigma " + firstSigma+ ", firstAdaptionDone " + firstAdaptionDone 
 | 
			
		||||
			+ ",\n meanX " + Arrays.toString(meanX) + ", pathC " + Arrays.toString(pathC)+ ", pathS " + Arrays.toString(pathS)+ ", eigenvalues " + Arrays.toString(eigenvalues)
 | 
			
		||||
			+ ", weights " + Arrays.toString(weights)+ ",\n mC " + mC.toString() + ",\n mB " + mB.toString();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Initializes a new CMAParamSet from scratch.
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @see #initCMAParams(CMAParamSet, int, int, Population, double)
 | 
			
		||||
	 * @param mu
 | 
			
		||||
	 * @param lambda
 | 
			
		||||
	 * @param oldGen
 | 
			
		||||
	 * @param initialSigma
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
	public static CMAParamSet initCMAParams(int mu, int lambda, Population oldGen, double initialSigma) {
 | 
			
		||||
		return initCMAParams(new CMAParamSet(), mu, lambda, oldGen, initialSigma);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * Initializes the CMA parameter set for given mu, lambda and a population.
 | 
			
		||||
	 * The initialSigma parameter is used as initial sigma directly unless it is <0, in
 | 
			
		||||
	 * that case the average range is used as initial sigma.
 | 
			
		||||
	 * The parameter instance is also added as listener to the population.
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param params	the CMA parameter set to be used - its data are overwritten
 | 
			
		||||
	 * @param mu	ES mu parameter
 | 
			
		||||
	 * @param lambda	ES lambda parameter
 | 
			
		||||
	 * @param pop	associated Population
 | 
			
		||||
	 * @param initialSigma	initial sigma or -1 to indicate the usage of average range
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
	public static CMAParamSet initCMAParams(CMAParamSet params, int mu, int lambda, Population pop, double initialSigma) {
 | 
			
		||||
		// those are from init:
 | 
			
		||||
		params.firstAdaptionDone = false;
 | 
			
		||||
		params.range = ((InterfaceDataTypeDouble)pop.getEAIndividual(0)).getDoubleRange();
 | 
			
		||||
 | 
			
		||||
		int dim = params.range.length;
 | 
			
		||||
//		if (TRACE_1) System.out.println("WCMA init " + dim);
 | 
			
		||||
//		if (TRACE_1) System.out.println("WCMA static init " + dim);
 | 
			
		||||
		params.eigenvalues = new double[dim];
 | 
			
		||||
		Arrays.fill(params.eigenvalues, 1.);
 | 
			
		||||
		params.meanX = new double[dim];
 | 
			
		||||
		params.pathC = new double[dim];
 | 
			
		||||
		params.pathS = new double[dim];
 | 
			
		||||
 | 
			
		||||
		params.mC = Matrix.identity(dim, dim);
 | 
			
		||||
		params.mB = Matrix.identity(dim, dim);
 | 
			
		||||
 | 
			
		||||
		// from adaptAfterSel
 | 
			
		||||
		params.weights = initWeights(mu, lambda);
 | 
			
		||||
		double muEff = getMuEff(params.weights, mu);
 | 
			
		||||
		params.c_sig = (muEff+2)/(muEff+dim+3);
 | 
			
		||||
//		c_u_sig = Math.sqrt(c_sig * (2.-c_sig));
 | 
			
		||||
		params.d_sig = params.c_sig+1+2*Math.max(0, Math.sqrt((muEff-1)/(dim+1)) - 1);
 | 
			
		||||
		
 | 
			
		||||
		if (initialSigma<0) initialSigma = getAvgRange(params.range);
 | 
			
		||||
		params.sigma = initialSigma;
 | 
			
		||||
//		System.out.println("INitial sigma: "+sigma);
 | 
			
		||||
		params.firstSigma = params.sigma;
 | 
			
		||||
		params.meanX = pop.getCenter(); // this might be ok?
 | 
			
		||||
		pop.addPopulationChangedEventListener(params);
 | 
			
		||||
		return params;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Initialize the default weights for the mu update using a log scale.
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param mu
 | 
			
		||||
	 * @param lambda
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
	public static double[] initWeights(int mu, int lambda) {
 | 
			
		||||
		double[] theWeights = new double[mu];
 | 
			
		||||
		double sum = 0;
 | 
			
		||||
		int type = 0; // zero is default log scale
 | 
			
		||||
		for (int i=0; i<mu; i++) {
 | 
			
		||||
			if (type == 0) {
 | 
			
		||||
				theWeights[i] = (Math.log((lambda+1)/2.)-Math.log(i+1));
 | 
			
		||||
			} else theWeights[i] = 1.;
 | 
			
		||||
			sum+=theWeights[i];
 | 
			
		||||
		}
 | 
			
		||||
		for (int i=0; i<mu; i++) theWeights[i] /= sum; 
 | 
			
		||||
		return theWeights;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * So-called effective mu value.
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param weights
 | 
			
		||||
	 * @param mu
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
	public static double getMuEff(double[] weights, int mu) {
 | 
			
		||||
		double res = 0, u;
 | 
			
		||||
		for (int i=0; i<mu;i++) {
 | 
			
		||||
			u = weights[i];
 | 
			
		||||
			res += u*u;
 | 
			
		||||
		}
 | 
			
		||||
		return 1./res;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * The default mu_cov is equal to the mu_eff value.
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param weights
 | 
			
		||||
	 * @param mu
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
	public static double getMuCov(double[] weights, int mu) {
 | 
			
		||||
		// default parameter value ( HK03, sec. 2)
 | 
			
		||||
		return getMuEff(weights, mu);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * Calculate the average length of the range intervals over all dimensions.
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param range
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
    public static double getAvgRange(double[][] range) {
 | 
			
		||||
		double sum = 0.;
 | 
			
		||||
		for (int i=0; i<range.length; i++) sum+=(range[i][1]-range[i][0]);
 | 
			
		||||
		return sum/range.length;
 | 
			
		||||
	}
 | 
			
		||||
    
 | 
			
		||||
	/**
 | 
			
		||||
	 * Make sure that the parameter sets of each population are updated (reinitialized)
 | 
			
		||||
	 * if a population is reinitialized.
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @see InterfacePopulationChangedEventListener
 | 
			
		||||
	 */
 | 
			
		||||
	public void registerPopulationStateChanged(Object source, String name) {
 | 
			
		||||
		if (name.equals(Population.populationInitialized)) {
 | 
			
		||||
			Population pop = (Population)source;
 | 
			
		||||
			if (MutateESRankMuCMA.TRACE_1) System.out.println("Event " + name + " arrived in CMAParamSet!!!");
 | 
			
		||||
			CMAParamSet params = (CMAParamSet)(pop.getData(MutateESRankMuCMA.cmaParamsKey));
 | 
			
		||||
			int mu;
 | 
			
		||||
			if (pop.hasData(EvolutionStrategies.esMuParam)) {
 | 
			
		||||
				mu = (Integer)pop.getData(EvolutionStrategies.esMuParam); 
 | 
			
		||||
			} else {
 | 
			
		||||
				System.err.println("Unknown mu in reinit! using lambda/2...");
 | 
			
		||||
				mu = pop.size()/2;
 | 
			
		||||
			}
 | 
			
		||||
			pop.putData(MutateESRankMuCMA.cmaParamsKey, CMAParamSet.initCMAParams(params, mu, pop.size(), pop, params.firstSigma));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implementing CMA ES with rank-mu-update and weighted recombination. More information can be found here:
 | 
			
		||||
 * - http://www.bionik.tu-berlin.de/user/niko/cmaesintro.html
 | 
			
		||||
 * - N.Hansen & S.Kern 2004: Evaluating the CMA Evolution Strategy on Multimodal Test Functions.
 | 
			
		||||
 *   Parallel Problem Solving from Nature 2004.
 | 
			
		||||
 * - For the stopping criteria: Auger&Hansen, CEC '05, A Restart CMA ES with increasing population size. 
 | 
			
		||||
 * 
 | 
			
		||||
 * The implementation uses a structure for keeping all adaptive parameters, CMAParamSet, which is stored
 | 
			
		||||
 * in the populations, so that in principle, multi-modal optimization with several populations becomes possible.
 | 
			
		||||
 * This of course requires proper handling of the generational cycle, i.e., new generations should be cloned from
 | 
			
		||||
 * the former ones (without individuals is ok) so that the parameters are taken over.
 | 
			
		||||
 * 
 | 
			
		||||
 * @author mkron
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public class MutateESRankMuCMA implements InterfaceMutationGenerational, Serializable {
 | 
			
		||||
	int dim;
 | 
			
		||||
//	int dim;
 | 
			
		||||
	private double c_c, expRandStepLen;
 | 
			
		||||
	private double[] z, zCor;
 | 
			
		||||
	
 | 
			
		||||
	// The static member lastParams is used to store the parameter set last seen in an adaption step, which
 | 
			
		||||
	// is then later used for the individual mutations. Necessary because each individual has its own mutator
 | 
			
		||||
	// instance. It would be cleaner to keep all parameters within the individual and have just one mutation
 | 
			
		||||
	// instance, however this would create quite a big baustelle.
 | 
			
		||||
	private static transient CMAParamSet lastParams=null;
 | 
			
		||||
 | 
			
		||||
	private ESMutationInitialSigma initializeSig = ESMutationInitialSigma.avgInitialDistance;
 | 
			
		||||
	private double userDefInitSig = 0.2;
 | 
			
		||||
	private static double firstSigma = -1.;
 | 
			
		||||
	private static double sigma;
 | 
			
		||||
	private static double d_sig, c_sig;
 | 
			
		||||
	private static double[] meanX, pathC, pathS, eigenvalues;
 | 
			
		||||
	private static double[] weights = null;
 | 
			
		||||
	private static double[][] range = null;
 | 
			
		||||
	private static Matrix              mC;
 | 
			
		||||
	private static Matrix              mB;
 | 
			
		||||
//	private static double[]				mBD;
 | 
			
		||||
	private static boolean firstAdaptionDone = false;
 | 
			
		||||
	private static boolean TRACE_1 = false;
 | 
			
		||||
	private static boolean TRACE_2 = false;
 | 
			
		||||
	private static boolean TRACE_TEST = false;
 | 
			
		||||
//	private Matrix				BD;
 | 
			
		||||
	public static final String cmaParamsKey = "RankMuCMAParameters";
 | 
			
		||||
	
 | 
			
		||||
	public static boolean TRACE_1 = false;
 | 
			
		||||
	public static boolean TRACE_2 = false;
 | 
			
		||||
	public static boolean TRACE_TEST = false;
 | 
			
		||||
 | 
			
		||||
	public MutateESRankMuCMA() {
 | 
			
		||||
		firstAdaptionDone = false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public MutateESRankMuCMA(MutateESRankMuCMA mutator) {
 | 
			
		||||
		this.c_c            = mutator.c_c;
 | 
			
		||||
//		this.c_sig            = mutator.c_sig;
 | 
			
		||||
//		this.c_u_sig            = mutator.c_u_sig;
 | 
			
		||||
//		this.d_sig            = mutator.d_sig;
 | 
			
		||||
		this.expRandStepLen     = mutator.expRandStepLen;
 | 
			
		||||
		this.dim			= mutator.dim;
 | 
			
		||||
		this.initializeSig = mutator.initializeSig;
 | 
			
		||||
 | 
			
		||||
//		if (mutator.meanX != null)    this.meanX    = (double[]) mutator.meanX.clone();
 | 
			
		||||
//		if (mutator.pathC != null)  this.pathC  = (double[]) mutator.pathC.clone();
 | 
			
		||||
//		if (mutator.pathS != null)     this.pathS     = (double[]) mutator.pathS.clone();
 | 
			
		||||
		if (mutator.z != null)    this.z    = (double[]) mutator.z.clone();
 | 
			
		||||
		if (mutator.zCor != null)    this.zCor    = (double[]) mutator.zCor.clone();
 | 
			
		||||
//		if (mutator.eigenvalues != null) this.eigenvalues = (double[]) mutator.eigenvalues.clone();
 | 
			
		||||
//		if (mutator.mC != null)    this.mC    = (Matrix) mutator.mC.clone();
 | 
			
		||||
//		if (mutator.mB != null)      this.mB      = (Matrix) mutator.mB.clone();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public Object clone() {
 | 
			
		||||
@@ -79,6 +241,7 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Retrieve the initial sigma for the given population and the user defined method.
 | 
			
		||||
	 * For the halfRange case, -1 is returned, as the range is not available here.
 | 
			
		||||
	 * @param initGen
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
@@ -89,12 +252,20 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
			//return initGen.getPopulationMeasures(null)[0]*getAvgRange();
 | 
			
		||||
			// use euclidian measures without normation and scaling
 | 
			
		||||
			return initGen.getPopulationMeasures(null)[0];
 | 
			
		||||
		case halfRange: return getAvgRange()/2.;
 | 
			
		||||
		//case halfRange: return getAvgRange(range)/2.;
 | 
			
		||||
		case userDefined: return userDefInitSig ;
 | 
			
		||||
		default: return 0.2;
 | 
			
		||||
		default: return -1.;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * Perform the main adaption of sigma and C using evolution paths.
 | 
			
		||||
	 * The evolution path is deduced from the center of the selected population compared to the old
 | 
			
		||||
	 * mean value.
 | 
			
		||||
	 * See Hansen&Kern 04 for further information.
 | 
			
		||||
	 * @param oldGen
 | 
			
		||||
	 * @param selectedP
 | 
			
		||||
	 */
 | 
			
		||||
	public void adaptAfterSelection(Population oldGen, Population selectedP) {
 | 
			
		||||
		Population selectedSorted = selectedP.getSortedBestFirst();
 | 
			
		||||
		
 | 
			
		||||
@@ -105,58 +276,57 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
			EVAERROR.errorMsgOnce("Warning: invalid mu/lambda ratio (" + mu + "/" + lambda + ") ! Setting mu to lambda/2.");
 | 
			
		||||
			mu = lambda/2;
 | 
			
		||||
		}
 | 
			
		||||
		if (!firstAdaptionDone) {
 | 
			
		||||
			initWeights(mu, lambda);
 | 
			
		||||
			double muEff = getMuEff(mu);
 | 
			
		||||
			c_sig = (muEff+2)/(muEff+dim+3);
 | 
			
		||||
//			c_u_sig = Math.sqrt(c_sig * (2.-c_sig));
 | 
			
		||||
			d_sig = c_sig+1+2*Math.max(0, Math.sqrt((muEff-1)/(dim+1)) - 1);
 | 
			
		||||
			sigma = getInitSigma(oldGen);
 | 
			
		||||
//			System.out.println("INitial sigma: "+sigma);
 | 
			
		||||
			firstSigma = sigma;
 | 
			
		||||
			meanX = oldGen.getCenter(); // this might be ok?
 | 
			
		||||
		CMAParamSet params;
 | 
			
		||||
		if (oldGen.getGeneration() <= 1) { // init new param set. At gen < 1 we shouldnt be called, but better do it once too often
 | 
			
		||||
			if (oldGen.hasData(cmaParamsKey)) params = CMAParamSet.initCMAParams((CMAParamSet)oldGen.getData(cmaParamsKey), mu, lambda, oldGen, getInitSigma(oldGen));
 | 
			
		||||
			else params = CMAParamSet.initCMAParams(mu, lambda, oldGen, getInitSigma(oldGen));			
 | 
			
		||||
		} else {
 | 
			
		||||
			if (!oldGen.hasData(cmaParamsKey)) {
 | 
			
		||||
				if (oldGen.getGeneration() > 1) System.err.println("pop had no params at gen " + oldGen.getGeneration());
 | 
			
		||||
				params = CMAParamSet.initCMAParams(mu, lambda, oldGen, getInitSigma(oldGen));
 | 
			
		||||
			} else params = (CMAParamSet)oldGen.getData(cmaParamsKey);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		int generation = oldGen.getGeneration();
 | 
			
		||||
		
 | 
			
		||||
		if (TRACE_1) {
 | 
			
		||||
			System.out.println("WCMA adaptGenerational");
 | 
			
		||||
			System.out.println("WCMA adaptGenerational **********");
 | 
			
		||||
//			System.out.println("newPop measures: " + BeanInspector.toString(newPop.getPopulationMeasures()));
 | 
			
		||||
			System.out.println("mu_eff: " + getMuEff(mu));
 | 
			
		||||
			System.out.println("meanX: " + BeanInspector.toString(meanX));
 | 
			
		||||
			System.out.println("pathC: " + BeanInspector.toString(pathC));
 | 
			
		||||
			System.out.println("pathS: " + BeanInspector.toString(pathS));
 | 
			
		||||
			System.out.println("mu_eff: " + CMAParamSet.getMuEff(params.weights, mu));
 | 
			
		||||
			System.out.println(params.toString());
 | 
			
		||||
			System.out.println("*********************************");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		double[] newMeanX = calcMeanX(selectedSorted);
 | 
			
		||||
		double[] newMeanX = calcMeanX(params.weights, selectedSorted);
 | 
			
		||||
		if (TRACE_1) System.out.println("newMeanX:  " + BeanInspector.toString(newMeanX));
 | 
			
		||||
		
 | 
			
		||||
		int dim=params.meanX.length;
 | 
			
		||||
        double[] BDz = new double[dim];
 | 
			
		||||
        for (int i=0; i<dim; i++) { /* calculate xmean and BDz~N(0,C) */
 | 
			
		||||
        	// Eq. 4 from HK04, most right term
 | 
			
		||||
        	BDz[i] = Math.sqrt(getMuEff(mu)) * (newMeanX[i] - meanX[i]) / getSigma(i);
 | 
			
		||||
        	BDz[i] = Math.sqrt(CMAParamSet.getMuEff(params.weights, mu)) * (newMeanX[i] - params.meanX[i]) / getSigma(params, i);
 | 
			
		||||
        }
 | 
			
		||||
//        if (TRACE_2) System.out.println("BDz is " + BeanInspector.toString(BDz));
 | 
			
		||||
 | 
			
		||||
		double[] newPathS = pathS.clone();
 | 
			
		||||
		double[] newPathC = pathC.clone();
 | 
			
		||||
		double[] newPathS = params.pathS.clone();
 | 
			
		||||
		double[] newPathC = params.pathC.clone();
 | 
			
		||||
		
 | 
			
		||||
		double[] zVect = new double[dim];
 | 
			
		||||
        /* calculate z := D^(-1) * B^(-1) * BDz into artmp, we could have stored z instead */
 | 
			
		||||
        for (int i = 0; i < dim; ++i) {
 | 
			
		||||
        	double sum=0.;
 | 
			
		||||
            for (int j = 0; j < dim; ++j) {
 | 
			
		||||
                sum += mB.get(j,i) * BDz[j]; // times B transposed, (Eq 4) in HK04
 | 
			
		||||
                sum += params.mB.get(j,i) * BDz[j]; // times B transposed, (Eq 4) in HK04
 | 
			
		||||
            }
 | 
			
		||||
            zVect[i] = sum / Math.sqrt(eigenvalues[i]);
 | 
			
		||||
            zVect[i] = sum / Math.sqrt(params.eigenvalues[i]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* cumulation for sigma (ps) using B*z */
 | 
			
		||||
		for (int i = 0; i < dim; ++i) {
 | 
			
		||||
			double sum = 0.;
 | 
			
		||||
			for (int j = 0; j < dim; ++j) sum += mB.get(i,j) * zVect[j];
 | 
			
		||||
			newPathS[i] = (1. - getCs()) * pathS[i]
 | 
			
		||||
			              + Math.sqrt(getCs() * (2. - getCs())) * sum;
 | 
			
		||||
			for (int j = 0; j < dim; ++j) sum += params.mB.get(i,j) * zVect[j];
 | 
			
		||||
			newPathS[i] = (1. - params.c_sig) * params.pathS[i]
 | 
			
		||||
			              + Math.sqrt(params.c_sig * (2. - params.c_sig)) * sum;
 | 
			
		||||
		}
 | 
			
		||||
//		System.out.println("pathS diff: " + BeanInspector.toString(Mathematics.vvSub(newPathS, pathS)));
 | 
			
		||||
//		System.out.println("newPathS is " + BeanInspector.toString(newPathS));
 | 
			
		||||
@@ -164,12 +334,12 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
		double psNorm = Mathematics.norm(newPathS);
 | 
			
		||||
		
 | 
			
		||||
        double hsig = 0;
 | 
			
		||||
        if (psNorm / Math.sqrt(1. - Math.pow(1. - getCs(), 2. * generation))
 | 
			
		||||
        if (psNorm / Math.sqrt(1. - Math.pow(1. - params.c_sig, 2. * generation))
 | 
			
		||||
                / expRandStepLen < 1.4 + 2. / (dim + 1.)) {
 | 
			
		||||
            hsig = 1;
 | 
			
		||||
        }
 | 
			
		||||
        for (int i = 0; i < dim; ++i) {
 | 
			
		||||
            newPathC[i] = (1. - getCc()) * pathC[i] + hsig
 | 
			
		||||
            newPathC[i] = (1. - getCc()) * params.pathC[i] + hsig
 | 
			
		||||
            * Math.sqrt(getCc() * (2. - getCc())) * BDz[i];
 | 
			
		||||
        }
 | 
			
		||||
		
 | 
			
		||||
@@ -180,36 +350,39 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
			System.out.println("newPathS: " + BeanInspector.toString(newPathS));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (TRACE_1) System.out.println("Bef: C is \n" + mC.toString());
 | 
			
		||||
		if (meanX == null) meanX = newMeanX;
 | 
			
		||||
		if (TRACE_1) System.out.println("Bef: C is \n" + params.mC.toString());
 | 
			
		||||
		if (params.meanX == null) params.meanX = newMeanX;
 | 
			
		||||
		
 | 
			
		||||
		updateCov(newPathC, newMeanX, hsig, mu, selectedSorted);
 | 
			
		||||
		updateBD();
 | 
			
		||||
		updateCov(params, newPathC, newMeanX, hsig, mu, selectedSorted);
 | 
			
		||||
		updateBD(params);
 | 
			
		||||
			
 | 
			
		||||
		if (TRACE_2) System.out.println("Aft: C is \n" + mC.toString());
 | 
			
		||||
		if (TRACE_2) System.out.println("Aft: C is \n" + params.mC.toString());
 | 
			
		||||
 | 
			
		||||
        /* update of sigma */
 | 
			
		||||
		double sigFact = Math.exp(((psNorm / expRandStepLen) - 1) * getCs()
 | 
			
		||||
                / getDamps());
 | 
			
		||||
		if (Double.isInfinite(sigFact)) sigma *= 10.; // in larger search spaces sigma tends to explode after init.  
 | 
			
		||||
		else sigma *= sigFact;
 | 
			
		||||
		double sigFact = Math.exp(((psNorm / expRandStepLen) - 1) * params.c_sig
 | 
			
		||||
                / params.d_sig);
 | 
			
		||||
		if (Double.isInfinite(sigFact)) params.sigma *= 10.; // in larger search spaces sigma tends to explode after init.  
 | 
			
		||||
		else params.sigma *= sigFact;
 | 
			
		||||
 | 
			
		||||
        if (Double.isInfinite(sigma) || Double.isNaN(sigma)) {
 | 
			
		||||
        if (Double.isInfinite(params.sigma) || Double.isNaN(params.sigma)) {
 | 
			
		||||
        	System.err.println("Error, unstable sigma!");
 | 
			
		||||
        }
 | 
			
		||||
		testAndCorrectNumerics(generation, selectedSorted);
 | 
			
		||||
		testAndCorrectNumerics(params, generation, selectedSorted);
 | 
			
		||||
        
 | 
			
		||||
//		System.out.println("sigma=" + sigma + " psLen=" + (psNorm) + " chiN="+expRandStepLen + " cs="+getCs()+ " damps="+getDamps() + " diag " + BeanInspector.toString(eigenvalues));
 | 
			
		||||
		if (TRACE_1) {
 | 
			
		||||
			System.out.print("psLen=" + (psNorm) + " ");
 | 
			
		||||
			outputParams(mu);
 | 
			
		||||
			outputParams(params, mu);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// take over data
 | 
			
		||||
		meanX = newMeanX;
 | 
			
		||||
		pathC = newPathC;
 | 
			
		||||
		pathS = newPathS;
 | 
			
		||||
		firstAdaptionDone = true;
 | 
			
		||||
		params.meanX = newMeanX;
 | 
			
		||||
		params.pathC = newPathC;
 | 
			
		||||
		params.pathS = newPathS;
 | 
			
		||||
		params.firstAdaptionDone = true;
 | 
			
		||||
		
 | 
			
		||||
		lastParams = params;
 | 
			
		||||
		oldGen.putData(cmaParamsKey, params);
 | 
			
		||||
		selectedP.putData(cmaParamsKey, params);
 | 
			
		||||
//		if (TRACE_2) System.out.println("sampling around " + BeanInspector.toString(meanX));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -218,7 +391,13 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
	 */
 | 
			
		||||
	public void adaptGenerational(Population oldPop, Population selectedPop, 
 | 
			
		||||
			Population newPop, boolean updateSelected) {
 | 
			
		||||
		// nothing to do?	
 | 
			
		||||
		// nothing to do? Oh yes, we can easily transfer the cma-params from the old to the new population. 
 | 
			
		||||
		if (!newPop.hasData(cmaParamsKey)) {
 | 
			
		||||
			if (!oldPop.hasData(cmaParamsKey)) System.err.println("warning: no cma param set found (MutateESRankMuCMA!");
 | 
			
		||||
			else newPop.putData(cmaParamsKey, oldPop.getData(cmaParamsKey));
 | 
			
		||||
		}
 | 
			
		||||
		//newPop.addData(cmaParamsKey, oldPop.getData(cmaParamsKey));
 | 
			
		||||
		//newPop.addPopulationChangedEventListener(this); // listen to every population to be informed about reinit events
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
@@ -227,13 +406,13 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
	 * @param iterations
 | 
			
		||||
	 * @param selected
 | 
			
		||||
	 */
 | 
			
		||||
    void testAndCorrectNumerics(int iterations, Population selected) { // not much left here
 | 
			
		||||
    void testAndCorrectNumerics(CMAParamSet params, int iterations, Population selected) { // not much left here
 | 
			
		||||
    	/* Flat Fitness, Test if function values are identical */
 | 
			
		||||
    	if (iterations > 1) {
 | 
			
		||||
    		// selected pop is sorted
 | 
			
		||||
    		if (nearlySame(selected.getEAIndividual(0).getFitness(),selected.getEAIndividual(selected.size()-1).getFitness())) {
 | 
			
		||||
    			if (TRACE_1) System.err.println("flat fitness landscape, consider reformulation of fitness, step-size increased");
 | 
			
		||||
    			sigma *= Math.exp(0.2+getCs()/getDamps());
 | 
			
		||||
    			params.sigma *= Math.exp(0.2+params.c_sig/params.d_sig);
 | 
			
		||||
//    			sigma=0.1;
 | 
			
		||||
    		}
 | 
			
		||||
    	}
 | 
			
		||||
@@ -243,20 +422,20 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
    	double fac = 1.;
 | 
			
		||||
    	double minEig = 1e-12;
 | 
			
		||||
    	double maxEig = 1e8;
 | 
			
		||||
    	if (Mathematics.max(eigenvalues) < minEig) 
 | 
			
		||||
    		fac = 1./Math.sqrt(Mathematics.max(eigenvalues));
 | 
			
		||||
    	else if (Mathematics.min(eigenvalues) > maxEig)
 | 
			
		||||
    		fac = 1./Math.sqrt(Mathematics.min(eigenvalues));
 | 
			
		||||
    	if (Mathematics.max(params.eigenvalues) < minEig) 
 | 
			
		||||
    		fac = 1./Math.sqrt(Mathematics.max(params.eigenvalues));
 | 
			
		||||
    	else if (Mathematics.min(params.eigenvalues) > maxEig)
 | 
			
		||||
    		fac = 1./Math.sqrt(Mathematics.min(params.eigenvalues));
 | 
			
		||||
 | 
			
		||||
    	if (fac != 1.) {
 | 
			
		||||
    		System.err.println("Scaling by " + fac);
 | 
			
		||||
    		sigma /= fac;
 | 
			
		||||
    		for(int i = 0; i < dim; ++i) {
 | 
			
		||||
    			pathC[i] *= fac;
 | 
			
		||||
    			eigenvalues[i] *= fac*fac;
 | 
			
		||||
    		params.sigma /= fac;
 | 
			
		||||
    		for(int i = 0; i < params.meanX.length; ++i) {
 | 
			
		||||
    			params.pathC[i] *= fac;
 | 
			
		||||
    			params.eigenvalues[i] *= fac*fac;
 | 
			
		||||
    			for (int j = 0; j <= i; ++j) {
 | 
			
		||||
    				mC.set(i, j, mC.get(i,j)*fac*fac);
 | 
			
		||||
    				if (i!=j) mC.set(j, i, mC.get(i,j));
 | 
			
		||||
    				params.mC.set(i, j, params.mC.get(i,j)*fac*fac);
 | 
			
		||||
    				if (i!=j) params.mC.set(j, i, params.mC.get(i,j));
 | 
			
		||||
    			}
 | 
			
		||||
    		}
 | 
			
		||||
    	}
 | 
			
		||||
@@ -274,70 +453,67 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
	 * @param i
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
	private double getSigma(int i) {
 | 
			
		||||
		return sigma;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private double getDamps() {
 | 
			
		||||
		return d_sig;
 | 
			
		||||
	private double getSigma(CMAParamSet params, int i) {
 | 
			
		||||
		return params.sigma;
 | 
			
		||||
	}
 | 
			
		||||
//
 | 
			
		||||
//	private double getDamps() {
 | 
			
		||||
//		return d_sig;
 | 
			
		||||
//	}
 | 
			
		||||
 | 
			
		||||
	private double getCc() {
 | 
			
		||||
		return c_c;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private double getCs() {
 | 
			
		||||
		return c_sig;
 | 
			
		||||
	}
 | 
			
		||||
//	private double getCs() {
 | 
			
		||||
//		return c_sig;
 | 
			
		||||
//	}
 | 
			
		||||
 | 
			
		||||
	private double calcExpRandStepLen() {
 | 
			
		||||
	private double calcExpRandStepLen(int dim) {
 | 
			
		||||
		// scale by avg range?
 | 
			
		||||
		return Math.sqrt(dim)*(1.-(1./(4*dim))+(1./(21*dim*dim)));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    private double getAvgRange() {
 | 
			
		||||
		double sum = 0.;
 | 
			
		||||
		for (int i=0; i<dim; i++) sum+=(range[i][1]-range[i][0]);
 | 
			
		||||
		return sum/dim;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* update C */
 | 
			
		||||
	private void updateCov(double[] newPathC, double[] newMeanX, double hsig, int mu, Population selected) {
 | 
			
		||||
	private void updateCov(CMAParamSet params, double[] newPathC, double[] newMeanX, double hsig, int mu, Population selected) {
 | 
			
		||||
		double newVal = 0;
 | 
			
		||||
        if (getCCov(mu) > 0) {
 | 
			
		||||
    	int dim = newMeanX.length;
 | 
			
		||||
		double ccv = getCCov(params.weights, mu, dim);
 | 
			
		||||
        if (ccv > 0) {
 | 
			
		||||
        	double mcv = CMAParamSet.getMuCov(params.weights, mu);
 | 
			
		||||
        	/* (only upper triangle!) */
 | 
			
		||||
            /* update covariance matrix */
 | 
			
		||||
        	//System.out.println("CCov " + getCCov(selected) + " Cc " + getCc() + " muCov " + getMuCov(selected));
 | 
			
		||||
            for (int i = 0; i < dim; ++i)
 | 
			
		||||
                for (int j = 0; j <= i; ++j) {
 | 
			
		||||
//                	oldVal = mC.get(i,j);
 | 
			
		||||
                	newVal = (1 - getCCov(mu)) * mC.get(i,j)
 | 
			
		||||
                    + getCCov(mu)
 | 
			
		||||
                    * (1. / getMuCov(mu))
 | 
			
		||||
                	newVal = (1 - ccv) * params.mC.get(i,j)
 | 
			
		||||
                    + ccv
 | 
			
		||||
                    * (1. / mcv)
 | 
			
		||||
                    * (newPathC[i] * newPathC[j] + (1 - hsig) * getCc()
 | 
			
		||||
                            * (2. - getCc()) * mC.get(i,j));
 | 
			
		||||
                    mC.set(i,j,newVal);
 | 
			
		||||
                            * (2. - getCc()) * params.mC.get(i,j));
 | 
			
		||||
                	params.mC.set(i,j,newVal);
 | 
			
		||||
                    for (int k = 0; k < mu; ++k) { /*
 | 
			
		||||
                    * additional rank mu
 | 
			
		||||
                    * update
 | 
			
		||||
                    */
 | 
			
		||||
                    	double[] x_k = ((InterfaceDataTypeDouble)selected.getEAIndividual(k)).getDoubleData();
 | 
			
		||||
                    	newVal = mC.get(i,j)+ getCCov(mu) * (1 - 1. / getMuCov(mu))
 | 
			
		||||
                        * getWeight(k)	* (x_k[i] - meanX[i])
 | 
			
		||||
                        							* (x_k[j] - meanX[j]) / (getSigma(i) * getSigma(j)); // TODO right sigmas?
 | 
			
		||||
                        mC.set(i,j, newVal);
 | 
			
		||||
                    	newVal = params.mC.get(i,j)+ ccv * (1 - 1. / mcv)
 | 
			
		||||
                        * params.weights[k]	* (x_k[i] - params.meanX[i])
 | 
			
		||||
                        							* (x_k[j] - params.meanX[j]) / (getSigma(params, i) * getSigma(params, j)); // TODO right sigmas?
 | 
			
		||||
                    	params.mC.set(i,j, newVal);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            // fill rest of C
 | 
			
		||||
            for (int i = 0; i < dim; ++i) {
 | 
			
		||||
                for (int j = i+1; j < dim; ++j) {
 | 
			
		||||
 | 
			
		||||
                	mC.set(i, j, mC.get(j,i));
 | 
			
		||||
                	params.mC.set(i, j, params.mC.get(j,i));
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
            }
 | 
			
		||||
        	if (mC.get(0,1) != mC.get(1,0)) {
 | 
			
		||||
        		System.err.println("WARNING");
 | 
			
		||||
        	if (params.mC.get(0,1) != params.mC.get(1,0)) {
 | 
			
		||||
        		System.err.println("WARNING, C is not symmetric!");
 | 
			
		||||
        	}            
 | 
			
		||||
//            maxsqrtdiagC = Math.sqrt(math.max(math.diag(C)));
 | 
			
		||||
//            minsqrtdiagC = Math.sqrt(math.min(math.diag(C)));
 | 
			
		||||
@@ -345,32 +521,22 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
        
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private double getMuCov(int mu) {
 | 
			
		||||
		// default parameter value ( HK03, sec. 2)
 | 
			
		||||
		return getMuEff(mu);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private double getCCov(int mu) {
 | 
			
		||||
	private double getCCov(double[] weights, int mu, int dim) {
 | 
			
		||||
		// ( HK03, sec. 2)
 | 
			
		||||
		//return Math.min(1., 2*getMuEff(selected)/(dim*dim));
 | 
			
		||||
		double ccov = (2./(getMuCov(mu)*Math.pow(dim+Math.sqrt(2.), 2)))+(1.-(1./getMuCov(mu)))*Math.min(1., (2*getMuEff(mu)-1.)/(dim*dim+2*dim+4+getMuEff(mu)));
 | 
			
		||||
		double muC=CMAParamSet.getMuCov(weights, mu);
 | 
			
		||||
		double muE=CMAParamSet.getMuEff(weights,mu);
 | 
			
		||||
		double ccov = (2./(muC*Math.pow(dim+Math.sqrt(2.), 2)))+(1.-(1./muC))*Math.min(1., (2*muE-1.)/(dim*dim+2*dim+4+muE));
 | 
			
		||||
		return ccov;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private double getMuEff(int mu) {
 | 
			
		||||
		double res = 0, u;
 | 
			
		||||
		for (int i=0; i<mu;i++) {
 | 
			
		||||
			u = getWeight(i);
 | 
			
		||||
			res += u*u;
 | 
			
		||||
		}
 | 
			
		||||
		return 1./res;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	private void outputParams(int mu) {
 | 
			
		||||
		System.out.println("sigma=" + sigma + " chiN="+expRandStepLen + " cs="+getCs()+ " damps="+getDamps() + " Cc=" + getCc() + " Ccov=" + getCCov(mu) + " mueff=" + getMuEff(mu) + " mucov="+getMuCov(mu));
 | 
			
		||||
	private void outputParams(CMAParamSet params, int mu) {
 | 
			
		||||
		System.out.println("sigma=" + params.sigma + " chiN="+expRandStepLen + " cs="+params.c_sig
 | 
			
		||||
				+ " damps="+params.d_sig + " Cc=" + getCc() + " Ccov=" + getCCov(params.weights, mu, params.meanX.length) 
 | 
			
		||||
				+ " mueff=" + CMAParamSet.getMuEff(params.weights, mu) + " mucov="+CMAParamSet.getMuCov(params.weights, mu));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private void updateBD() {
 | 
			
		||||
	private void updateBD(CMAParamSet params) {
 | 
			
		||||
//		C=triu(C)+transpose(triu(C,1)); % enforce symmetry
 | 
			
		||||
//		[B,D] = eig(C);
 | 
			
		||||
//		% limit condition of C to 1e14 + 1
 | 
			
		||||
@@ -382,13 +548,13 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
//		D = diag(sqrt(diag(D))); % D contains standard deviations now
 | 
			
		||||
//		BD = B*D; % for speed up only
 | 
			
		||||
		////////////////////////////////////////////7
 | 
			
		||||
		mC = (mC.plus(mC.transpose()).times(0.5)); // MAKE C SYMMETRIC
 | 
			
		||||
		params.mC = (params.mC.plus(params.mC.transpose()).times(0.5)); // MAKE C SYMMETRIC
 | 
			
		||||
 | 
			
		||||
		EigenvalueDecomposition helper;
 | 
			
		||||
//		this.m_Counter      = 0;
 | 
			
		||||
		helper              = new EigenvalueDecomposition(mC);
 | 
			
		||||
		mB              = helper.getV(); // Return the eigenvector matrix
 | 
			
		||||
		eigenvalues  = helper.getRealEigenvalues();
 | 
			
		||||
		helper              = new EigenvalueDecomposition(params.mC);
 | 
			
		||||
		params.mB              = helper.getV(); // Return the eigenvector matrix
 | 
			
		||||
		params.eigenvalues  = helper.getRealEigenvalues();
 | 
			
		||||
		
 | 
			
		||||
//		double[] sqrtEig = eigenvalues.clone();
 | 
			
		||||
//		for (int i = 0; i < sqrtEig.length; i++) {
 | 
			
		||||
@@ -417,26 +583,9 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
	 * @param selectedPop
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
	private double[] calcMeanX(Population selectedPop) {
 | 
			
		||||
	private double[] calcMeanX(double[] weights, Population selectedPop) {
 | 
			
		||||
		return selectedPop.getCenterWeighted(weights);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private double getWeight(int i) {
 | 
			
		||||
		return weights[i];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private void initWeights(int mu, int lambda) {
 | 
			
		||||
		weights = new double[mu];
 | 
			
		||||
		double sum = 0;
 | 
			
		||||
		int type = 0; // zero is default log scale
 | 
			
		||||
		for (int i=0; i<mu; i++) {
 | 
			
		||||
			if (type == 0) {
 | 
			
		||||
				weights[i] = (Math.log((lambda+1)/2.)-Math.log(i+1));
 | 
			
		||||
			} else weights[i] = 1.;
 | 
			
		||||
			sum+=weights[i];
 | 
			
		||||
		}
 | 
			
		||||
		for (int i=0; i<mu; i++) weights[i] /= sum; 
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void crossoverOnStrategyParameters(AbstractEAIndividual indy1,
 | 
			
		||||
			Population partners) {
 | 
			
		||||
@@ -458,29 +607,30 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
	
 | 
			
		||||
	public void init(AbstractEAIndividual individual,
 | 
			
		||||
			InterfaceOptimizationProblem opt) {
 | 
			
		||||
		// TODO recheck all this; some is handled in adaptGeneration on the first call
 | 
			
		||||
		firstAdaptionDone = false;
 | 
			
		||||
		range = ((InterfaceDataTypeDouble)individual).getDoubleRange();
 | 
			
		||||
		dim = range.length;
 | 
			
		||||
		if (TRACE_1) System.out.println("WCMA init " + dim);
 | 
			
		||||
//		firstAdaptionDone = false;
 | 
			
		||||
//		range = ((InterfaceDataTypeDouble)individual).getDoubleRange();
 | 
			
		||||
//		dim = range.length;
 | 
			
		||||
//		if (TRACE_1) System.out.println("WCMA init " + dim);
 | 
			
		||||
//		c_c = (4./(dim+4));
 | 
			
		||||
//		c_sig = Double.NaN; // mark as not yet initialized
 | 
			
		||||
////		c_u_sig = Double.NaN;
 | 
			
		||||
//		d_sig = Double.NaN; // init in first adaption step!  
 | 
			
		||||
//		if (TRACE_1) System.out.println("WCMA static init " + dim);
 | 
			
		||||
//		eigenvalues = new double[dim];
 | 
			
		||||
//		Arrays.fill(eigenvalues, 1.);
 | 
			
		||||
//		
 | 
			
		||||
//		meanX = new double[dim];
 | 
			
		||||
//		pathC = new double[dim];
 | 
			
		||||
//		pathS = new double[dim];
 | 
			
		||||
////		mBD = new double[dim];
 | 
			
		||||
//		mC = Matrix.identity(dim, dim);
 | 
			
		||||
//		mB = Matrix.identity(dim, dim);
 | 
			
		||||
//		sigma = 0.2;
 | 
			
		||||
		// ^^^ moved to CMAParamSet initialization
 | 
			
		||||
		double[][] range = ((InterfaceDataTypeDouble)individual).getDoubleRange();
 | 
			
		||||
		int dim = range.length;
 | 
			
		||||
		c_c = (4./(dim+4));
 | 
			
		||||
		c_sig = Double.NaN; // mark as not yet initialized
 | 
			
		||||
//		c_u_sig = Double.NaN;
 | 
			
		||||
		d_sig = Double.NaN; // init in first adaption step!  
 | 
			
		||||
		if (TRACE_1) System.out.println("WCMA static init " + dim);
 | 
			
		||||
		eigenvalues = new double[dim];
 | 
			
		||||
		Arrays.fill(eigenvalues, 1.);
 | 
			
		||||
		
 | 
			
		||||
		meanX = new double[dim];
 | 
			
		||||
		pathC = new double[dim];
 | 
			
		||||
		pathS = new double[dim];
 | 
			
		||||
//		mBD = new double[dim];
 | 
			
		||||
		mC = Matrix.identity(dim, dim);
 | 
			
		||||
		mB = Matrix.identity(dim, dim);
 | 
			
		||||
		sigma = 0.2;
 | 
			
		||||
		z = new double[dim];
 | 
			
		||||
		zCor = new double[dim];
 | 
			
		||||
		expRandStepLen = calcExpRandStepLen();
 | 
			
		||||
		expRandStepLen = calcExpRandStepLen(dim);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -494,36 +644,42 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
//			if (TRACE) System.out.println("WCMA mutate, bef: " + BeanInspector.toString(x));
 | 
			
		||||
			double[][]  range  = ((InterfaceDataTypeDouble)individual).getDoubleRange();
 | 
			
		||||
			
 | 
			
		||||
			((InterfaceDataTypeDouble)individual).SetDoubleGenotype(mutate(x, range, 0));
 | 
			
		||||
			// this is a critical point: where do the CMA parameters for this individual's mutation come from?
 | 
			
		||||
			// for GA and ES we can expect that selection occured directly before the mutation cycle,
 | 
			
		||||
			// so we take the parameter set from the last adpation step.
 | 
			
		||||
			((InterfaceDataTypeDouble)individual).SetDoubleGenotype(mutate(lastParams, x, range, 0));
 | 
			
		||||
			
 | 
			
		||||
//			if (TRACE) System.out.println("WCMA mutate, aft: " + BeanInspector.toString(x));
 | 
			
		||||
		} else System.err.println("Error, expecting InterfaceDataTypeDouble");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private double[] mutate(double[] x, double[][] range, int count) {
 | 
			
		||||
		if (firstAdaptionDone) {
 | 
			
		||||
			double[] sampl = new double[x.length]; // generate scaled random vector (D * z)
 | 
			
		||||
	private double[] mutate(CMAParamSet params, double[] x, double[][] range, int count) {
 | 
			
		||||
		int dim = range.length;
 | 
			
		||||
		if (params!=null && (params.firstAdaptionDone)) {
 | 
			
		||||
			double[] sampl = new double[dim]; // generate scaled random vector (D * z)
 | 
			
		||||
			for (int i = 0; i < dim; ++i) {
 | 
			
		||||
				sampl[i] = Math.sqrt(eigenvalues[i]) * RNG.gaussianDouble(1.);
 | 
			
		||||
				sampl[i] = Math.sqrt(params.eigenvalues[i]) * RNG.gaussianDouble(1.);
 | 
			
		||||
			}
 | 
			
		||||
//			System.out.println("Sampling around " + BeanInspector.toString(meanX));
 | 
			
		||||
			/* add mutation (sigma * B * (D*z)) */
 | 
			
		||||
			for (int i = 0; i < dim; ++i) {
 | 
			
		||||
				double sum = 0.;
 | 
			
		||||
				for (int j = 0; j < dim; ++j)
 | 
			
		||||
					sum += mB.get(i,j) * sampl[j];
 | 
			
		||||
				x[i] = meanX[i]+getSigma(i)*sum;
 | 
			
		||||
					sum += params.mB.get(i,j) * sampl[j];
 | 
			
		||||
				x[i] = params.meanX[i]+getSigma(params, i)*sum;
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			// no valid meanX yet, so just do a gaussian jump with sigma
 | 
			
		||||
			if (params==null) {
 | 
			
		||||
				System.err.println("Error in MutateESRankMuCMA: parameter set was null! Skipping mutation...");
 | 
			
		||||
			}			// no valid meanX yet, so just do a gaussian jump with sigma
 | 
			
		||||
			for (int i = 0; i < dim; ++i) {
 | 
			
		||||
				x[i] += RNG.gaussianDouble(getSigma(i));
 | 
			
		||||
				x[i] += RNG.gaussianDouble(getSigma(params, i));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if (isInRange(x, range)) return x;
 | 
			
		||||
		else {
 | 
			
		||||
			if (count > 5) return repairMutation(x, range); // allow some nice tries before using brute force
 | 
			
		||||
			else return mutate(x, range, count+1); // for really bad initial deviations this might be a quasi infinite loop
 | 
			
		||||
			else return mutate(params, x, range, count+1); // for really bad initial deviations this might be a quasi infinite loop
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
@@ -553,8 +709,8 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @return the initial sigma value actually employed 
 | 
			
		||||
	 */
 | 
			
		||||
	public double getFirstSigma() {
 | 
			
		||||
		return firstSigma;
 | 
			
		||||
	public double getFirstSigma(Population pop) {
 | 
			
		||||
		return ((CMAParamSet)pop.getData(cmaParamsKey)).firstSigma;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void hideHideable() {
 | 
			
		||||
@@ -586,12 +742,13 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
	 * @param tolX
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
	public boolean testAllDistBelow(double tolX) {
 | 
			
		||||
	public boolean testAllDistBelow(Population pop, double tolX) {
 | 
			
		||||
//		if all(sigma*(max(abs(pc), sqrt(diag(C)))) < stopTolX) 
 | 
			
		||||
		boolean res = true;
 | 
			
		||||
		CMAParamSet params = (CMAParamSet)pop.getData(cmaParamsKey);
 | 
			
		||||
		int i=0;
 | 
			
		||||
		while (res && i<dim) {
 | 
			
		||||
			res = res && (getSigma(i)*Math.max(Math.abs(pathC[i]), Math.sqrt(mC.get(i,i))) < tolX);
 | 
			
		||||
		while (res && i<params.meanX.length) {
 | 
			
		||||
			res = res && (getSigma(params, i)*Math.max(Math.abs(params.pathC[i]), Math.sqrt(params.mC.get(i,i))) < tolX);
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (TRACE_TEST) if (res) System.out.println("testAllDistBelow hit");
 | 
			
		||||
@@ -604,19 +761,20 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
	 * @param gen
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
	public boolean testNoChangeAddingDevAxis(double d, int gen) {
 | 
			
		||||
	public boolean testNoChangeAddingDevAxis(Population pop, double d, int gen) {
 | 
			
		||||
//		  if all(xmean == xmean + 0.1*sigma*BD(:,1+floor(mod(countiter,N))))
 | 
			
		||||
//	    i = 1+floor(mod(countiter,N));
 | 
			
		||||
//		stopflag(end+1) = {'warnnoeffectaxis'};
 | 
			
		||||
		
 | 
			
		||||
		CMAParamSet params = (CMAParamSet)pop.getData(cmaParamsKey);
 | 
			
		||||
		int dim=params.meanX.length;
 | 
			
		||||
		int k = gen%dim;
 | 
			
		||||
		double[] ev_k = mB.getColumn(k);
 | 
			
		||||
		Mathematics.svMult(Math.sqrt(eigenvalues[k]), ev_k, ev_k); // this is now e_k*v_k = BD(:,...)
 | 
			
		||||
		double[] ev_k = params.mB.getColumn(k);
 | 
			
		||||
		Mathematics.svMult(Math.sqrt(params.eigenvalues[k]), ev_k, ev_k); // this is now e_k*v_k = BD(:,...)
 | 
			
		||||
		
 | 
			
		||||
		int i=0;
 | 
			
		||||
		boolean res = true;
 | 
			
		||||
		while (res && (i<dim)) {
 | 
			
		||||
			res = res && (meanX[i] == (meanX[i] + d*getSigma(i)*ev_k[i]));
 | 
			
		||||
			res = res && (params.meanX[i] == (params.meanX[i] + d*getSigma(params, i)*ev_k[i]));
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (TRACE_TEST) if (res) System.out.println("testNoChangeAddingDevAxis hit");
 | 
			
		||||
@@ -628,13 +786,14 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
	 * @param d
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
	public boolean testNoEffectCoord(double d) {
 | 
			
		||||
	public boolean testNoEffectCoord(Population pop, double d) {
 | 
			
		||||
//		if any(xmean == xmean + 0.2*sigma*sqrt(diag(C))) 
 | 
			
		||||
//		stopflag(end+1) = {'warnnoeffectcoord'};
 | 
			
		||||
		boolean ret = false;
 | 
			
		||||
		CMAParamSet params = (CMAParamSet)pop.getData(cmaParamsKey);
 | 
			
		||||
		int i=0;
 | 
			
		||||
		while ((i<dim) && !ret) {
 | 
			
		||||
			ret = ret || (meanX[i]==(meanX[i] + d*getSigma(i)*Math.sqrt(mC.get(i, i))));
 | 
			
		||||
		while ((i<params.meanX.length) && !ret) {
 | 
			
		||||
			ret = ret || (params.meanX[i]==(params.meanX[i] + d*getSigma(params, i)*Math.sqrt(params.mC.get(i, i))));
 | 
			
		||||
			i++;
 | 
			
		||||
		}
 | 
			
		||||
		if (TRACE_TEST) if (ret) System.out.println("testNoEffectCoord hit");
 | 
			
		||||
@@ -648,10 +807,11 @@ public class MutateESRankMuCMA implements InterfaceMutationGenerational, Seriali
 | 
			
		||||
	 * @param d
 | 
			
		||||
	 * @return true, if a diagonal entry is <= 0 or >= d, else false
 | 
			
		||||
	 */
 | 
			
		||||
	public boolean testCCondition(double d) {
 | 
			
		||||
	public boolean testCCondition(Population pop, double d) {
 | 
			
		||||
//	    if (min(diag(D)) <= 0) || (max(diag(D)) > 1e14*min(diag(D))) 
 | 
			
		||||
//		  stopflag(end+1) = {'warnconditioncov'};
 | 
			
		||||
		Pair<Double,Double> minMax = mC.getMinMaxDiag();
 | 
			
		||||
		CMAParamSet params = (CMAParamSet)pop.getData(cmaParamsKey);
 | 
			
		||||
		Pair<Double,Double> minMax = params.mC.getMinMaxDiag();
 | 
			
		||||
		if ((minMax.head <= 0) || (minMax.tail >= d)) {		
 | 
			
		||||
			if (TRACE_TEST) System.out.println("testCCondition hit");
 | 
			
		||||
			return true;
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,9 @@ package eva2.server.go.populations;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.PriorityQueue;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
@@ -39,13 +41,16 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
 | 
			
		||||
    protected Population    m_Archive       = null;
 | 
			
		||||
 | 
			
		||||
    transient private ArrayList<AbstractEAIndividual> sortedArr = null;
 | 
			
		||||
    transient protected InterfacePopulationChangedEventListener	m_Listener = null;
 | 
			
		||||
    transient private ArrayList<InterfacePopulationChangedEventListener> listeners = null;
 | 
			
		||||
//    transient protected InterfacePopulationChangedEventListener	m_Listener = null;
 | 
			
		||||
 | 
			
		||||
    // the evaluation interval at which listeners are notified
 | 
			
		||||
    protected int 			notifyEvalInterval	= 0;
 | 
			
		||||
    protected HashMap<String, Object>		additionalPopData = null;
 | 
			
		||||
    
 | 
			
		||||
    public static String funCallIntervalReached = "FunCallIntervalReached";
 | 
			
		||||
    public static final String funCallIntervalReached = "FunCallIntervalReached";
 | 
			
		||||
    public static final String populationInitialized = "PopulationReinitOccured";
 | 
			
		||||
    public static final String nextGenerationPerformed = "NextGenerationPerformed";
 | 
			
		||||
    
 | 
			
		||||
    boolean useHistory						= false;
 | 
			
		||||
    public ArrayList<AbstractEAIndividual>  m_History       = new ArrayList<AbstractEAIndividual>();
 | 
			
		||||
@@ -95,7 +100,9 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
 | 
			
		||||
        this.m_Size             = population.m_Size;
 | 
			
		||||
        this.useHistory 		= population.useHistory;
 | 
			
		||||
        this.notifyEvalInterval = population.notifyEvalInterval;
 | 
			
		||||
        this.m_Listener			= population.m_Listener;
 | 
			
		||||
//        this.m_Listener			= population.m_Listener;
 | 
			
		||||
        if (population.listeners != null) this.listeners			= (ArrayList<InterfacePopulationChangedEventListener>)population.listeners.clone();
 | 
			
		||||
        else listeners = null;
 | 
			
		||||
        if (population.additionalPopData != null) {
 | 
			
		||||
        	additionalPopData = new HashMap<String, Object>();
 | 
			
		||||
        	Set<String> keys = additionalPopData.keySet();
 | 
			
		||||
@@ -105,7 +112,7 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void addData(String key, Object value) {
 | 
			
		||||
    public void putData(String key, Object value) {
 | 
			
		||||
    	if (additionalPopData == null) additionalPopData = new HashMap<String, Object>();
 | 
			
		||||
    	additionalPopData.put(key, value);
 | 
			
		||||
    }
 | 
			
		||||
@@ -115,6 +122,11 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
 | 
			
		||||
    	else return additionalPopData.get(key);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public boolean hasData(String key) {
 | 
			
		||||
    	if (additionalPopData != null) return (additionalPopData.get(key)!=null);
 | 
			
		||||
    	else return false;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public Object clone() {
 | 
			
		||||
        return (Object) new Population(this);
 | 
			
		||||
    }
 | 
			
		||||
@@ -130,6 +142,7 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
 | 
			
		||||
    	Population res = new Population();
 | 
			
		||||
    	res.setSameParams(this);
 | 
			
		||||
    	res.copyHistAndArchive(this);
 | 
			
		||||
    	if (additionalPopData!=null) res.additionalPopData = (HashMap<String, Object>)(additionalPopData.clone());
 | 
			
		||||
    	return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -147,6 +160,7 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
 | 
			
		||||
            this.m_Archive.clear();
 | 
			
		||||
            this.m_Archive.init();
 | 
			
		||||
        }
 | 
			
		||||
        firePropertyChangedEvent(Population.populationInitialized);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method inits the population. Function and generation counters
 | 
			
		||||
@@ -215,11 +229,16 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
 | 
			
		||||
    /** Something has changed
 | 
			
		||||
     */
 | 
			
		||||
    protected void firePropertyChangedEvent(String name) {
 | 
			
		||||
        if (this.m_Listener != null) this.m_Listener.registerPopulationStateChanged(this, name);
 | 
			
		||||
        if (listeners != null) {
 | 
			
		||||
        	for (Iterator iterator = listeners.iterator(); iterator.hasNext();) {
 | 
			
		||||
				InterfacePopulationChangedEventListener listener = (InterfacePopulationChangedEventListener) iterator.next();
 | 
			
		||||
				listener.registerPopulationStateChanged(this, name);
 | 
			
		||||
			}
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    private boolean doEvalNotify() {
 | 
			
		||||
    	return ((this.m_Listener != null) && (notifyEvalInterval > 0));
 | 
			
		||||
    	return ((listeners != null) && (listeners.size() > 0) && (notifyEvalInterval > 0));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /** This method return the current number of function calls performed.
 | 
			
		||||
@@ -260,7 +279,7 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
 | 
			
		||||
        if (useHistory && (this.size() >= 1)) this.m_History.add(this.getBestEAIndividual());
 | 
			
		||||
        for (int i=0; i<size(); i++) ((AbstractEAIndividual)get(i)).incrAge(); 
 | 
			
		||||
        this.m_Generation++;
 | 
			
		||||
        firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        firePropertyChangedEvent(nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method returns the current generation.
 | 
			
		||||
@@ -281,7 +300,16 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
 | 
			
		||||
     * @param ea
 | 
			
		||||
     */
 | 
			
		||||
    public void addPopulationChangedEventListener(InterfacePopulationChangedEventListener ea) {
 | 
			
		||||
        this.m_Listener = ea;
 | 
			
		||||
    	if (listeners == null) listeners = new ArrayList<InterfacePopulationChangedEventListener>(3);
 | 
			
		||||
    	if (!listeners.contains(ea)) {
 | 
			
		||||
    		listeners.add(ea);
 | 
			
		||||
    	}
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public void removePopulationChangedEventListener(InterfacePopulationChangedEventListener ea) {
 | 
			
		||||
    	if (listeners != null) {
 | 
			
		||||
    		listeners.remove(ea);
 | 
			
		||||
    	}
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /** This method allows you to add a complete population to the current population.
 | 
			
		||||
@@ -350,12 +378,13 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
 | 
			
		||||
	
 | 
			
		||||
	/** 
 | 
			
		||||
	 * This method will return the index of the current best individual from the
 | 
			
		||||
     * population.
 | 
			
		||||
     * population. If the population is empty, -1 is returned.
 | 
			
		||||
     * 
 | 
			
		||||
     * @see getIndexOfBestOrWorstIndividual()
 | 
			
		||||
     * @return The index of the best individual.
 | 
			
		||||
     */
 | 
			
		||||
    public int getIndexOfBestIndividual() {
 | 
			
		||||
    	if (size()<1) return -1;
 | 
			
		||||
    	return getIndexOfBestOrWorstIndividual(true, true);
 | 
			
		||||
    }
 | 
			
		||||
	
 | 
			
		||||
@@ -422,15 +451,23 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method returns the current best individual from the population
 | 
			
		||||
    /** 
 | 
			
		||||
	 * This method returns the current best individual from the population.
 | 
			
		||||
	 * If the population is empty, null is returned.
 | 
			
		||||
	 *
 | 
			
		||||
     * @return The best individual
 | 
			
		||||
     */
 | 
			
		||||
    public AbstractEAIndividual getBestEAIndividual() {
 | 
			
		||||
    	if (size()<1) return null;
 | 
			
		||||
        int best = this.getIndexOfBestIndividual();
 | 
			
		||||
        if (best == -1) System.err.println("This shouldnt happen!");;
 | 
			
		||||
        AbstractEAIndividual result = (AbstractEAIndividual)this.get(best);
 | 
			
		||||
        if (result == null) System.err.println("Serious Problem! Population Size: " + this.size());
 | 
			
		||||
        return result;
 | 
			
		||||
        if (best == -1) {
 | 
			
		||||
        	System.err.println("This shouldnt happen!");
 | 
			
		||||
        	return null;
 | 
			
		||||
        } else {
 | 
			
		||||
        	AbstractEAIndividual result = (AbstractEAIndividual)this.get(best);
 | 
			
		||||
        	if (result == null) System.err.println("Serious Problem! Population Size: " + this.size());
 | 
			
		||||
        	return result;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** 
 | 
			
		||||
@@ -796,7 +833,7 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
 | 
			
		||||
    public boolean add(IndividualInterface o) {
 | 
			
		||||
    	return addIndividual((IndividualInterface)o);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
	 * ArrayList does not increase the modCount in set. Why???
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -51,22 +51,14 @@ public abstract class AbstractOptimizationProblem implements InterfaceOptimizati
 | 
			
		||||
     */
 | 
			
		||||
    public void evaluate(Population population) {
 | 
			
		||||
        AbstractEAIndividual    tmpIndy;
 | 
			
		||||
 | 
			
		||||
//        if (population.isEvaluated()) {
 | 
			
		||||
//        	System.err.println("Population evaluation seems not required!");
 | 
			
		||||
//        } else {
 | 
			
		||||
	        // @todo This is the position to implement a granular
 | 
			
		||||
	        // @todo paralleliziation scheme
 | 
			
		||||
	        evaluatePopulationStart(population);
 | 
			
		||||
	        for (int i = 0; i < population.size(); i++) {
 | 
			
		||||
	            tmpIndy = (AbstractEAIndividual) population.get(i);
 | 
			
		||||
	            tmpIndy.resetConstraintViolation();
 | 
			
		||||
	            this.evaluate(tmpIndy);
 | 
			
		||||
	            population.incrFunctionCalls();
 | 
			
		||||
	        }
 | 
			
		||||
	        evaluatePopulationEnd(population);
 | 
			
		||||
//	        population.setEvaluated();
 | 
			
		||||
//        }
 | 
			
		||||
        evaluatePopulationStart(population);
 | 
			
		||||
        for (int i = 0; i < population.size(); i++) {
 | 
			
		||||
        	tmpIndy = (AbstractEAIndividual) population.get(i);
 | 
			
		||||
        	tmpIndy.resetConstraintViolation();
 | 
			
		||||
        	this.evaluate(tmpIndy);
 | 
			
		||||
        	population.incrFunctionCalls();
 | 
			
		||||
        }
 | 
			
		||||
        evaluatePopulationEnd(population);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
@@ -103,20 +95,6 @@ public abstract class AbstractOptimizationProblem implements InterfaceOptimizati
 | 
			
		||||
    	return AbstractEAIndividual.getDefaultStringRepresentation(individual);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method returns a single line representation of the solution
 | 
			
		||||
     * @param individual  The individual
 | 
			
		||||
     * @return The string
 | 
			
		||||
     */
 | 
			
		||||
//    public String getSolutionDataFor(IndividualInterface individual) {
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
//    /** This method returns a string describing the optimization problem.
 | 
			
		||||
//     * @return The description.
 | 
			
		||||
//     */
 | 
			
		||||
//    public String getStringRepresentationF() {
 | 
			
		||||
//        return "AbstractOptimizationProblem: programmer failed to give further details";
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
    /** This method returns a double value that will be displayed in a fitness
 | 
			
		||||
     * plot. A fitness that is to be minimized with a global min of zero
 | 
			
		||||
     * would be best, since log y can be used. But the value can depend on the problem.
 | 
			
		||||
@@ -152,7 +130,9 @@ public abstract class AbstractOptimizationProblem implements InterfaceOptimizati
 | 
			
		||||
        result.setLayout(new BorderLayout());
 | 
			
		||||
        JTextArea   area    = new JTextArea();
 | 
			
		||||
        JScrollPane scroll  = new JScrollPane(area);
 | 
			
		||||
        area.setText("Best Solution:\n"+this.getSolutionRepresentationFor(indy));
 | 
			
		||||
        String text = "Best Solution:\n"+this.getSolutionRepresentationFor(indy);
 | 
			
		||||
        area.setLineWrap(true);
 | 
			
		||||
        area.setText(text);
 | 
			
		||||
        area.setEditable(false);
 | 
			
		||||
        result.add(scroll, BorderLayout.CENTER);
 | 
			
		||||
        return result;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,10 @@
 | 
			
		||||
package eva2.server.go.problems;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import javax.swing.*;
 | 
			
		||||
 | 
			
		||||
import eva2.server.go.individuals.AbstractEAIndividual;
 | 
			
		||||
import eva2.server.go.populations.Population;
 | 
			
		||||
import eva2.server.go.strategies.InterfaceOptimizer;
 | 
			
		||||
import eva2.server.stat.InterfaceStatistics;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created by IntelliJ IDEA.
 | 
			
		||||
@@ -51,15 +48,6 @@ public interface InterfaceOptimizationProblem extends InterfaceAdditionalPopulat
 | 
			
		||||
     */
 | 
			
		||||
    public void evaluate(AbstractEAIndividual individual);
 | 
			
		||||
 | 
			
		||||
//	DEPRECATED, use PhenotypeMetric    
 | 
			
		||||
//** This method should be used to calculate the distance between two
 | 
			
		||||
//     * individuals
 | 
			
		||||
//     * @param indy1     The first individual.
 | 
			
		||||
//     * @param indy2     The second individual.
 | 
			
		||||
//     * @return The distance.
 | 
			
		||||
//     */
 | 
			
		||||
//    public double distanceBetween(AbstractEAIndividual indy1, AbstractEAIndividual indy2);
 | 
			
		||||
 | 
			
		||||
    /******************** Some output methods *******************************************/
 | 
			
		||||
 | 
			
		||||
    /** This method allows the CommonJavaObjectEditorPanel to read the
 | 
			
		||||
 
 | 
			
		||||
@@ -73,7 +73,7 @@ public class CHCAdaptiveSearchAlgorithm implements InterfaceOptimizer, java.io.S
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.evaluatePopulation(this.m_Population);
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method will init the optimizer with a given population
 | 
			
		||||
@@ -92,7 +92,7 @@ public class CHCAdaptiveSearchAlgorithm implements InterfaceOptimizer, java.io.S
 | 
			
		||||
 | 
			
		||||
        if (reset) {
 | 
			
		||||
        	this.evaluatePopulation(this.m_Population);
 | 
			
		||||
            this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
            this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -212,7 +212,7 @@ public class CHCAdaptiveSearchAlgorithm implements InterfaceOptimizer, java.io.S
 | 
			
		||||
            nextGeneration.addPopulation(tmp);
 | 
			
		||||
            this.m_Population = nextGeneration;
 | 
			
		||||
        }
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method allows you to add the LectureGUI as listener to the Optimizer
 | 
			
		||||
 
 | 
			
		||||
@@ -614,7 +614,7 @@ public class ClusterBasedNichingEA implements InterfacePopulationChangedEventLis
 | 
			
		||||
//        		System.out.println("species distract best towards " + BeanInspector.toString(distVect));
 | 
			
		||||
//        	}
 | 
			
		||||
//        }
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -113,7 +113,7 @@ public class ClusteringHillClimbing implements InterfacePopulationChangedEventLi
 | 
			
		||||
        this.m_Problem.initPopulation(this.m_Population);
 | 
			
		||||
        m_Population.addPopulationChangedEventListener(null); // noone will be notified directly on pop changes
 | 
			
		||||
        this.m_Problem.evaluate(this.m_Population);
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method will init the optimizer with a given population
 | 
			
		||||
@@ -127,7 +127,7 @@ public class ClusteringHillClimbing implements InterfacePopulationChangedEventLi
 | 
			
		||||
        if (reset) {
 | 
			
		||||
        	this.m_Population.init();
 | 
			
		||||
            this.m_Problem.evaluate(this.m_Population);
 | 
			
		||||
            this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
            this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -176,7 +176,7 @@ public class ClusteringHillClimbing implements InterfacePopulationChangedEventLi
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
//		System.out.println("funcalls: " + evalCnt);
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -189,7 +189,7 @@ public class ClusteringHillClimbing implements InterfacePopulationChangedEventLi
 | 
			
		||||
			// set funcalls to real value
 | 
			
		||||
			m_Population.SetFunctionCalls(((Population)source).getFunctionCalls());
 | 
			
		||||
//			System.out.println("FunCallIntervalReached at " + (((Population)source).getFunctionCalls()));
 | 
			
		||||
			this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
			this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
		} 
 | 
			
		||||
		// do not react to NextGenerationPerformed
 | 
			
		||||
		//else System.err.println("ERROR, event was " + name);
 | 
			
		||||
 
 | 
			
		||||
@@ -78,7 +78,7 @@ public class DifferentialEvolution implements InterfaceOptimizer, java.io.Serial
 | 
			
		||||
        this.m_Problem.initPopulation(this.m_Population);
 | 
			
		||||
//        children = new Population(m_Population.size());
 | 
			
		||||
        this.evaluatePopulation(this.m_Population);
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void hideHideable() {
 | 
			
		||||
@@ -94,7 +94,7 @@ public class DifferentialEvolution implements InterfaceOptimizer, java.io.Serial
 | 
			
		||||
        if (reset) {
 | 
			
		||||
        	this.m_Population.init();
 | 
			
		||||
            this.evaluatePopulation(this.m_Population);
 | 
			
		||||
            this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
            this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        }
 | 
			
		||||
//        if (reset) this.m_Population.init();
 | 
			
		||||
//        else children = new Population(m_Population.size());
 | 
			
		||||
@@ -413,7 +413,7 @@ public class DifferentialEvolution implements InterfaceOptimizer, java.io.Serial
 | 
			
		||||
//        }
 | 
			
		||||
        m_Problem.evaluatePopulationEnd(m_Population);
 | 
			
		||||
        this.m_Population.incrGeneration();
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -375,7 +375,7 @@ public class DynamicParticleSwarmOptimization extends ParticleSwarmOptimization
 | 
			
		||||
			for (int i = 0; i < this.m_Population.size(); i++) {
 | 
			
		||||
				AbstractEAIndividual indy = (AbstractEAIndividual)m_Population.get(i);
 | 
			
		||||
		    	if (i>=quantumCount) {
 | 
			
		||||
		    		indy.SetData(partTypeKey, quantumType);
 | 
			
		||||
		    		indy.putData(partTypeKey, quantumType);
 | 
			
		||||
		    		quantumCount += 1./quantumRatio;
 | 
			
		||||
		    	}
 | 
			
		||||
			}
 | 
			
		||||
@@ -437,8 +437,8 @@ public class DynamicParticleSwarmOptimization extends ParticleSwarmOptimization
 | 
			
		||||
	    // log the best individual of the population
 | 
			
		||||
	    if (envHasChanged || (this.m_Population.getBestEAIndividual().isDominatingDebConstraints(this.m_BestIndividual))) {
 | 
			
		||||
	        this.m_BestIndividual = (AbstractEAIndividual)this.m_Population.getBestEAIndividual().clone();
 | 
			
		||||
	        this.m_BestIndividual.SetData(partBestFitKey, this.m_BestIndividual.getFitness());
 | 
			
		||||
	        this.m_BestIndividual.SetData(partBestPosKey, ((InterfaceDataTypeDouble)this.m_BestIndividual).getDoubleData());
 | 
			
		||||
	        this.m_BestIndividual.putData(partBestFitKey, this.m_BestIndividual.getFitness());
 | 
			
		||||
	        this.m_BestIndividual.putData(partBestPosKey, ((InterfaceDataTypeDouble)this.m_BestIndividual).getDoubleData());
 | 
			
		||||
	        //System.out.println("-- best ind set to " + ((InterfaceDataTypeDouble)this.m_BestIndividual).getDoubleData()[0] + "/" + ((InterfaceDataTypeDouble)this.m_BestIndividual).getDoubleData()[1]);
 | 
			
		||||
	    }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,7 @@ public class EvolutionStrategies implements InterfaceOptimizer, java.io.Serializ
 | 
			
		||||
 | 
			
		||||
    transient private String                m_Identifier = "";
 | 
			
		||||
    transient private InterfacePopulationChangedEventListener m_Listener;
 | 
			
		||||
    public static final String esMuParam = "EvolutionStrategyMuParameter";
 | 
			
		||||
 | 
			
		||||
    public EvolutionStrategies() {
 | 
			
		||||
        this.m_Population.setPopulationSize(this.m_Lambda);
 | 
			
		||||
@@ -97,10 +98,11 @@ public class EvolutionStrategies implements InterfaceOptimizer, java.io.Serializ
 | 
			
		||||
//        }
 | 
			
		||||
        //System.out.println("init");
 | 
			
		||||
    	checkPopulationConstraints();
 | 
			
		||||
    	m_Population.putData(esMuParam, getMu());
 | 
			
		||||
        this.m_Problem.initPopulation(this.m_Population);
 | 
			
		||||
        this.evaluatePopulation(this.m_Population);
 | 
			
		||||
//        this.m_Population.setPopulationSize(orgPopSize);
 | 
			
		||||
//        this.firePropertyChangedEvent("NextGenerationPerformed");// not necessary if incrGeneration is called
 | 
			
		||||
//        this.firePropertyChangedEvent(Population.nextGenerationPerformed);// not necessary if incrGeneration is called
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -115,7 +117,7 @@ public class EvolutionStrategies implements InterfaceOptimizer, java.io.Serializ
 | 
			
		||||
        if (reset) {
 | 
			
		||||
        	this.m_Population.init();
 | 
			
		||||
            this.evaluatePopulation(this.m_Population);
 | 
			
		||||
//            this.firePropertyChangedEvent("NextGenerationPerformed"); // not necessary if incrGeneration is called
 | 
			
		||||
//            this.firePropertyChangedEvent(Population.nextGenerationPerformed); // not necessary if incrGeneration is called
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -203,7 +205,7 @@ public class EvolutionStrategies implements InterfaceOptimizer, java.io.Serializ
 | 
			
		||||
//        System.out.println("Population size: " + this.m_Population.size());
 | 
			
		||||
//        System.out.println("-- Best Fitness " + this.m_Population.getBestFitness()[0]);
 | 
			
		||||
        
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed"); // necessary here because evalPop was not called on m_Population
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed); // necessary here because evalPop was not called on m_Population
 | 
			
		||||
    }        
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -91,7 +91,7 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf
 | 
			
		||||
//       
 | 
			
		||||
//        setPop(getReplacePop(nextGeneration));
 | 
			
		||||
//
 | 
			
		||||
//        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
//        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    	//////////////////////////
 | 
			
		||||
    	super.optimize();
 | 
			
		||||
    	
 | 
			
		||||
@@ -126,7 +126,7 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf
 | 
			
		||||
		bestList.add(best);
 | 
			
		||||
		best = null;
 | 
			
		||||
		Population newPop = getPopulation().cloneWithoutInds();
 | 
			
		||||
		getProblem().initPopulation(newPop);
 | 
			
		||||
		getProblem().initPopulation(newPop); // this is where the reinit event of Pop is called, meaning that the rank-mu-cma matrix is reinitialized as well
 | 
			
		||||
		double[] badFit = getPopulation().getBestFitness().clone();
 | 
			
		||||
		Arrays.fill(badFit, Double.MAX_VALUE);
 | 
			
		||||
		newPop.setAllFitnessValues(badFit);
 | 
			
		||||
@@ -137,7 +137,7 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf
 | 
			
		||||
    
 | 
			
		||||
    protected void firePropertyChangedEvent(String name) {
 | 
			
		||||
    	if (name.equals(Population.funCallIntervalReached)) {
 | 
			
		||||
    		super.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
    		super.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    	}
 | 
			
		||||
    	else {} // nothing, evt is produced in #registerPopulationStateChanged, dont forward original due to changing pop size
 | 
			
		||||
    }
 | 
			
		||||
@@ -196,16 +196,16 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf
 | 
			
		||||
			// stop if the std dev of the normal distribution is smaller than TolX in all coords 
 | 
			
		||||
			// and sigma p_c is smaller than TolX in all components; TolX = 10^-12 sigma_0
 | 
			
		||||
	
 | 
			
		||||
			if (rcmaMute.testAllDistBelow(10e-12*rcmaMute.getFirstSigma())) return true;
 | 
			
		||||
			if (rcmaMute.testAllDistBelow(pop, 10e-12*rcmaMute.getFirstSigma(pop))) return true;
 | 
			
		||||
			
 | 
			
		||||
			// stop if adding a 0.1 std dev vector in a principal axis dir. of C does not change <x>_w^g
 | 
			
		||||
			if (rcmaMute.testNoChangeAddingDevAxis(0.1, curGen)) return true;
 | 
			
		||||
			if (rcmaMute.testNoChangeAddingDevAxis(pop, 0.1, curGen)) return true;
 | 
			
		||||
			
 | 
			
		||||
			// stop if adding a 0.2 std dev in each coordinate does (not???) change <x>_w^g
 | 
			
		||||
			if (rcmaMute.testNoEffectCoord(0.2)) return true;
 | 
			
		||||
			if (rcmaMute.testNoEffectCoord(pop, 0.2)) return true;
 | 
			
		||||
	
 | 
			
		||||
			// stop if the condition number of C exceeds 10^14
 | 
			
		||||
			if (rcmaMute.testCCondition(10e14)) return true;		
 | 
			
		||||
			if (rcmaMute.testCCondition(pop, 10e14)) return true;		
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return false;
 | 
			
		||||
@@ -231,7 +231,7 @@ public class EvolutionStrategyIPOP extends EvolutionStrategies implements Interf
 | 
			
		||||
	public void registerPopulationStateChanged(Object source, String name) {
 | 
			
		||||
		if (name.equals(Population.funCallIntervalReached)) {
 | 
			
		||||
    		getPopulation().SetFunctionCalls(((Population)source).getFunctionCalls()); // TODO this is ugly
 | 
			
		||||
			super.firePropertyChangedEvent(name);
 | 
			
		||||
			super.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
		} else {
 | 
			
		||||
//			System.err.println("Not forwarding event " + name);
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -50,7 +50,7 @@ public class EvolutionaryProgramming implements InterfaceOptimizer, java.io.Seri
 | 
			
		||||
            this.m_Problem.initPopulation(this.m_Population);
 | 
			
		||||
            this.evaluatePopulation(this.m_Population);
 | 
			
		||||
            this.m_PopulationSize = this.m_Population.size();
 | 
			
		||||
            this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
            this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /** This method will init the optimizer with a given population
 | 
			
		||||
@@ -61,7 +61,7 @@ public class EvolutionaryProgramming implements InterfaceOptimizer, java.io.Seri
 | 
			
		||||
            if (reset) {
 | 
			
		||||
            	this.m_Population.init();
 | 
			
		||||
                this.evaluatePopulation(this.m_Population);
 | 
			
		||||
                this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
                this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -119,7 +119,7 @@ public class EvolutionaryProgramming implements InterfaceOptimizer, java.io.Seri
 | 
			
		||||
            nextGeneration.addPopulation(this.m_Population);
 | 
			
		||||
            this.m_Population = nextGeneration;
 | 
			
		||||
 | 
			
		||||
            this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
            this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    /** This method allows you to add the LectureGUI as listener to the Optimizer
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,7 @@ public class FloodAlgorithm implements InterfaceOptimizer, java.io.Serializable
 | 
			
		||||
        this.m_Problem.initPopulation(this.m_Population);
 | 
			
		||||
        this.m_Problem.evaluate(this.m_Population);
 | 
			
		||||
        this.m_CurrentFloodPeak = this.m_InitialFloodPeak;
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method will init the optimizer with a given population
 | 
			
		||||
@@ -70,7 +70,7 @@ public class FloodAlgorithm implements InterfaceOptimizer, java.io.Serializable
 | 
			
		||||
        if (reset) {
 | 
			
		||||
        	this.m_Population.init();
 | 
			
		||||
            this.m_Problem.evaluate(this.m_Population);
 | 
			
		||||
            this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
            this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        }
 | 
			
		||||
        this.m_CurrentFloodPeak = this.m_InitialFloodPeak;
 | 
			
		||||
    }
 | 
			
		||||
@@ -99,7 +99,7 @@ public class FloodAlgorithm implements InterfaceOptimizer, java.io.Serializable
 | 
			
		||||
        }
 | 
			
		||||
        this.m_CurrentFloodPeak = this.m_CurrentFloodPeak - this.m_DrainRate;
 | 
			
		||||
        this.m_Population.incrGeneration();
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method calculates the difference between the fitness values
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,7 @@ public class GeneticAlgorithm implements InterfaceOptimizer, java.io.Serializabl
 | 
			
		||||
        public void init() {
 | 
			
		||||
            this.m_Problem.initPopulation(this.m_Population);
 | 
			
		||||
            this.evaluatePopulation(this.m_Population);
 | 
			
		||||
            this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
            this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /** This method will init the optimizer with a given population
 | 
			
		||||
@@ -70,7 +70,7 @@ public class GeneticAlgorithm implements InterfaceOptimizer, java.io.Serializabl
 | 
			
		||||
            if (reset) {
 | 
			
		||||
            	this.m_Population.init();
 | 
			
		||||
                this.evaluatePopulation(this.m_Population);
 | 
			
		||||
                this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
                this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -162,7 +162,7 @@ public class GeneticAlgorithm implements InterfaceOptimizer, java.io.Serializabl
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
//        this.m_Population.incrGeneration();
 | 
			
		||||
            this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
            this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /** This method allows you to add the LectureGUI as listener to the Optimizer
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ public class GradientDescentAlgorithm implements InterfaceOptimizer, java.io.Ser
 | 
			
		||||
    if (reset) {
 | 
			
		||||
    	this.getPopulation().init();
 | 
			
		||||
        this.m_Problem.evaluate(this.getPopulation());
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
    //System.out.println("initByPopulation() called");
 | 
			
		||||
    indyhash = new Hashtable();
 | 
			
		||||
@@ -247,7 +247,7 @@ public class GradientDescentAlgorithm implements InterfaceOptimizer, java.io.Ser
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
    this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private double momentumweigth = 0.1;
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,7 @@ public class HillClimbing implements InterfaceOptimizer, java.io.Serializable {
 | 
			
		||||
    public void init() {
 | 
			
		||||
        this.m_Problem.initPopulation(this.m_Population);
 | 
			
		||||
        this.m_Problem.evaluate(this.m_Population);
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void initByPopulation(Population pop, boolean reset) {
 | 
			
		||||
@@ -63,7 +63,7 @@ public class HillClimbing implements InterfaceOptimizer, java.io.Serializable {
 | 
			
		||||
        if (reset) {
 | 
			
		||||
        	this.m_Population.init();
 | 
			
		||||
            this.m_Problem.evaluate(this.m_Population);
 | 
			
		||||
            this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
            this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -107,7 +107,7 @@ public class HillClimbing implements InterfaceOptimizer, java.io.Serializable {
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
//        this.m_Population.incrGeneration();
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public InterfaceMutation getMutationOperator() {
 | 
			
		||||
 
 | 
			
		||||
@@ -135,7 +135,7 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
 | 
			
		||||
            this.m_Population.addPopulation(pop);
 | 
			
		||||
            this.m_Population.incrFunctionCallsBy(pop.getFunctionCalls());
 | 
			
		||||
        }
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed", this.m_Optimizer.getPopulation());
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed, this.m_Optimizer.getPopulation());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method will init the optimizer with a given population
 | 
			
		||||
@@ -197,7 +197,7 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
 | 
			
		||||
            this.m_Population.addPopulation(pop);
 | 
			
		||||
            this.m_Population.incrFunctionCallsBy(pop.getFunctionCalls());
 | 
			
		||||
        }
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed", this.m_Optimizer.getPopulation());
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed, this.m_Optimizer.getPopulation());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** The optimize method will compute an 'improved' and evaluated population
 | 
			
		||||
@@ -252,7 +252,7 @@ public class IslandModelEA implements InterfacePopulationChangedEventListener, I
 | 
			
		||||
            this.m_Population.incrFunctionCallsBy(pop.getFunctionCalls());
 | 
			
		||||
        }
 | 
			
		||||
//        System.out.println("Fitnesscalls :" + this.m_Population.getFunctionCalls());
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed", this.m_Optimizer.getPopulation());
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed, this.m_Optimizer.getPopulation());
 | 
			
		||||
        double plotValue = (this.m_Problem.getDoublePlotValue(this.m_Population)).doubleValue();
 | 
			
		||||
        if (this.m_Show) this.m_Plot.setConnectedPoint(this.m_Population.getFunctionCalls(), plotValue, 0);
 | 
			
		||||
        // now they are synchronized
 | 
			
		||||
 
 | 
			
		||||
@@ -92,7 +92,7 @@ public class MemeticAlgorithm implements InterfaceOptimizer,
 | 
			
		||||
		if (reset) {
 | 
			
		||||
			this.getPopulation().init();
 | 
			
		||||
			this.m_Problem.evaluate(this.getPopulation());
 | 
			
		||||
			this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
			this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -101,7 +101,7 @@ public class MemeticAlgorithm implements InterfaceOptimizer,
 | 
			
		||||
		this.m_GlobalOptimizer.SetProblem(this.m_Problem);
 | 
			
		||||
		this.m_GlobalOptimizer.init();
 | 
			
		||||
		this.evaluatePopulation(this.m_GlobalOptimizer.getPopulation());
 | 
			
		||||
		this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
		this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
@@ -192,7 +192,7 @@ public class MemeticAlgorithm implements InterfaceOptimizer,
 | 
			
		||||
		if (TRACE)
 | 
			
		||||
		  System.out.println("function calls"
 | 
			
		||||
		      + this.m_GlobalOptimizer.getPopulation().getFunctionCalls());
 | 
			
		||||
		this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
		this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,7 @@ public class MonteCarloSearch implements InterfaceOptimizer, java.io.Serializabl
 | 
			
		||||
    public void init() {
 | 
			
		||||
        this.m_Problem.initPopulation(this.m_Population);
 | 
			
		||||
        this.m_Problem.evaluate(this.m_Population);
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method will init the optimizer with a given population
 | 
			
		||||
@@ -67,7 +67,7 @@ public class MonteCarloSearch implements InterfaceOptimizer, java.io.Serializabl
 | 
			
		||||
        if (reset) {
 | 
			
		||||
        	this.m_Population.init();
 | 
			
		||||
            this.m_Problem.evaluate(this.m_Population);
 | 
			
		||||
            this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
            this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -86,7 +86,7 @@ public class MonteCarloSearch implements InterfaceOptimizer, java.io.Serializabl
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        this.m_Population.incrGeneration();
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -76,7 +76,7 @@ public class MultiObjectiveEA implements InterfaceOptimizer, java.io.Serializabl
 | 
			
		||||
    public void init() {
 | 
			
		||||
        this.m_Optimizer.init();
 | 
			
		||||
        this.m_Archiver.addElementsToArchive(this.m_Optimizer.getPopulation());
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -87,7 +87,7 @@ public class MultiObjectiveEA implements InterfaceOptimizer, java.io.Serializabl
 | 
			
		||||
    public void initByPopulation(Population pop, boolean reset) {
 | 
			
		||||
        this.m_Optimizer.initByPopulation(pop, reset);
 | 
			
		||||
        this.m_Archiver.addElementsToArchive(this.m_Optimizer.getPopulation());
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** The optimize method will compute a 'improved' and evaluated population
 | 
			
		||||
@@ -127,7 +127,7 @@ public class MultiObjectiveEA implements InterfaceOptimizer, java.io.Serializabl
 | 
			
		||||
 | 
			
		||||
        System.gc();
 | 
			
		||||
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private double[][] showMay(Population pop) {
 | 
			
		||||
 
 | 
			
		||||
@@ -183,8 +183,8 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
 | 
			
		||||
		for (int j = 0; j < writeData.length; j++) {
 | 
			
		||||
			writeData[j]    = (writeData[j]/relSpeed)*this.m_InitialVelocity;
 | 
			
		||||
		}
 | 
			
		||||
		indy.SetData(partTypeKey, defaultType);
 | 
			
		||||
		indy.SetData(partVelKey, writeData);
 | 
			
		||||
		indy.putData(partTypeKey, defaultType);
 | 
			
		||||
		indy.putData(partVelKey, writeData);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
@@ -197,12 +197,12 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
 | 
			
		||||
		double[] tmpD        = indy.getFitness();
 | 
			
		||||
		double[] writeData   = new double[tmpD.length];
 | 
			
		||||
		System.arraycopy(tmpD, 0, writeData, 0, tmpD.length);
 | 
			
		||||
		indy.SetData(partBestFitKey, writeData);
 | 
			
		||||
		indy.putData(partBestFitKey, writeData);
 | 
			
		||||
		// init best position
 | 
			
		||||
		tmpD        = ((InterfaceDataTypeDouble)indy).getDoubleData();
 | 
			
		||||
		writeData   = new double[tmpD.length];
 | 
			
		||||
		System.arraycopy(tmpD, 0, writeData, 0, tmpD.length);
 | 
			
		||||
		indy.SetData(partBestPosKey, writeData);
 | 
			
		||||
		indy.putData(partBestPosKey, writeData);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
@@ -380,7 +380,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
 | 
			
		||||
 | 
			
		||||
		this.m_BestIndividual = (AbstractEAIndividual)this.m_Population.getBestEAIndividual().clone();
 | 
			
		||||
 | 
			
		||||
		if (reset) this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
		if (reset) this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
		
 | 
			
		||||
		treeLevels = 0;
 | 
			
		||||
		// the HPSO tree will contain layers 0...HPSOLevels, the last one is "incomplete" with only HPSOOrphans number of nodes
 | 
			
		||||
@@ -405,7 +405,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
 | 
			
		||||
			if (indy instanceof InterfaceDataTypeDouble) {
 | 
			
		||||
				initIndividualDefaults(indy);
 | 
			
		||||
			}
 | 
			
		||||
			indy.SetData(indexKey, i);
 | 
			
		||||
			indy.putData(indexKey, i);
 | 
			
		||||
			indy.setIndividualIndex(i);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -473,7 +473,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
 | 
			
		||||
		if (indy instanceof InterfaceDataTypeDouble) {
 | 
			
		||||
			indy.setParents(null);
 | 
			
		||||
			indy.defaultInit();
 | 
			
		||||
			indy.SetData(partTypeKey, defaultType); // turn into default type
 | 
			
		||||
			indy.putData(partTypeKey, defaultType); // turn into default type
 | 
			
		||||
			initIndividualDefaults(indy);
 | 
			
		||||
			initIndividualMemory(indy);
 | 
			
		||||
			plotIndy(((InterfaceDataTypeDouble)indy).getDoubleData(), null, (Integer)indy.getData(indexKey));
 | 
			
		||||
@@ -506,7 +506,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
 | 
			
		||||
	protected void defaultIndividualUpdate(int index, AbstractEAIndividual indy, Population pop) {
 | 
			
		||||
		InterfaceDataTypeDouble endy = (InterfaceDataTypeDouble) indy;
 | 
			
		||||
		
 | 
			
		||||
		indy.SetData(partTypeKey, defaultType);
 | 
			
		||||
		indy.putData(partTypeKey, defaultType);
 | 
			
		||||
		// default update
 | 
			
		||||
		double[] personalBestPos   = (double[]) indy.getData(partBestPosKey);
 | 
			
		||||
		double[] velocity       = (double[]) indy.getData(partVelKey);
 | 
			
		||||
@@ -598,8 +598,8 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
 | 
			
		||||
	 * @param indy	the individual to update
 | 
			
		||||
	 */
 | 
			
		||||
	protected void updateIndProps(AbstractEAIndividual indy) {
 | 
			
		||||
		indy.SetData(partBestFitKey, indy.getFitness());
 | 
			
		||||
		indy.SetData(partBestPosKey, ((InterfaceDataTypeDouble)indy).getDoubleData());
 | 
			
		||||
		indy.putData(partBestFitKey, indy.getFitness());
 | 
			
		||||
		indy.putData(partBestPosKey, ((InterfaceDataTypeDouble)indy).getDoubleData());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
@@ -1025,7 +1025,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
 | 
			
		||||
			if (!m_CheckConstraints) System.err.println("warning, checkbounds will be forced by InterfaceESIndividual!");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		indy.SetData(partVelKey, curVelocity);
 | 
			
		||||
		indy.putData(partVelKey, curVelocity);
 | 
			
		||||
//		((InterfaceESIndividual) indy).SetDGenotype(newPosition);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1135,7 +1135,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
 | 
			
		||||
 | 
			
		||||
//		System.out.println(">>> " + m_Population.getBestEAIndividual().getStringRepresentation());
 | 
			
		||||
		
 | 
			
		||||
		this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
		this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
 | 
			
		||||
		if (sleepTime > 0 ) try { Thread.sleep(sleepTime); } catch(Exception e) {}
 | 
			
		||||
		
 | 
			
		||||
@@ -1176,8 +1176,8 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
 | 
			
		||||
	protected void logBestIndividual() {
 | 
			
		||||
		if (this.m_Population.getBestEAIndividual().isDominatingDebConstraints(this.m_BestIndividual)) {
 | 
			
		||||
			this.m_BestIndividual = (AbstractEAIndividual)this.m_Population.getBestEAIndividual().clone();
 | 
			
		||||
			this.m_BestIndividual.SetData(partBestFitKey, this.m_BestIndividual.getFitness());
 | 
			
		||||
			this.m_BestIndividual.SetData(partBestPosKey, ((InterfaceDataTypeDouble)this.m_BestIndividual).getDoubleData());
 | 
			
		||||
			this.m_BestIndividual.putData(partBestFitKey, this.m_BestIndividual.getFitness());
 | 
			
		||||
			this.m_BestIndividual.putData(partBestPosKey, ((InterfaceDataTypeDouble)this.m_BestIndividual).getDoubleData());
 | 
			
		||||
//			System.out.println("new best: "+m_BestIndividual.toString());
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -1224,7 +1224,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
 | 
			
		||||
		for (int i=0; i<pop.size(); i++) {
 | 
			
		||||
			// cross-link the sorted list for faster access
 | 
			
		||||
			origIndex = (Integer)((AbstractEAIndividual)sortedPopulation[i]).getData(indexKey);
 | 
			
		||||
			((AbstractEAIndividual)pop.get(origIndex)).SetData(sortedIndexKey, new Integer(i));
 | 
			
		||||
			((AbstractEAIndividual)pop.get(origIndex)).putData(sortedIndexKey, new Integer(i));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1260,22 +1260,22 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
 | 
			
		||||
						} else {
 | 
			
		||||
							found = true;
 | 
			
		||||
							// assign to leader, update swarm size
 | 
			
		||||
							((AbstractEAIndividual)sortedPop[cur]).SetData(multiSwTypeKey, leaders.get(i));
 | 
			
		||||
							((AbstractEAIndividual)sortedPop[cur]).SetData(multiSwSizeKey, new Integer(-1));
 | 
			
		||||
							leaders.get(i).SetData(multiSwSizeKey, 1+sSize);
 | 
			
		||||
							((AbstractEAIndividual)sortedPop[cur]).putData(multiSwTypeKey, leaders.get(i));
 | 
			
		||||
							((AbstractEAIndividual)sortedPop[cur]).putData(multiSwSizeKey, new Integer(-1));
 | 
			
		||||
							leaders.get(i).putData(multiSwSizeKey, 1+sSize);
 | 
			
		||||
							break;
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				if (!found) { // new leader is found
 | 
			
		||||
					leaders.add(((AbstractEAIndividual)sortedPop[cur]));
 | 
			
		||||
					((AbstractEAIndividual)sortedPop[cur]).SetData(multiSwTypeKey, sortedPop[cur]);
 | 
			
		||||
					((AbstractEAIndividual)sortedPop[cur]).SetData(multiSwSizeKey, new Integer(1));
 | 
			
		||||
					((AbstractEAIndividual)sortedPop[cur]).putData(multiSwTypeKey, sortedPop[cur]);
 | 
			
		||||
					((AbstractEAIndividual)sortedPop[cur]).putData(multiSwSizeKey, new Integer(1));
 | 
			
		||||
				} else if (superfluous) {
 | 
			
		||||
					//System.out.println("reinitializing " + cur);
 | 
			
		||||
					((AbstractEAIndividual)sortedPop[cur]).SetData(partTypeKey, resetType);
 | 
			
		||||
					((AbstractEAIndividual)sortedPop[cur]).SetData(multiSwTypeKey, sortedPop[cur]);
 | 
			
		||||
					((AbstractEAIndividual)sortedPop[cur]).SetData(multiSwSizeKey, new Integer(1));
 | 
			
		||||
					((AbstractEAIndividual)sortedPop[cur]).putData(partTypeKey, resetType);
 | 
			
		||||
					((AbstractEAIndividual)sortedPop[cur]).putData(multiSwTypeKey, sortedPop[cur]);
 | 
			
		||||
					((AbstractEAIndividual)sortedPop[cur]).putData(multiSwSizeKey, new Integer(1));
 | 
			
		||||
				}
 | 
			
		||||
				cur++;
 | 
			
		||||
			}
 | 
			
		||||
@@ -1432,7 +1432,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
 | 
			
		||||
			if (indy.hasData(partTypeKey)) {
 | 
			
		||||
				initIndividualDefaults(indy);
 | 
			
		||||
				initIndividualMemory(indy);
 | 
			
		||||
				indy.SetData(indexKey, i);
 | 
			
		||||
				indy.putData(indexKey, i);
 | 
			
		||||
				indy.setIndividualIndex(i);
 | 
			
		||||
				if (TRACE) System.err.println("init indy " + i + " " + AbstractEAIndividual.getDefaultDataString(indy));
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -60,7 +60,7 @@ public class PopulationBasedIncrementalLearning implements InterfaceOptimizer, j
 | 
			
		||||
    public void init() {
 | 
			
		||||
        this.m_Problem.initPopulation(this.m_Population);
 | 
			
		||||
        this.evaluatePopulation(this.m_Population);
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method will init the optimizer with a given population
 | 
			
		||||
@@ -78,7 +78,7 @@ public class PopulationBasedIncrementalLearning implements InterfaceOptimizer, j
 | 
			
		||||
            this.evaluatePopulation(this.m_Population);
 | 
			
		||||
        }
 | 
			
		||||
        ((PBILPopulation)this.m_Population).buildProbabilityVector();
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method will evaluate the current population using the
 | 
			
		||||
@@ -121,7 +121,7 @@ public class PopulationBasedIncrementalLearning implements InterfaceOptimizer, j
 | 
			
		||||
        } else {
 | 
			
		||||
            this.m_Population = nextGeneration;
 | 
			
		||||
        }
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method will set the problem that is to be optimized
 | 
			
		||||
 
 | 
			
		||||
@@ -58,7 +58,7 @@ public class SimulatedAnnealing implements InterfaceOptimizer, java.io.Serializa
 | 
			
		||||
        this.m_Problem.initPopulation(this.m_Population);
 | 
			
		||||
        this.m_Problem.evaluate(this.m_Population);
 | 
			
		||||
        this.m_CurrentTemperature = this.m_InitialTemperature;
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method will init the optimizer with a given population
 | 
			
		||||
@@ -71,7 +71,7 @@ public class SimulatedAnnealing implements InterfaceOptimizer, java.io.Serializa
 | 
			
		||||
        if (reset) {
 | 
			
		||||
        	this.m_Population.init();
 | 
			
		||||
            this.m_Problem.evaluate(this.m_Population);
 | 
			
		||||
            this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
            this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -105,7 +105,7 @@ public class SimulatedAnnealing implements InterfaceOptimizer, java.io.Serializa
 | 
			
		||||
        }
 | 
			
		||||
        this.m_CurrentTemperature = this.m_Alpha * this.m_CurrentTemperature;
 | 
			
		||||
        this.m_Population.incrGeneration();
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method calculates the difference between the fitness values
 | 
			
		||||
 
 | 
			
		||||
@@ -54,7 +54,7 @@ public class SteadyStateGA implements InterfaceOptimizer, java.io.Serializable {
 | 
			
		||||
        public void init() {
 | 
			
		||||
            this.m_Problem.initPopulation(this.m_Population);
 | 
			
		||||
            this.evaluatePopulation(this.m_Population);
 | 
			
		||||
            this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
            this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /** This method will init the optimizer with a given population
 | 
			
		||||
@@ -65,7 +65,7 @@ public class SteadyStateGA implements InterfaceOptimizer, java.io.Serializable {
 | 
			
		||||
            if (reset) {
 | 
			
		||||
            	this.m_Population.init();
 | 
			
		||||
                this.evaluatePopulation(this.m_Population);
 | 
			
		||||
                this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
                this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -111,7 +111,7 @@ public class SteadyStateGA implements InterfaceOptimizer, java.io.Serializable {
 | 
			
		||||
            for (int i = 0; i < this.m_Population.size(); i++) this.generateChildren();
 | 
			
		||||
            this.m_Population.incrFunctionCallsBy(this.m_Population.size());
 | 
			
		||||
            this.m_Population.incrGeneration();
 | 
			
		||||
            this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
            this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /** This method allows you to add the LectureGUI as listener to the Optimizer
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ public class ThresholdAlgorithm implements InterfaceOptimizer, java.io.Serializa
 | 
			
		||||
        this.m_Problem.initPopulation(this.m_Population);
 | 
			
		||||
        this.m_Problem.evaluate(this.m_Population);
 | 
			
		||||
        this.m_CurrentT = this.m_InitialT;
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method will init the optimizer with a given population
 | 
			
		||||
@@ -69,7 +69,7 @@ public class ThresholdAlgorithm implements InterfaceOptimizer, java.io.Serializa
 | 
			
		||||
        if (reset) {
 | 
			
		||||
        	this.m_Population.init();
 | 
			
		||||
            this.m_Problem.evaluate(this.m_Population);
 | 
			
		||||
            this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
            this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -97,7 +97,7 @@ public class ThresholdAlgorithm implements InterfaceOptimizer, java.io.Serializa
 | 
			
		||||
        }
 | 
			
		||||
        this.m_CurrentT = this.m_Alpha * this.m_CurrentT;
 | 
			
		||||
        this.m_Population.incrGeneration();
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method calculates the difference between the fitness values
 | 
			
		||||
 
 | 
			
		||||
@@ -736,7 +736,7 @@ public class Tribes implements InterfaceOptimizer, java.io.Serializable {
 | 
			
		||||
		population.incrFunctionCalls();
 | 
			
		||||
		if (notifyAfter(population.getFunctionCalls())) {
 | 
			
		||||
//			System.out.println("Notifying after " + population.getFunctionCalls());
 | 
			
		||||
			firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
			firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -92,7 +92,7 @@ public class WingedMultiObjectiveEA implements InterfaceOptimizer, java.io.Seria
 | 
			
		||||
            this.m_SOOptimizer.init();
 | 
			
		||||
        }
 | 
			
		||||
        this.communicate();
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -130,7 +130,7 @@ public class WingedMultiObjectiveEA implements InterfaceOptimizer, java.io.Seria
 | 
			
		||||
            this.m_SOOptimizer.initByPopulation(pop, reset);
 | 
			
		||||
        }
 | 
			
		||||
        this.communicate();
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** The optimize method will compute a 'improved' and evaluated population
 | 
			
		||||
@@ -148,7 +148,7 @@ public class WingedMultiObjectiveEA implements InterfaceOptimizer, java.io.Seria
 | 
			
		||||
 | 
			
		||||
        System.gc();
 | 
			
		||||
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method will manage comunication between the
 | 
			
		||||
@@ -171,7 +171,7 @@ public class WingedMultiObjectiveEA implements InterfaceOptimizer, java.io.Seria
 | 
			
		||||
        oldFunctionCalls = this.m_Population.getFunctionCalls();
 | 
			
		||||
        this.m_Problem.evaluate(this.m_Population);
 | 
			
		||||
        this.m_Population.SetFunctionCalls(oldFunctionCalls);
 | 
			
		||||
        this.firePropertyChangedEvent("NextGenerationPerformed");
 | 
			
		||||
        this.firePropertyChangedEvent(Population.nextGenerationPerformed);
 | 
			
		||||
        double plotValue = (this.m_Problem.getDoublePlotValue(this.m_Population)).doubleValue();
 | 
			
		||||
        // now they are synchronized lets migrate
 | 
			
		||||
        this.migrate();
 | 
			
		||||
 
 | 
			
		||||
@@ -16,12 +16,12 @@ import java.io.Serializable;
 | 
			
		||||
import java.net.InetAddress;
 | 
			
		||||
import java.util.Vector;
 | 
			
		||||
 | 
			
		||||
import eva2.gui.JTabbedModuleFrame;
 | 
			
		||||
import eva2.gui.LogPanel;
 | 
			
		||||
import eva2.server.go.InterfaceProcessor;
 | 
			
		||||
 | 
			
		||||
import wsi.ra.jproxy.MainAdapterClient;
 | 
			
		||||
import wsi.ra.jproxy.RemoteStateListener;
 | 
			
		||||
import eva2.gui.JTabbedModuleFrame;
 | 
			
		||||
import eva2.gui.LogPanel;
 | 
			
		||||
import eva2.server.go.InterfaceGOParameters;
 | 
			
		||||
import eva2.server.go.InterfaceProcessor;
 | 
			
		||||
/*==========================================================================*
 | 
			
		||||
* ABSTRACT CLASS DECLARATION
 | 
			
		||||
*==========================================================================*/
 | 
			
		||||
@@ -120,6 +120,12 @@ abstract public class AbstractModuleAdapter implements ModuleAdapter, Serializab
 | 
			
		||||
	  } else return false;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  public InterfaceGOParameters getGOParameters() {
 | 
			
		||||
	  if ((m_Processor != null) && (m_Processor instanceof Processor)) {
 | 
			
		||||
		  return ((Processor)m_Processor).getGOParams();
 | 
			
		||||
	  } else return null;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /**
 | 
			
		||||
   *
 | 
			
		||||
   */
 | 
			
		||||
 
 | 
			
		||||
@@ -29,6 +29,6 @@ public class GOModuleAdapter extends GenericModuleAdapter implements ModuleAdapt
 | 
			
		||||
   * @param Client	the client instance
 | 
			
		||||
   */
 | 
			
		||||
  public GOModuleAdapter(String adapterName, MainAdapterClient client) {
 | 
			
		||||
       super (adapterName, "GO.html", client, GOParameters.getInstance(), false);
 | 
			
		||||
       super (adapterName, "", client, GOParameters.getInstance(), false);
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
@@ -251,19 +251,21 @@ public class Processor extends Thread implements InterfaceProcessor, InterfacePo
 | 
			
		||||
     * @param name          Could be used to indicate the nature of the event.
 | 
			
		||||
     */
 | 
			
		||||
    public void registerPopulationStateChanged(Object source, String name) {
 | 
			
		||||
		m_Statistics.createNextGenerationPerformed(
 | 
			
		||||
				(PopulationInterface)this.goParams.getOptimizer().getPopulation(), 
 | 
			
		||||
				this.goParams.getProblem());
 | 
			
		||||
		if (m_ListenerModule != null) {
 | 
			
		||||
			m_ListenerModule.updateProgress(
 | 
			
		||||
					getStatusPercent(
 | 
			
		||||
							goParams.getOptimizer().getPopulation(), 
 | 
			
		||||
							runCounter,
 | 
			
		||||
							m_Statistics.getStatisticsParameter().getMultiRuns()), 
 | 
			
		||||
							null);
 | 
			
		||||
		}
 | 
			
		||||
    	if (name.equals(Population.nextGenerationPerformed)) {
 | 
			
		||||
    		m_Statistics.createNextGenerationPerformed(
 | 
			
		||||
    				(PopulationInterface)this.goParams.getOptimizer().getPopulation(), 
 | 
			
		||||
    				this.goParams.getProblem());
 | 
			
		||||
    		if (m_ListenerModule != null) {
 | 
			
		||||
    			m_ListenerModule.updateProgress(
 | 
			
		||||
    					getStatusPercent(
 | 
			
		||||
    							goParams.getOptimizer().getPopulation(), 
 | 
			
		||||
    							runCounter,
 | 
			
		||||
    							m_Statistics.getStatisticsParameter().getMultiRuns()), 
 | 
			
		||||
    							null);
 | 
			
		||||
    		}
 | 
			
		||||
    	}
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    /** This method writes Data to file.
 | 
			
		||||
     * @param line      The line that is to be added to the file
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user