Skip to content

Commit

Permalink
Add single objective optimization algorithm, add method for finding i…
Browse files Browse the repository at this point in the history
…deal point for given problem
  • Loading branch information
tomekster committed May 7, 2017
1 parent ea22097 commit 99fa89a
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 0 deletions.
45 changes: 45 additions & 0 deletions src/core/Problem.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,15 @@

import java.io.Serializable;

import core.algorithm.SingleObjectiveEA;
import core.points.Solution;
import operators.impl.crossover.SBX;
import operators.impl.mutation.PolynomialMutation;
import operators.impl.selection.BinaryTournament;
import problems.dtlz.DTLZ4;
import solutionRankers.ChebyshevRanker;
import utils.NSGAIIIRandom;
import utils.PythonVisualizer;

public abstract class Problem implements Serializable {
/**
Expand Down Expand Up @@ -59,6 +66,44 @@ public void evaluate(Population pop) {
evaluate(s);
}
}

public double[] findIdealPoint(){
double lambda[] = new double[numObjectives];
double idealPoint[] = new double[numObjectives];

for(int i=0; i<idealPoint.length; i++){
idealPoint[i] = Double.MAX_VALUE;
}

for(int optimizedDim=0; optimizedDim < numObjectives; optimizedDim++){
for(int i=0; i<lambda.length; i++){
lambda[i] = 0;
}
lambda[optimizedDim] = 1;
ChebyshevRanker cr = new ChebyshevRanker(lambda);
int numGenerations = 100;

SingleObjectiveEA so = new SingleObjectiveEA(
this,
new BinaryTournament(cr),
new SBX(1.0, 30.0, lowerBound, upperBound),
new PolynomialMutation(1.0 / numVariables, 20.0, lowerBound, upperBound),
cr,
90 //population size
);
for(int i=0; i < numGenerations; i++){
so.nextGeneration();
}
//Workaround for inner class error
final int dummyOptimizedDim = optimizedDim;
idealPoint[optimizedDim] = so.getPopulation().getSolutions().stream().mapToDouble(s -> s.getObjective(dummyOptimizedDim)).min().getAsDouble();

Population finalPop = so.getPopulation();
PythonVisualizer pv = new PythonVisualizer();
pv.visualise(getReferenceFront(), finalPop);
}
return idealPoint;
}

// TODO
public abstract void evaluateConstraints(Solution solution);
Expand Down
32 changes: 32 additions & 0 deletions src/core/algorithm/SingleObjectiveEA.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package core.algorithm;

import java.util.Comparator;

import core.Population;
import core.Problem;
import core.points.Solution;
import operators.CrossoverOperator;
import operators.MutationOperator;
import operators.SelectionOperator;
import solutionRankers.ChebyshevRanker;

public class SingleObjectiveEA extends EA{

protected Comparator <Solution> comp;
protected int popSize;
public SingleObjectiveEA(Problem problem, SelectionOperator selectionOperator, CrossoverOperator crossoverOperator,
MutationOperator mutationOperator, ChebyshevRanker cr, int popSize) {
super(problem, selectionOperator, crossoverOperator, mutationOperator);
this.popSize = popSize;
population = problem.createPopulation(popSize);
comp = cr;
}

@Override
protected Population selectNewPopulation(Population pop) {
pop.getSolutions().sort(comp);
Population res = new Population(pop.getSolutions().subList(0, popSize));
return res;
}

}

0 comments on commit 99fa89a

Please sign in to comment.