Modified: websites/production/commons/content/proper/commons-math/testapidocs/src-html/org/apache/commons/math3/optim/nonlinear/scalar/noderiv/CMAESOptimizerTest.html ============================================================================== --- websites/production/commons/content/proper/commons-math/testapidocs/src-html/org/apache/commons/math3/optim/nonlinear/scalar/noderiv/CMAESOptimizerTest.html (original) +++ websites/production/commons/content/proper/commons-math/testapidocs/src-html/org/apache/commons/math3/optim/nonlinear/scalar/noderiv/CMAESOptimizerTest.html Sat Apr 6 23:42:01 2013 @@ -52,7 +52,7 @@ <FONT color="green">049</FONT> <a name="line.49"></a> <FONT color="green">050</FONT> static final int DIM = 13;<a name="line.50"></a> <FONT color="green">051</FONT> static final int LAMBDA = 4 + (int)(3.*Math.log(DIM));<a name="line.51"></a> -<FONT color="green">052</FONT> <a name="line.52"></a> +<FONT color="green">052</FONT> <a name="line.52"></a> <FONT color="green">053</FONT> @Test(expected = NumberIsTooLargeException.class)<a name="line.53"></a> <FONT color="green">054</FONT> public void testInitOutofbounds1() {<a name="line.54"></a> <FONT color="green">055</FONT> double[] startPoint = point(DIM,3);<a name="line.55"></a> @@ -513,288 +513,290 @@ <FONT color="green">510</FONT> for (int i = 0; i < dim; i++) {<a name="line.510"></a> <FONT color="green">511</FONT> Assert.assertEquals(expected.getPoint()[i], result.getPoint()[i], pointTol);<a name="line.511"></a> <FONT color="green">512</FONT> }<a name="line.512"></a> -<FONT color="green">513</FONT> }<a name="line.513"></a> -<FONT color="green">514</FONT> <a name="line.514"></a> -<FONT color="green">515</FONT> private static double[] point(int n, double value) {<a name="line.515"></a> -<FONT color="green">516</FONT> double[] ds = new double[n];<a name="line.516"></a> -<FONT color="green">517</FONT> Arrays.fill(ds, value);<a name="line.517"></a> -<FONT color="green">518</FONT> return ds;<a name="line.518"></a> -<FONT color="green">519</FONT> }<a name="line.519"></a> -<FONT color="green">520</FONT> <a name="line.520"></a> -<FONT color="green">521</FONT> private static double[][] boundaries(int dim,<a name="line.521"></a> -<FONT color="green">522</FONT> double lower, double upper) {<a name="line.522"></a> -<FONT color="green">523</FONT> double[][] boundaries = new double[2][dim];<a name="line.523"></a> -<FONT color="green">524</FONT> for (int i = 0; i < dim; i++)<a name="line.524"></a> -<FONT color="green">525</FONT> boundaries[0][i] = lower;<a name="line.525"></a> +<FONT color="green">513</FONT> <a name="line.513"></a> +<FONT color="green">514</FONT> Assert.assertTrue(optim.getIterations() > 0);<a name="line.514"></a> +<FONT color="green">515</FONT> }<a name="line.515"></a> +<FONT color="green">516</FONT> <a name="line.516"></a> +<FONT color="green">517</FONT> private static double[] point(int n, double value) {<a name="line.517"></a> +<FONT color="green">518</FONT> double[] ds = new double[n];<a name="line.518"></a> +<FONT color="green">519</FONT> Arrays.fill(ds, value);<a name="line.519"></a> +<FONT color="green">520</FONT> return ds;<a name="line.520"></a> +<FONT color="green">521</FONT> }<a name="line.521"></a> +<FONT color="green">522</FONT> <a name="line.522"></a> +<FONT color="green">523</FONT> private static double[][] boundaries(int dim,<a name="line.523"></a> +<FONT color="green">524</FONT> double lower, double upper) {<a name="line.524"></a> +<FONT color="green">525</FONT> double[][] boundaries = new double[2][dim];<a name="line.525"></a> <FONT color="green">526</FONT> for (int i = 0; i < dim; i++)<a name="line.526"></a> -<FONT color="green">527</FONT> boundaries[1][i] = upper;<a name="line.527"></a> -<FONT color="green">528</FONT> return boundaries;<a name="line.528"></a> -<FONT color="green">529</FONT> }<a name="line.529"></a> -<FONT color="green">530</FONT> <a name="line.530"></a> -<FONT color="green">531</FONT> private static class Sphere implements MultivariateFunction {<a name="line.531"></a> +<FONT color="green">527</FONT> boundaries[0][i] = lower;<a name="line.527"></a> +<FONT color="green">528</FONT> for (int i = 0; i < dim; i++)<a name="line.528"></a> +<FONT color="green">529</FONT> boundaries[1][i] = upper;<a name="line.529"></a> +<FONT color="green">530</FONT> return boundaries;<a name="line.530"></a> +<FONT color="green">531</FONT> }<a name="line.531"></a> <FONT color="green">532</FONT> <a name="line.532"></a> -<FONT color="green">533</FONT> public double value(double[] x) {<a name="line.533"></a> -<FONT color="green">534</FONT> double f = 0;<a name="line.534"></a> -<FONT color="green">535</FONT> for (int i = 0; i < x.length; ++i)<a name="line.535"></a> -<FONT color="green">536</FONT> f += x[i] * x[i];<a name="line.536"></a> -<FONT color="green">537</FONT> return f;<a name="line.537"></a> -<FONT color="green">538</FONT> }<a name="line.538"></a> -<FONT color="green">539</FONT> }<a name="line.539"></a> -<FONT color="green">540</FONT> <a name="line.540"></a> -<FONT color="green">541</FONT> private static class Cigar implements MultivariateFunction {<a name="line.541"></a> -<FONT color="green">542</FONT> private double factor;<a name="line.542"></a> -<FONT color="green">543</FONT> <a name="line.543"></a> -<FONT color="green">544</FONT> Cigar() {<a name="line.544"></a> -<FONT color="green">545</FONT> this(1e3);<a name="line.545"></a> -<FONT color="green">546</FONT> }<a name="line.546"></a> -<FONT color="green">547</FONT> <a name="line.547"></a> -<FONT color="green">548</FONT> Cigar(double axisratio) {<a name="line.548"></a> -<FONT color="green">549</FONT> factor = axisratio * axisratio;<a name="line.549"></a> -<FONT color="green">550</FONT> }<a name="line.550"></a> -<FONT color="green">551</FONT> <a name="line.551"></a> -<FONT color="green">552</FONT> public double value(double[] x) {<a name="line.552"></a> -<FONT color="green">553</FONT> double f = x[0] * x[0];<a name="line.553"></a> -<FONT color="green">554</FONT> for (int i = 1; i < x.length; ++i)<a name="line.554"></a> -<FONT color="green">555</FONT> f += factor * x[i] * x[i];<a name="line.555"></a> -<FONT color="green">556</FONT> return f;<a name="line.556"></a> -<FONT color="green">557</FONT> }<a name="line.557"></a> -<FONT color="green">558</FONT> }<a name="line.558"></a> -<FONT color="green">559</FONT> <a name="line.559"></a> -<FONT color="green">560</FONT> private static class Tablet implements MultivariateFunction {<a name="line.560"></a> -<FONT color="green">561</FONT> private double factor;<a name="line.561"></a> -<FONT color="green">562</FONT> <a name="line.562"></a> -<FONT color="green">563</FONT> Tablet() {<a name="line.563"></a> -<FONT color="green">564</FONT> this(1e3);<a name="line.564"></a> -<FONT color="green">565</FONT> }<a name="line.565"></a> -<FONT color="green">566</FONT> <a name="line.566"></a> -<FONT color="green">567</FONT> Tablet(double axisratio) {<a name="line.567"></a> -<FONT color="green">568</FONT> factor = axisratio * axisratio;<a name="line.568"></a> -<FONT color="green">569</FONT> }<a name="line.569"></a> -<FONT color="green">570</FONT> <a name="line.570"></a> -<FONT color="green">571</FONT> public double value(double[] x) {<a name="line.571"></a> -<FONT color="green">572</FONT> double f = factor * x[0] * x[0];<a name="line.572"></a> -<FONT color="green">573</FONT> for (int i = 1; i < x.length; ++i)<a name="line.573"></a> -<FONT color="green">574</FONT> f += x[i] * x[i];<a name="line.574"></a> -<FONT color="green">575</FONT> return f;<a name="line.575"></a> -<FONT color="green">576</FONT> }<a name="line.576"></a> -<FONT color="green">577</FONT> }<a name="line.577"></a> -<FONT color="green">578</FONT> <a name="line.578"></a> -<FONT color="green">579</FONT> private static class CigTab implements MultivariateFunction {<a name="line.579"></a> -<FONT color="green">580</FONT> private double factor;<a name="line.580"></a> -<FONT color="green">581</FONT> <a name="line.581"></a> -<FONT color="green">582</FONT> CigTab() {<a name="line.582"></a> -<FONT color="green">583</FONT> this(1e4);<a name="line.583"></a> -<FONT color="green">584</FONT> }<a name="line.584"></a> -<FONT color="green">585</FONT> <a name="line.585"></a> -<FONT color="green">586</FONT> CigTab(double axisratio) {<a name="line.586"></a> -<FONT color="green">587</FONT> factor = axisratio;<a name="line.587"></a> -<FONT color="green">588</FONT> }<a name="line.588"></a> -<FONT color="green">589</FONT> <a name="line.589"></a> -<FONT color="green">590</FONT> public double value(double[] x) {<a name="line.590"></a> -<FONT color="green">591</FONT> int end = x.length - 1;<a name="line.591"></a> -<FONT color="green">592</FONT> double f = x[0] * x[0] / factor + factor * x[end] * x[end];<a name="line.592"></a> -<FONT color="green">593</FONT> for (int i = 1; i < end; ++i)<a name="line.593"></a> -<FONT color="green">594</FONT> f += x[i] * x[i];<a name="line.594"></a> -<FONT color="green">595</FONT> return f;<a name="line.595"></a> -<FONT color="green">596</FONT> }<a name="line.596"></a> -<FONT color="green">597</FONT> }<a name="line.597"></a> -<FONT color="green">598</FONT> <a name="line.598"></a> -<FONT color="green">599</FONT> private static class TwoAxes implements MultivariateFunction {<a name="line.599"></a> +<FONT color="green">533</FONT> private static class Sphere implements MultivariateFunction {<a name="line.533"></a> +<FONT color="green">534</FONT> <a name="line.534"></a> +<FONT color="green">535</FONT> public double value(double[] x) {<a name="line.535"></a> +<FONT color="green">536</FONT> double f = 0;<a name="line.536"></a> +<FONT color="green">537</FONT> for (int i = 0; i < x.length; ++i)<a name="line.537"></a> +<FONT color="green">538</FONT> f += x[i] * x[i];<a name="line.538"></a> +<FONT color="green">539</FONT> return f;<a name="line.539"></a> +<FONT color="green">540</FONT> }<a name="line.540"></a> +<FONT color="green">541</FONT> }<a name="line.541"></a> +<FONT color="green">542</FONT> <a name="line.542"></a> +<FONT color="green">543</FONT> private static class Cigar implements MultivariateFunction {<a name="line.543"></a> +<FONT color="green">544</FONT> private double factor;<a name="line.544"></a> +<FONT color="green">545</FONT> <a name="line.545"></a> +<FONT color="green">546</FONT> Cigar() {<a name="line.546"></a> +<FONT color="green">547</FONT> this(1e3);<a name="line.547"></a> +<FONT color="green">548</FONT> }<a name="line.548"></a> +<FONT color="green">549</FONT> <a name="line.549"></a> +<FONT color="green">550</FONT> Cigar(double axisratio) {<a name="line.550"></a> +<FONT color="green">551</FONT> factor = axisratio * axisratio;<a name="line.551"></a> +<FONT color="green">552</FONT> }<a name="line.552"></a> +<FONT color="green">553</FONT> <a name="line.553"></a> +<FONT color="green">554</FONT> public double value(double[] x) {<a name="line.554"></a> +<FONT color="green">555</FONT> double f = x[0] * x[0];<a name="line.555"></a> +<FONT color="green">556</FONT> for (int i = 1; i < x.length; ++i)<a name="line.556"></a> +<FONT color="green">557</FONT> f += factor * x[i] * x[i];<a name="line.557"></a> +<FONT color="green">558</FONT> return f;<a name="line.558"></a> +<FONT color="green">559</FONT> }<a name="line.559"></a> +<FONT color="green">560</FONT> }<a name="line.560"></a> +<FONT color="green">561</FONT> <a name="line.561"></a> +<FONT color="green">562</FONT> private static class Tablet implements MultivariateFunction {<a name="line.562"></a> +<FONT color="green">563</FONT> private double factor;<a name="line.563"></a> +<FONT color="green">564</FONT> <a name="line.564"></a> +<FONT color="green">565</FONT> Tablet() {<a name="line.565"></a> +<FONT color="green">566</FONT> this(1e3);<a name="line.566"></a> +<FONT color="green">567</FONT> }<a name="line.567"></a> +<FONT color="green">568</FONT> <a name="line.568"></a> +<FONT color="green">569</FONT> Tablet(double axisratio) {<a name="line.569"></a> +<FONT color="green">570</FONT> factor = axisratio * axisratio;<a name="line.570"></a> +<FONT color="green">571</FONT> }<a name="line.571"></a> +<FONT color="green">572</FONT> <a name="line.572"></a> +<FONT color="green">573</FONT> public double value(double[] x) {<a name="line.573"></a> +<FONT color="green">574</FONT> double f = factor * x[0] * x[0];<a name="line.574"></a> +<FONT color="green">575</FONT> for (int i = 1; i < x.length; ++i)<a name="line.575"></a> +<FONT color="green">576</FONT> f += x[i] * x[i];<a name="line.576"></a> +<FONT color="green">577</FONT> return f;<a name="line.577"></a> +<FONT color="green">578</FONT> }<a name="line.578"></a> +<FONT color="green">579</FONT> }<a name="line.579"></a> +<FONT color="green">580</FONT> <a name="line.580"></a> +<FONT color="green">581</FONT> private static class CigTab implements MultivariateFunction {<a name="line.581"></a> +<FONT color="green">582</FONT> private double factor;<a name="line.582"></a> +<FONT color="green">583</FONT> <a name="line.583"></a> +<FONT color="green">584</FONT> CigTab() {<a name="line.584"></a> +<FONT color="green">585</FONT> this(1e4);<a name="line.585"></a> +<FONT color="green">586</FONT> }<a name="line.586"></a> +<FONT color="green">587</FONT> <a name="line.587"></a> +<FONT color="green">588</FONT> CigTab(double axisratio) {<a name="line.588"></a> +<FONT color="green">589</FONT> factor = axisratio;<a name="line.589"></a> +<FONT color="green">590</FONT> }<a name="line.590"></a> +<FONT color="green">591</FONT> <a name="line.591"></a> +<FONT color="green">592</FONT> public double value(double[] x) {<a name="line.592"></a> +<FONT color="green">593</FONT> int end = x.length - 1;<a name="line.593"></a> +<FONT color="green">594</FONT> double f = x[0] * x[0] / factor + factor * x[end] * x[end];<a name="line.594"></a> +<FONT color="green">595</FONT> for (int i = 1; i < end; ++i)<a name="line.595"></a> +<FONT color="green">596</FONT> f += x[i] * x[i];<a name="line.596"></a> +<FONT color="green">597</FONT> return f;<a name="line.597"></a> +<FONT color="green">598</FONT> }<a name="line.598"></a> +<FONT color="green">599</FONT> }<a name="line.599"></a> <FONT color="green">600</FONT> <a name="line.600"></a> -<FONT color="green">601</FONT> private double factor;<a name="line.601"></a> +<FONT color="green">601</FONT> private static class TwoAxes implements MultivariateFunction {<a name="line.601"></a> <FONT color="green">602</FONT> <a name="line.602"></a> -<FONT color="green">603</FONT> TwoAxes() {<a name="line.603"></a> -<FONT color="green">604</FONT> this(1e6);<a name="line.604"></a> -<FONT color="green">605</FONT> }<a name="line.605"></a> -<FONT color="green">606</FONT> <a name="line.606"></a> -<FONT color="green">607</FONT> TwoAxes(double axisratio) {<a name="line.607"></a> -<FONT color="green">608</FONT> factor = axisratio * axisratio;<a name="line.608"></a> -<FONT color="green">609</FONT> }<a name="line.609"></a> -<FONT color="green">610</FONT> <a name="line.610"></a> -<FONT color="green">611</FONT> public double value(double[] x) {<a name="line.611"></a> -<FONT color="green">612</FONT> double f = 0;<a name="line.612"></a> -<FONT color="green">613</FONT> for (int i = 0; i < x.length; ++i)<a name="line.613"></a> -<FONT color="green">614</FONT> f += (i < x.length / 2 ? factor : 1) * x[i] * x[i];<a name="line.614"></a> -<FONT color="green">615</FONT> return f;<a name="line.615"></a> -<FONT color="green">616</FONT> }<a name="line.616"></a> -<FONT color="green">617</FONT> }<a name="line.617"></a> -<FONT color="green">618</FONT> <a name="line.618"></a> -<FONT color="green">619</FONT> private static class ElliRotated implements MultivariateFunction {<a name="line.619"></a> -<FONT color="green">620</FONT> private Basis B = new Basis();<a name="line.620"></a> -<FONT color="green">621</FONT> private double factor;<a name="line.621"></a> -<FONT color="green">622</FONT> <a name="line.622"></a> -<FONT color="green">623</FONT> ElliRotated() {<a name="line.623"></a> -<FONT color="green">624</FONT> this(1e3);<a name="line.624"></a> -<FONT color="green">625</FONT> }<a name="line.625"></a> -<FONT color="green">626</FONT> <a name="line.626"></a> -<FONT color="green">627</FONT> ElliRotated(double axisratio) {<a name="line.627"></a> -<FONT color="green">628</FONT> factor = axisratio * axisratio;<a name="line.628"></a> -<FONT color="green">629</FONT> }<a name="line.629"></a> -<FONT color="green">630</FONT> <a name="line.630"></a> -<FONT color="green">631</FONT> public double value(double[] x) {<a name="line.631"></a> -<FONT color="green">632</FONT> double f = 0;<a name="line.632"></a> -<FONT color="green">633</FONT> x = B.Rotate(x);<a name="line.633"></a> -<FONT color="green">634</FONT> for (int i = 0; i < x.length; ++i)<a name="line.634"></a> -<FONT color="green">635</FONT> f += Math.pow(factor, i / (x.length - 1.)) * x[i] * x[i];<a name="line.635"></a> -<FONT color="green">636</FONT> return f;<a name="line.636"></a> -<FONT color="green">637</FONT> }<a name="line.637"></a> -<FONT color="green">638</FONT> }<a name="line.638"></a> -<FONT color="green">639</FONT> <a name="line.639"></a> -<FONT color="green">640</FONT> private static class Elli implements MultivariateFunction {<a name="line.640"></a> +<FONT color="green">603</FONT> private double factor;<a name="line.603"></a> +<FONT color="green">604</FONT> <a name="line.604"></a> +<FONT color="green">605</FONT> TwoAxes() {<a name="line.605"></a> +<FONT color="green">606</FONT> this(1e6);<a name="line.606"></a> +<FONT color="green">607</FONT> }<a name="line.607"></a> +<FONT color="green">608</FONT> <a name="line.608"></a> +<FONT color="green">609</FONT> TwoAxes(double axisratio) {<a name="line.609"></a> +<FONT color="green">610</FONT> factor = axisratio * axisratio;<a name="line.610"></a> +<FONT color="green">611</FONT> }<a name="line.611"></a> +<FONT color="green">612</FONT> <a name="line.612"></a> +<FONT color="green">613</FONT> public double value(double[] x) {<a name="line.613"></a> +<FONT color="green">614</FONT> double f = 0;<a name="line.614"></a> +<FONT color="green">615</FONT> for (int i = 0; i < x.length; ++i)<a name="line.615"></a> +<FONT color="green">616</FONT> f += (i < x.length / 2 ? factor : 1) * x[i] * x[i];<a name="line.616"></a> +<FONT color="green">617</FONT> return f;<a name="line.617"></a> +<FONT color="green">618</FONT> }<a name="line.618"></a> +<FONT color="green">619</FONT> }<a name="line.619"></a> +<FONT color="green">620</FONT> <a name="line.620"></a> +<FONT color="green">621</FONT> private static class ElliRotated implements MultivariateFunction {<a name="line.621"></a> +<FONT color="green">622</FONT> private Basis B = new Basis();<a name="line.622"></a> +<FONT color="green">623</FONT> private double factor;<a name="line.623"></a> +<FONT color="green">624</FONT> <a name="line.624"></a> +<FONT color="green">625</FONT> ElliRotated() {<a name="line.625"></a> +<FONT color="green">626</FONT> this(1e3);<a name="line.626"></a> +<FONT color="green">627</FONT> }<a name="line.627"></a> +<FONT color="green">628</FONT> <a name="line.628"></a> +<FONT color="green">629</FONT> ElliRotated(double axisratio) {<a name="line.629"></a> +<FONT color="green">630</FONT> factor = axisratio * axisratio;<a name="line.630"></a> +<FONT color="green">631</FONT> }<a name="line.631"></a> +<FONT color="green">632</FONT> <a name="line.632"></a> +<FONT color="green">633</FONT> public double value(double[] x) {<a name="line.633"></a> +<FONT color="green">634</FONT> double f = 0;<a name="line.634"></a> +<FONT color="green">635</FONT> x = B.Rotate(x);<a name="line.635"></a> +<FONT color="green">636</FONT> for (int i = 0; i < x.length; ++i)<a name="line.636"></a> +<FONT color="green">637</FONT> f += Math.pow(factor, i / (x.length - 1.)) * x[i] * x[i];<a name="line.637"></a> +<FONT color="green">638</FONT> return f;<a name="line.638"></a> +<FONT color="green">639</FONT> }<a name="line.639"></a> +<FONT color="green">640</FONT> }<a name="line.640"></a> <FONT color="green">641</FONT> <a name="line.641"></a> -<FONT color="green">642</FONT> private double factor;<a name="line.642"></a> +<FONT color="green">642</FONT> private static class Elli implements MultivariateFunction {<a name="line.642"></a> <FONT color="green">643</FONT> <a name="line.643"></a> -<FONT color="green">644</FONT> Elli() {<a name="line.644"></a> -<FONT color="green">645</FONT> this(1e3);<a name="line.645"></a> -<FONT color="green">646</FONT> }<a name="line.646"></a> -<FONT color="green">647</FONT> <a name="line.647"></a> -<FONT color="green">648</FONT> Elli(double axisratio) {<a name="line.648"></a> -<FONT color="green">649</FONT> factor = axisratio * axisratio;<a name="line.649"></a> -<FONT color="green">650</FONT> }<a name="line.650"></a> -<FONT color="green">651</FONT> <a name="line.651"></a> -<FONT color="green">652</FONT> public double value(double[] x) {<a name="line.652"></a> -<FONT color="green">653</FONT> double f = 0;<a name="line.653"></a> -<FONT color="green">654</FONT> for (int i = 0; i < x.length; ++i)<a name="line.654"></a> -<FONT color="green">655</FONT> f += Math.pow(factor, i / (x.length - 1.)) * x[i] * x[i];<a name="line.655"></a> -<FONT color="green">656</FONT> return f;<a name="line.656"></a> -<FONT color="green">657</FONT> }<a name="line.657"></a> -<FONT color="green">658</FONT> }<a name="line.658"></a> -<FONT color="green">659</FONT> <a name="line.659"></a> -<FONT color="green">660</FONT> private static class MinusElli implements MultivariateFunction {<a name="line.660"></a> +<FONT color="green">644</FONT> private double factor;<a name="line.644"></a> +<FONT color="green">645</FONT> <a name="line.645"></a> +<FONT color="green">646</FONT> Elli() {<a name="line.646"></a> +<FONT color="green">647</FONT> this(1e3);<a name="line.647"></a> +<FONT color="green">648</FONT> }<a name="line.648"></a> +<FONT color="green">649</FONT> <a name="line.649"></a> +<FONT color="green">650</FONT> Elli(double axisratio) {<a name="line.650"></a> +<FONT color="green">651</FONT> factor = axisratio * axisratio;<a name="line.651"></a> +<FONT color="green">652</FONT> }<a name="line.652"></a> +<FONT color="green">653</FONT> <a name="line.653"></a> +<FONT color="green">654</FONT> public double value(double[] x) {<a name="line.654"></a> +<FONT color="green">655</FONT> double f = 0;<a name="line.655"></a> +<FONT color="green">656</FONT> for (int i = 0; i < x.length; ++i)<a name="line.656"></a> +<FONT color="green">657</FONT> f += Math.pow(factor, i / (x.length - 1.)) * x[i] * x[i];<a name="line.657"></a> +<FONT color="green">658</FONT> return f;<a name="line.658"></a> +<FONT color="green">659</FONT> }<a name="line.659"></a> +<FONT color="green">660</FONT> }<a name="line.660"></a> <FONT color="green">661</FONT> <a name="line.661"></a> -<FONT color="green">662</FONT> public double value(double[] x) {<a name="line.662"></a> -<FONT color="green">663</FONT> return 1.0-(new Elli().value(x));<a name="line.663"></a> -<FONT color="green">664</FONT> }<a name="line.664"></a> -<FONT color="green">665</FONT> }<a name="line.665"></a> -<FONT color="green">666</FONT> <a name="line.666"></a> -<FONT color="green">667</FONT> private static class DiffPow implements MultivariateFunction {<a name="line.667"></a> +<FONT color="green">662</FONT> private static class MinusElli implements MultivariateFunction {<a name="line.662"></a> +<FONT color="green">663</FONT> <a name="line.663"></a> +<FONT color="green">664</FONT> public double value(double[] x) {<a name="line.664"></a> +<FONT color="green">665</FONT> return 1.0-(new Elli().value(x));<a name="line.665"></a> +<FONT color="green">666</FONT> }<a name="line.666"></a> +<FONT color="green">667</FONT> }<a name="line.667"></a> <FONT color="green">668</FONT> <a name="line.668"></a> -<FONT color="green">669</FONT> public double value(double[] x) {<a name="line.669"></a> -<FONT color="green">670</FONT> double f = 0;<a name="line.670"></a> -<FONT color="green">671</FONT> for (int i = 0; i < x.length; ++i)<a name="line.671"></a> -<FONT color="green">672</FONT> f += Math.pow(Math.abs(x[i]), 2. + 10 * (double) i<a name="line.672"></a> -<FONT color="green">673</FONT> / (x.length - 1.));<a name="line.673"></a> -<FONT color="green">674</FONT> return f;<a name="line.674"></a> -<FONT color="green">675</FONT> }<a name="line.675"></a> -<FONT color="green">676</FONT> }<a name="line.676"></a> -<FONT color="green">677</FONT> <a name="line.677"></a> -<FONT color="green">678</FONT> private static class SsDiffPow implements MultivariateFunction {<a name="line.678"></a> +<FONT color="green">669</FONT> private static class DiffPow implements MultivariateFunction {<a name="line.669"></a> +<FONT color="green">670</FONT> <a name="line.670"></a> +<FONT color="green">671</FONT> public double value(double[] x) {<a name="line.671"></a> +<FONT color="green">672</FONT> double f = 0;<a name="line.672"></a> +<FONT color="green">673</FONT> for (int i = 0; i < x.length; ++i)<a name="line.673"></a> +<FONT color="green">674</FONT> f += Math.pow(Math.abs(x[i]), 2. + 10 * (double) i<a name="line.674"></a> +<FONT color="green">675</FONT> / (x.length - 1.));<a name="line.675"></a> +<FONT color="green">676</FONT> return f;<a name="line.676"></a> +<FONT color="green">677</FONT> }<a name="line.677"></a> +<FONT color="green">678</FONT> }<a name="line.678"></a> <FONT color="green">679</FONT> <a name="line.679"></a> -<FONT color="green">680</FONT> public double value(double[] x) {<a name="line.680"></a> -<FONT color="green">681</FONT> double f = Math.pow(new DiffPow().value(x), 0.25);<a name="line.681"></a> -<FONT color="green">682</FONT> return f;<a name="line.682"></a> -<FONT color="green">683</FONT> }<a name="line.683"></a> -<FONT color="green">684</FONT> }<a name="line.684"></a> -<FONT color="green">685</FONT> <a name="line.685"></a> -<FONT color="green">686</FONT> private static class Rosen implements MultivariateFunction {<a name="line.686"></a> +<FONT color="green">680</FONT> private static class SsDiffPow implements MultivariateFunction {<a name="line.680"></a> +<FONT color="green">681</FONT> <a name="line.681"></a> +<FONT color="green">682</FONT> public double value(double[] x) {<a name="line.682"></a> +<FONT color="green">683</FONT> double f = Math.pow(new DiffPow().value(x), 0.25);<a name="line.683"></a> +<FONT color="green">684</FONT> return f;<a name="line.684"></a> +<FONT color="green">685</FONT> }<a name="line.685"></a> +<FONT color="green">686</FONT> }<a name="line.686"></a> <FONT color="green">687</FONT> <a name="line.687"></a> -<FONT color="green">688</FONT> public double value(double[] x) {<a name="line.688"></a> -<FONT color="green">689</FONT> double f = 0;<a name="line.689"></a> -<FONT color="green">690</FONT> for (int i = 0; i < x.length - 1; ++i)<a name="line.690"></a> -<FONT color="green">691</FONT> f += 1e2 * (x[i] * x[i] - x[i + 1]) * (x[i] * x[i] - x[i + 1])<a name="line.691"></a> -<FONT color="green">692</FONT> + (x[i] - 1.) * (x[i] - 1.);<a name="line.692"></a> -<FONT color="green">693</FONT> return f;<a name="line.693"></a> -<FONT color="green">694</FONT> }<a name="line.694"></a> -<FONT color="green">695</FONT> }<a name="line.695"></a> -<FONT color="green">696</FONT> <a name="line.696"></a> -<FONT color="green">697</FONT> private static class Ackley implements MultivariateFunction {<a name="line.697"></a> -<FONT color="green">698</FONT> private double axisratio;<a name="line.698"></a> -<FONT color="green">699</FONT> <a name="line.699"></a> -<FONT color="green">700</FONT> Ackley(double axra) {<a name="line.700"></a> -<FONT color="green">701</FONT> axisratio = axra;<a name="line.701"></a> -<FONT color="green">702</FONT> }<a name="line.702"></a> -<FONT color="green">703</FONT> <a name="line.703"></a> -<FONT color="green">704</FONT> public Ackley() {<a name="line.704"></a> -<FONT color="green">705</FONT> this(1);<a name="line.705"></a> -<FONT color="green">706</FONT> }<a name="line.706"></a> -<FONT color="green">707</FONT> <a name="line.707"></a> -<FONT color="green">708</FONT> public double value(double[] x) {<a name="line.708"></a> -<FONT color="green">709</FONT> double f = 0;<a name="line.709"></a> -<FONT color="green">710</FONT> double res2 = 0;<a name="line.710"></a> -<FONT color="green">711</FONT> double fac = 0;<a name="line.711"></a> -<FONT color="green">712</FONT> for (int i = 0; i < x.length; ++i) {<a name="line.712"></a> -<FONT color="green">713</FONT> fac = Math.pow(axisratio, (i - 1.) / (x.length - 1.));<a name="line.713"></a> -<FONT color="green">714</FONT> f += fac * fac * x[i] * x[i];<a name="line.714"></a> -<FONT color="green">715</FONT> res2 += Math.cos(2. * Math.PI * fac * x[i]);<a name="line.715"></a> -<FONT color="green">716</FONT> }<a name="line.716"></a> -<FONT color="green">717</FONT> f = (20. - 20. * Math.exp(-0.2 * Math.sqrt(f / x.length))<a name="line.717"></a> -<FONT color="green">718</FONT> + Math.exp(1.) - Math.exp(res2 / x.length));<a name="line.718"></a> -<FONT color="green">719</FONT> return f;<a name="line.719"></a> -<FONT color="green">720</FONT> }<a name="line.720"></a> -<FONT color="green">721</FONT> }<a name="line.721"></a> -<FONT color="green">722</FONT> <a name="line.722"></a> -<FONT color="green">723</FONT> private static class Rastrigin implements MultivariateFunction {<a name="line.723"></a> +<FONT color="green">688</FONT> private static class Rosen implements MultivariateFunction {<a name="line.688"></a> +<FONT color="green">689</FONT> <a name="line.689"></a> +<FONT color="green">690</FONT> public double value(double[] x) {<a name="line.690"></a> +<FONT color="green">691</FONT> double f = 0;<a name="line.691"></a> +<FONT color="green">692</FONT> for (int i = 0; i < x.length - 1; ++i)<a name="line.692"></a> +<FONT color="green">693</FONT> f += 1e2 * (x[i] * x[i] - x[i + 1]) * (x[i] * x[i] - x[i + 1])<a name="line.693"></a> +<FONT color="green">694</FONT> + (x[i] - 1.) * (x[i] - 1.);<a name="line.694"></a> +<FONT color="green">695</FONT> return f;<a name="line.695"></a> +<FONT color="green">696</FONT> }<a name="line.696"></a> +<FONT color="green">697</FONT> }<a name="line.697"></a> +<FONT color="green">698</FONT> <a name="line.698"></a> +<FONT color="green">699</FONT> private static class Ackley implements MultivariateFunction {<a name="line.699"></a> +<FONT color="green">700</FONT> private double axisratio;<a name="line.700"></a> +<FONT color="green">701</FONT> <a name="line.701"></a> +<FONT color="green">702</FONT> Ackley(double axra) {<a name="line.702"></a> +<FONT color="green">703</FONT> axisratio = axra;<a name="line.703"></a> +<FONT color="green">704</FONT> }<a name="line.704"></a> +<FONT color="green">705</FONT> <a name="line.705"></a> +<FONT color="green">706</FONT> public Ackley() {<a name="line.706"></a> +<FONT color="green">707</FONT> this(1);<a name="line.707"></a> +<FONT color="green">708</FONT> }<a name="line.708"></a> +<FONT color="green">709</FONT> <a name="line.709"></a> +<FONT color="green">710</FONT> public double value(double[] x) {<a name="line.710"></a> +<FONT color="green">711</FONT> double f = 0;<a name="line.711"></a> +<FONT color="green">712</FONT> double res2 = 0;<a name="line.712"></a> +<FONT color="green">713</FONT> double fac = 0;<a name="line.713"></a> +<FONT color="green">714</FONT> for (int i = 0; i < x.length; ++i) {<a name="line.714"></a> +<FONT color="green">715</FONT> fac = Math.pow(axisratio, (i - 1.) / (x.length - 1.));<a name="line.715"></a> +<FONT color="green">716</FONT> f += fac * fac * x[i] * x[i];<a name="line.716"></a> +<FONT color="green">717</FONT> res2 += Math.cos(2. * Math.PI * fac * x[i]);<a name="line.717"></a> +<FONT color="green">718</FONT> }<a name="line.718"></a> +<FONT color="green">719</FONT> f = (20. - 20. * Math.exp(-0.2 * Math.sqrt(f / x.length))<a name="line.719"></a> +<FONT color="green">720</FONT> + Math.exp(1.) - Math.exp(res2 / x.length));<a name="line.720"></a> +<FONT color="green">721</FONT> return f;<a name="line.721"></a> +<FONT color="green">722</FONT> }<a name="line.722"></a> +<FONT color="green">723</FONT> }<a name="line.723"></a> <FONT color="green">724</FONT> <a name="line.724"></a> -<FONT color="green">725</FONT> private double axisratio;<a name="line.725"></a> -<FONT color="green">726</FONT> private double amplitude;<a name="line.726"></a> -<FONT color="green">727</FONT> <a name="line.727"></a> -<FONT color="green">728</FONT> Rastrigin() {<a name="line.728"></a> -<FONT color="green">729</FONT> this(1, 10);<a name="line.729"></a> -<FONT color="green">730</FONT> }<a name="line.730"></a> -<FONT color="green">731</FONT> <a name="line.731"></a> -<FONT color="green">732</FONT> Rastrigin(double axisratio, double amplitude) {<a name="line.732"></a> -<FONT color="green">733</FONT> this.axisratio = axisratio;<a name="line.733"></a> -<FONT color="green">734</FONT> this.amplitude = amplitude;<a name="line.734"></a> -<FONT color="green">735</FONT> }<a name="line.735"></a> -<FONT color="green">736</FONT> <a name="line.736"></a> -<FONT color="green">737</FONT> public double value(double[] x) {<a name="line.737"></a> -<FONT color="green">738</FONT> double f = 0;<a name="line.738"></a> -<FONT color="green">739</FONT> double fac;<a name="line.739"></a> -<FONT color="green">740</FONT> for (int i = 0; i < x.length; ++i) {<a name="line.740"></a> -<FONT color="green">741</FONT> fac = Math.pow(axisratio, (i - 1.) / (x.length - 1.));<a name="line.741"></a> -<FONT color="green">742</FONT> if (i == 0 && x[i] < 0)<a name="line.742"></a> -<FONT color="green">743</FONT> fac *= 1.;<a name="line.743"></a> -<FONT color="green">744</FONT> f += fac * fac * x[i] * x[i] + amplitude<a name="line.744"></a> -<FONT color="green">745</FONT> * (1. - Math.cos(2. * Math.PI * fac * x[i]));<a name="line.745"></a> -<FONT color="green">746</FONT> }<a name="line.746"></a> -<FONT color="green">747</FONT> return f;<a name="line.747"></a> -<FONT color="green">748</FONT> }<a name="line.748"></a> -<FONT color="green">749</FONT> }<a name="line.749"></a> -<FONT color="green">750</FONT> <a name="line.750"></a> -<FONT color="green">751</FONT> private static class Basis {<a name="line.751"></a> -<FONT color="green">752</FONT> double[][] basis;<a name="line.752"></a> -<FONT color="green">753</FONT> Random rand = new Random(2); // use not always the same basis<a name="line.753"></a> -<FONT color="green">754</FONT> <a name="line.754"></a> -<FONT color="green">755</FONT> double[] Rotate(double[] x) {<a name="line.755"></a> -<FONT color="green">756</FONT> GenBasis(x.length);<a name="line.756"></a> -<FONT color="green">757</FONT> double[] y = new double[x.length];<a name="line.757"></a> -<FONT color="green">758</FONT> for (int i = 0; i < x.length; ++i) {<a name="line.758"></a> -<FONT color="green">759</FONT> y[i] = 0;<a name="line.759"></a> -<FONT color="green">760</FONT> for (int j = 0; j < x.length; ++j)<a name="line.760"></a> -<FONT color="green">761</FONT> y[i] += basis[i][j] * x[j];<a name="line.761"></a> -<FONT color="green">762</FONT> }<a name="line.762"></a> -<FONT color="green">763</FONT> return y;<a name="line.763"></a> -<FONT color="green">764</FONT> }<a name="line.764"></a> -<FONT color="green">765</FONT> <a name="line.765"></a> -<FONT color="green">766</FONT> void GenBasis(int DIM) {<a name="line.766"></a> -<FONT color="green">767</FONT> if (basis != null ? basis.length == DIM : false)<a name="line.767"></a> -<FONT color="green">768</FONT> return;<a name="line.768"></a> -<FONT color="green">769</FONT> <a name="line.769"></a> -<FONT color="green">770</FONT> double sp;<a name="line.770"></a> -<FONT color="green">771</FONT> int i, j, k;<a name="line.771"></a> -<FONT color="green">772</FONT> <a name="line.772"></a> -<FONT color="green">773</FONT> /* generate orthogonal basis */<a name="line.773"></a> -<FONT color="green">774</FONT> basis = new double[DIM][DIM];<a name="line.774"></a> -<FONT color="green">775</FONT> for (i = 0; i < DIM; ++i) {<a name="line.775"></a> -<FONT color="green">776</FONT> /* sample components gaussian */<a name="line.776"></a> -<FONT color="green">777</FONT> for (j = 0; j < DIM; ++j)<a name="line.777"></a> -<FONT color="green">778</FONT> basis[i][j] = rand.nextGaussian();<a name="line.778"></a> -<FONT color="green">779</FONT> /* substract projection of previous vectors */<a name="line.779"></a> -<FONT color="green">780</FONT> for (j = i - 1; j >= 0; --j) {<a name="line.780"></a> -<FONT color="green">781</FONT> for (sp = 0., k = 0; k < DIM; ++k)<a name="line.781"></a> -<FONT color="green">782</FONT> sp += basis[i][k] * basis[j][k]; /* scalar product */<a name="line.782"></a> -<FONT color="green">783</FONT> for (k = 0; k < DIM; ++k)<a name="line.783"></a> -<FONT color="green">784</FONT> basis[i][k] -= sp * basis[j][k]; /* substract */<a name="line.784"></a> -<FONT color="green">785</FONT> }<a name="line.785"></a> -<FONT color="green">786</FONT> /* normalize */<a name="line.786"></a> -<FONT color="green">787</FONT> for (sp = 0., k = 0; k < DIM; ++k)<a name="line.787"></a> -<FONT color="green">788</FONT> sp += basis[i][k] * basis[i][k]; /* squared norm */<a name="line.788"></a> -<FONT color="green">789</FONT> for (k = 0; k < DIM; ++k)<a name="line.789"></a> -<FONT color="green">790</FONT> basis[i][k] /= Math.sqrt(sp);<a name="line.790"></a> -<FONT color="green">791</FONT> }<a name="line.791"></a> -<FONT color="green">792</FONT> }<a name="line.792"></a> -<FONT color="green">793</FONT> }<a name="line.793"></a> -<FONT color="green">794</FONT> }<a name="line.794"></a> +<FONT color="green">725</FONT> private static class Rastrigin implements MultivariateFunction {<a name="line.725"></a> +<FONT color="green">726</FONT> <a name="line.726"></a> +<FONT color="green">727</FONT> private double axisratio;<a name="line.727"></a> +<FONT color="green">728</FONT> private double amplitude;<a name="line.728"></a> +<FONT color="green">729</FONT> <a name="line.729"></a> +<FONT color="green">730</FONT> Rastrigin() {<a name="line.730"></a> +<FONT color="green">731</FONT> this(1, 10);<a name="line.731"></a> +<FONT color="green">732</FONT> }<a name="line.732"></a> +<FONT color="green">733</FONT> <a name="line.733"></a> +<FONT color="green">734</FONT> Rastrigin(double axisratio, double amplitude) {<a name="line.734"></a> +<FONT color="green">735</FONT> this.axisratio = axisratio;<a name="line.735"></a> +<FONT color="green">736</FONT> this.amplitude = amplitude;<a name="line.736"></a> +<FONT color="green">737</FONT> }<a name="line.737"></a> +<FONT color="green">738</FONT> <a name="line.738"></a> +<FONT color="green">739</FONT> public double value(double[] x) {<a name="line.739"></a> +<FONT color="green">740</FONT> double f = 0;<a name="line.740"></a> +<FONT color="green">741</FONT> double fac;<a name="line.741"></a> +<FONT color="green">742</FONT> for (int i = 0; i < x.length; ++i) {<a name="line.742"></a> +<FONT color="green">743</FONT> fac = Math.pow(axisratio, (i - 1.) / (x.length - 1.));<a name="line.743"></a> +<FONT color="green">744</FONT> if (i == 0 && x[i] < 0)<a name="line.744"></a> +<FONT color="green">745</FONT> fac *= 1.;<a name="line.745"></a> +<FONT color="green">746</FONT> f += fac * fac * x[i] * x[i] + amplitude<a name="line.746"></a> +<FONT color="green">747</FONT> * (1. - Math.cos(2. * Math.PI * fac * x[i]));<a name="line.747"></a> +<FONT color="green">748</FONT> }<a name="line.748"></a> +<FONT color="green">749</FONT> return f;<a name="line.749"></a> +<FONT color="green">750</FONT> }<a name="line.750"></a> +<FONT color="green">751</FONT> }<a name="line.751"></a> +<FONT color="green">752</FONT> <a name="line.752"></a> +<FONT color="green">753</FONT> private static class Basis {<a name="line.753"></a> +<FONT color="green">754</FONT> double[][] basis;<a name="line.754"></a> +<FONT color="green">755</FONT> Random rand = new Random(2); // use not always the same basis<a name="line.755"></a> +<FONT color="green">756</FONT> <a name="line.756"></a> +<FONT color="green">757</FONT> double[] Rotate(double[] x) {<a name="line.757"></a> +<FONT color="green">758</FONT> GenBasis(x.length);<a name="line.758"></a> +<FONT color="green">759</FONT> double[] y = new double[x.length];<a name="line.759"></a> +<FONT color="green">760</FONT> for (int i = 0; i < x.length; ++i) {<a name="line.760"></a> +<FONT color="green">761</FONT> y[i] = 0;<a name="line.761"></a> +<FONT color="green">762</FONT> for (int j = 0; j < x.length; ++j)<a name="line.762"></a> +<FONT color="green">763</FONT> y[i] += basis[i][j] * x[j];<a name="line.763"></a> +<FONT color="green">764</FONT> }<a name="line.764"></a> +<FONT color="green">765</FONT> return y;<a name="line.765"></a> +<FONT color="green">766</FONT> }<a name="line.766"></a> +<FONT color="green">767</FONT> <a name="line.767"></a> +<FONT color="green">768</FONT> void GenBasis(int DIM) {<a name="line.768"></a> +<FONT color="green">769</FONT> if (basis != null ? basis.length == DIM : false)<a name="line.769"></a> +<FONT color="green">770</FONT> return;<a name="line.770"></a> +<FONT color="green">771</FONT> <a name="line.771"></a> +<FONT color="green">772</FONT> double sp;<a name="line.772"></a> +<FONT color="green">773</FONT> int i, j, k;<a name="line.773"></a> +<FONT color="green">774</FONT> <a name="line.774"></a> +<FONT color="green">775</FONT> /* generate orthogonal basis */<a name="line.775"></a> +<FONT color="green">776</FONT> basis = new double[DIM][DIM];<a name="line.776"></a> +<FONT color="green">777</FONT> for (i = 0; i < DIM; ++i) {<a name="line.777"></a> +<FONT color="green">778</FONT> /* sample components gaussian */<a name="line.778"></a> +<FONT color="green">779</FONT> for (j = 0; j < DIM; ++j)<a name="line.779"></a> +<FONT color="green">780</FONT> basis[i][j] = rand.nextGaussian();<a name="line.780"></a> +<FONT color="green">781</FONT> /* substract projection of previous vectors */<a name="line.781"></a> +<FONT color="green">782</FONT> for (j = i - 1; j >= 0; --j) {<a name="line.782"></a> +<FONT color="green">783</FONT> for (sp = 0., k = 0; k < DIM; ++k)<a name="line.783"></a> +<FONT color="green">784</FONT> sp += basis[i][k] * basis[j][k]; /* scalar product */<a name="line.784"></a> +<FONT color="green">785</FONT> for (k = 0; k < DIM; ++k)<a name="line.785"></a> +<FONT color="green">786</FONT> basis[i][k] -= sp * basis[j][k]; /* substract */<a name="line.786"></a> +<FONT color="green">787</FONT> }<a name="line.787"></a> +<FONT color="green">788</FONT> /* normalize */<a name="line.788"></a> +<FONT color="green">789</FONT> for (sp = 0., k = 0; k < DIM; ++k)<a name="line.789"></a> +<FONT color="green">790</FONT> sp += basis[i][k] * basis[i][k]; /* squared norm */<a name="line.790"></a> +<FONT color="green">791</FONT> for (k = 0; k < DIM; ++k)<a name="line.791"></a> +<FONT color="green">792</FONT> basis[i][k] /= Math.sqrt(sp);<a name="line.792"></a> +<FONT color="green">793</FONT> }<a name="line.793"></a> +<FONT color="green">794</FONT> }<a name="line.794"></a> +<FONT color="green">795</FONT> }<a name="line.795"></a> +<FONT color="green">796</FONT> }<a name="line.796"></a>