View Javadoc
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 }