FitnessFunction.java
/**
* @(#)FitnessFunction.java
* Copyright (C) 2008-2011 delhezi.com
*
* This class is released under the:
* GNU Lesser General Public License (LGPL) version 3 or later.
* http://www.gnu.org/copyleft/lesser.html
*/
package com.delhezi.ga.fitnessfunction;
import com.delhezi.ga.exception.GeneticAlgorithmException;
import com.delhezi.ga.fitnessfunction.drivers.IFitnessFunctionDriver;
import java.util.Arrays;
import java.util.List;
//import java.util.logging.Logger;
/**
* Klasa <code>FitnessFunction</code>: Funkcja celu.
* @version 1.0 2010-01-10
* @author <a href="mailto:wojciech.wolszczak@delhezi.com">
* Wojciech Wolszczak</a>
*/
public class FitnessFunction {
/** Logger object. */
//private static final Logger LOGGER =
// Logger.getLogger(FitnessFunction.class.getName());
/** Delhezi Error Code. */
//private static final String DERC = "1-3-1-";
/** Skrypt liczący wskażnik przystosowania. */
private IFitnessFunctionDriver driv;
/** Nazwa funkcji celu wewnątrz skryptu liczący wskaźnik
* przystosowania. */
private String functionName;
/**
* Parametr określający maksymalizację/maksymalizację funkcji celu.
* true - maksymalizacja funkcji celu (najlepszym jest osobnik o
* najwiekszej wartości wskaźnika przystosowania)
* false - minimalizacja funkcji celu (najlepszym jest osobnik o
* najmniejszej wartości wskaźnika przystosowania)
*/
private boolean maximisation = false;
/**
* Konstruktor.
* @param driv Interfejs pozwalający na dostęp do funkcji
* zaimplementowanych w plikach w katalogu /scripts/; Jeden interfejs jest
* dedykowany do obsługi pojedynczego pliku.
* @param functionName Nazwa funkcji dostarczonej w pakiecie engineDrive,
* w której zaimplementowano wyliczenie wskażnika przystosowania.
* @since 1.0
*/
public FitnessFunction(final IFitnessFunctionDriver driv,
final String functionName) {
this.driv = driv;
this.functionName = functionName;
}
/**
* Wyznaczenie wskażnika przystosowania.
* @param genes Tablica genów.
* @return double xxx
* @throws GeneticAlgorithmException xxx
* @since 1.0
*/
public final double calculateFitness(final Object[] genes)
throws GeneticAlgorithmException {
List genesList = Arrays.asList(genes);
return this.driv.invokeFunction(this.functionName, genesList);
}
/**
* Zwraca parametr określający maksymalizację/maksymalizację funkcji
* celu.
* @return true - maksymalizacja funkcji celu (najlepszym jest osobnik o
* najwiekszej wartości wskaźnika przystosowania)
* false - minimalizacja funkcji celu (najlepszym jest osobnik o
* najmniejszej wartości wskaźnika przystosowania)
*/
public final boolean isMaximisation() {
return maximisation;
}
/**
* Ustawia parametr określający maksymalizację/maksymalizację funkcji
* celu.
* @param maximisation true - maksymalizacja funkcji celu (najlepszym jest
* osobnik o najwiekszej wartości wskaźnika
* przystosowania)
* false - minimalizacja funkcji celu (najlepszym jest
* osobnik o najmniejszej wartości wskaźnika
* przystosowania)
*/
public final void setMaximisation(final boolean maximisation) {
this.maximisation = maximisation;
}
/**
* @return ScriptEngineDriver
*/
public final IFitnessFunctionDriver getScriptEngineDriver() {
return this.driv;
}
}