Mercurial > forge
changeset 9850:2786ab9b8f5a octave-forge
ga: test optimization result
author | slackydeb |
---|---|
date | Sat, 24 Mar 2012 16:34:53 +0000 |
parents | bd71d3f1e0ba |
children | 15a262f133ae |
files | main/ga/inst/ga.m |
diffstat | 1 files changed, 66 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/main/ga/inst/ga.m Sat Mar 24 16:34:40 2012 +0000 +++ b/main/ga/inst/ga.m Sat Mar 24 16:34:53 2012 +0000 @@ -372,14 +372,69 @@ %! x = ga (f, nvars, [], [], [], [], [], [], @nonlcon, bad_options); -# TODO: structure/add tests below - -%!test x = ga (struct ("fitnessfcn", @(x) rastriginsfcn (x(1:2)) + ((x(3) ** 2) - (cos (2 * pi * x(3))) + 1) + (x(4) ** 2), "nvars", 4, "options", gaoptimset ())); - - -# TODO: convert to simple xtests -## nvars == 1 and min == zeros (1, nvars) - -%!test assert (ga (@(x) x ** 2, 1), 0, 1e-3); - -%!test assert (ga (@(x) (x ** 2) - (cos (2 * pi * x)) + 1, 1), 0, 1e-3); +## simple optimization result checks. Failures here could happen because +## of non-determinism in the result but if one of these tests always +## fails for you, plese consider dropping an email to the octave-forge +## mailing list <octave-dev@lists.sourceforge.net>. +%!function f = ff (min) +%! f = @(x) sum ((x(:, 1:(columns (min))) - repmat (min, +%! rows (x), 1)) .** 2, 2); +%!function [C, Ceq] = nonlcon (x) +%! C = []; +%! Ceq = []; +%!function r = rand_porcelain (interval_min, interval_max, nvars) +%! assert (interval_min < interval_max); +%! r = interval_min + ((interval_max - interval_min) * rand (1, nvars)); +%!function t = tol (nvars) +%! t = repelems (0.15, [1; nvars]); +%!xtest +%! nvars = 1; +%! minimum = zeros (1, nvars); +%! assert (ga (ff (minimum), nvars), minimum, tol (nvars)); +%!xtest +%! nvars = 2; +%! minimum = zeros (1, nvars); +%! assert (ga (ff (minimum), nvars), minimum, tol (nvars)); +%!xtest +%! nvars = 3; +%! minimum = zeros (1, nvars); +%! assert (ga (ff (minimum), nvars), minimum, tol (nvars)); +%!xtest +%! nvars = 1; +%! minimum = ones (1, nvars); +%! assert (ga (ff (minimum), nvars), minimum, tol (nvars)); +%!xtest +%! nvars = 2; +%! minimum = ones (1, nvars); +%! assert (ga (ff (minimum), nvars), minimum, tol (nvars)); +%!xtest +%! nvars = 3; +%! minimum = ones (1, nvars); +%! assert (ga (ff (minimum), nvars), minimum, tol (nvars)); +%!xtest +%! nvars = 1; +%! interval_min = -10; +%! interval_max = 10; +%! minimum = - rand_porcelain (interval_min, interval_max, nvars); +%! options = gaoptimset ("PopInitRange", 2 .* [interval_min; interval_max], +%! "CrossoverFraction", 0.2); +%! x = ga (ff (minimum), nvars, [], [], [], [], [], [], @nonlcon, options); +%! assert (x, minimum, 4 .* tol (nvars)); +%!xtest +%! nvars = 2; +%! interval_min = -10; +%! interval_max = 10; +%! minimum = - rand_porcelain (interval_min, interval_max, nvars); +%! options = gaoptimset ("PopInitRange", 2 .* [interval_min; interval_max], +%! "CrossoverFraction", 0.2); +%! x = ga (ff (minimum), nvars, [], [], [], [], [], [], @nonlcon, options); +%! assert (x, minimum, 4 .* tol (nvars)); +%!xtest +%! nvars = 3; +%! interval_min = -10; +%! interval_max = 10; +%! minimum = - rand_porcelain (interval_min, interval_max, nvars); +%! options = gaoptimset ("PopInitRange", 2 .* [interval_min; interval_max], +%! "CrossoverFraction", 0.2); +%! x = ga (ff (minimum), nvars, [], [], [], [], [], [], @nonlcon, options); +%! assert (x, minimum, 4 .* tol (nvars));