package nl.ru.ai.projects.parrot.ea2.server;
import java.io.IOException;
import nl.ru.ai.projects.parrot.ea2.LaurieEA;
import nl.ru.ai.projects.parrot.ea2.SjoerdEA;
import org.jgap.FitnessFunction;
import org.jgap.Gene;
import org.jgap.IChromosome;
import org.jgap.InvalidConfigurationException;
public static void main(String[] args) {
GAServerMain serverMain = new GAServerMain();
serverMain.run();
}
private TaskServer taskServer = new TaskServer();
private GeneticAlgorithm geneticAlgorithm = null;
private Thread gaThread = null;
private static final long serialVersionUID = 5936932791655827294L;
@Override
protected double evaluate(IChromosome c) {
TaskParameters taskParams = new TaskParameters();
Gene[] genes = c.getGenes();
for (int i = 0; i < genes.length; i++) {
taskParams.getMap().put("" + i, "" + genes[i].getAllele());
}
Task task = new Task(taskParams);
synchronized (task) {
taskServer.addTask(task);
try {
task.wait();
if (task.hasResult()) {
double result = 0;
String[] results = task.getResult().trim().split("\n");
for (String r : results) {
result += Double.parseDouble(r.trim());
}
return result / results.length;
} else {
System.err.println("Error! Server task has not computed a result!");
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
catch (NumberFormatException e) {
e.printStackTrace();
}
}
return 0;
}
}
@Override
GenomeFactory genFactory = new LaurieEA();
try {
taskServer.start();
geneticAlgorithm = new GeneticAlgorithm(new ServerTaskFitnessEvaluator(), genFactory);
gaThread = new Thread(geneticAlgorithm);
System.out.println("Server running!");
gaThread.run();
taskServer.stop();
} catch (InvalidConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}