]> Creatis software - CreaPhase.git/blobdiff - octave_packages/ga-0.10.0/__ga_scores__.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / ga-0.10.0 / __ga_scores__.m
diff --git a/octave_packages/ga-0.10.0/__ga_scores__.m b/octave_packages/ga-0.10.0/__ga_scores__.m
new file mode 100644 (file)
index 0000000..d865a65
--- /dev/null
@@ -0,0 +1,48 @@
+## Copyright (C) 2008, 2010 Luca Favatella <slackydeb@gmail.com>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; If not, see <http://www.gnu.org/licenses/>.
+
+## Author: Luca Favatella <slackydeb@gmail.com>
+## Version: 5.7
+
+function Scores = __ga_scores__ (problem, Population)
+  [nrP ncP] = size (Population);
+  switch problem.options.Vectorized
+    case "on" ## using vectorized evaluation
+      switch problem.options.UseParallel
+        case "always"
+          warning ("'Vectorized' option is 'on': ignoring 'UseParallel' option, even if it is 'always'");
+        case "never"
+          ## Nothing.
+        otherwise
+          warning ("'Vectorized' option is 'on': ignoring invalid 'UseParallel' option value (it should be 'always' or 'never')");
+      endswitch
+      Scores = (problem.fitnessfcn (Population))(1:nrP, 1);
+    case "off" ## not using vectorized evaluation
+      switch problem.options.UseParallel
+        case "always" ## using parallel evaluation
+          error ("TODO: implement parallel evaluation of objective function");
+        case "never" ## using serial evaluation (i.e. loop)
+          tmp = zeros (nrP, 1);
+          for index = 1:nrP
+            tmp(index, 1) = problem.fitnessfcn (Population(index, 1:ncP));
+          endfor
+          Scores = tmp(1:nrP, 1);
+        otherwise
+          error ("'UseParallel' option must be 'always' or 'never'");
+      endswitch
+    otherwise
+      error ("'Vectorized' option must be 'on' or 'off'");
+  endswitch
+endfunction