1 /**
2 * @(#)FitnessFunction.java
3 * Copyright (C) 2008-2011 delhezi.com
4 *
5 * This class is released under the:
6 * GNU Lesser General Public License (LGPL) version 3 or later.
7 * http://www.gnu.org/copyleft/lesser.html
8 */
9 package com.delhezi.ga.fitnessfunction;
10
11 import com.delhezi.ga.exception.GeneticAlgorithmException;
12 import com.delhezi.ga.fitnessfunction.drivers.IFitnessFunctionDriver;
13 import java.util.Arrays;
14 import java.util.List;
15 //import java.util.logging.Logger;
16
17 /**
18 * Klasa <code>FitnessFunction</code>: Funkcja celu.
19 * @version 1.0 2010-01-10
20 * @author <a href="mailto:wojciech.wolszczak@delhezi.com">
21 * Wojciech Wolszczak</a>
22 */
23 public class FitnessFunction {
24
25 /** Logger object. */
26 //private static final Logger LOGGER =
27 // Logger.getLogger(FitnessFunction.class.getName());
28
29 /** Delhezi Error Code. */
30 //private static final String DERC = "1-3-1-";
31
32 /** Skrypt liczący wskażnik przystosowania. */
33 private IFitnessFunctionDriver driv;
34 /** Nazwa funkcji celu wewnątrz skryptu liczący wskaźnik
35 * przystosowania. */
36 private String functionName;
37
38 /**
39 * Parametr określający maksymalizację/maksymalizację funkcji celu.
40 * true - maksymalizacja funkcji celu (najlepszym jest osobnik o
41 * najwiekszej wartości wskaźnika przystosowania)
42 * false - minimalizacja funkcji celu (najlepszym jest osobnik o
43 * najmniejszej wartości wskaźnika przystosowania)
44 */
45 private boolean maximisation = false;
46
47 /**
48 * Konstruktor.
49 * @param driv Interfejs pozwalający na dostęp do funkcji
50 * zaimplementowanych w plikach w katalogu /scripts/; Jeden interfejs jest
51 * dedykowany do obsługi pojedynczego pliku.
52 * @param functionName Nazwa funkcji dostarczonej w pakiecie engineDrive,
53 * w której zaimplementowano wyliczenie wskażnika przystosowania.
54 * @since 1.0
55 */
56 public FitnessFunction(final IFitnessFunctionDriver driv,
57 final String functionName) {
58 this.driv = driv;
59 this.functionName = functionName;
60 }
61
62 /**
63 * Wyznaczenie wskażnika przystosowania.
64 * @param genes Tablica genów.
65 * @return double xxx
66 * @throws GeneticAlgorithmException xxx
67 * @since 1.0
68 */
69 public final double calculateFitness(final Object[] genes)
70 throws GeneticAlgorithmException {
71 List genesList = Arrays.asList(genes);
72 return this.driv.invokeFunction(this.functionName, genesList);
73 }
74
75 /**
76 * Zwraca parametr określający maksymalizację/maksymalizację funkcji
77 * celu.
78 * @return true - maksymalizacja funkcji celu (najlepszym jest osobnik o
79 * najwiekszej wartości wskaźnika przystosowania)
80 * false - minimalizacja funkcji celu (najlepszym jest osobnik o
81 * najmniejszej wartości wskaźnika przystosowania)
82 */
83 public final boolean isMaximisation() {
84 return maximisation;
85 }
86
87 /**
88 * Ustawia parametr określający maksymalizację/maksymalizację funkcji
89 * celu.
90 * @param maximisation true - maksymalizacja funkcji celu (najlepszym jest
91 * osobnik o najwiekszej wartości wskaźnika
92 * przystosowania)
93 * false - minimalizacja funkcji celu (najlepszym jest
94 * osobnik o najmniejszej wartości wskaźnika
95 * przystosowania)
96 */
97 public final void setMaximisation(final boolean maximisation) {
98 this.maximisation = maximisation;
99 }
100
101 /**
102 * @return ScriptEngineDriver
103 */
104 public final IFitnessFunctionDriver getScriptEngineDriver() {
105 return this.driv;
106 }
107
108 }