SOT
test_problems.h
1 
9 #ifndef SOT_TEST_PROBLEMS_H
10 #define SOT_TEST_PROBLEMS_H
11 
12 #include <cmath>
13 #include "common.h"
14 #include "problem.h"
15 
17 namespace sot {
18 
20 
30  class Sphere : public TestProblem {
31  protected:
32  int mDim;
36  double mMinimum = 0;
37  std::string mName = "Sphere";
38  public:
40 
43  Sphere(int dim) {
44  mDim = dim;
45  mOptimum = arma::zeros<vec>(dim);
46  mxLow = -10.0 * arma::ones<vec>(dim);
47  mxUp = 10.0 * arma::ones<vec>(dim);
48  }
49  vec lBounds() const {
50  return mxLow;
51  }
52  vec uBounds() const {
53  return mxUp;
54  }
55  int dim() const {
56  return mDim;
57  }
58  double min() const {
59  return mMinimum;
60  }
61  vec optimum() const {
62  return mOptimum;
63  }
64  std::string name() const {
65  return mName;
66  }
67  double eval(const vec &x) const {
68  return arma::sum(x % x);
69  }
70  };
71 
73 
83  class SumSquares : public TestProblem {
84  protected:
85  int mDim;
89  double mMinimum = 0;
90  std::string mName = "Sum of Squares";
91  public:
93 
96  SumSquares(int dim) {
97  mDim = dim;
98  mOptimum = arma::zeros<vec>(dim);
99  mxLow = -10.0 * arma::ones<vec>(dim);
100  mxUp = 10.0 * arma::ones<vec>(dim);
101  }
102  vec lBounds() const {
103  return mxLow;
104  }
105  vec uBounds() const {
106  return mxUp;
107  }
108  int dim() const {
109  return mDim;
110  }
111  double min() const {
112  return mMinimum;
113  }
114  vec optimum() const {
115  return mOptimum;
116  }
117  std::string name() const {
118  return mName;
119  }
120  double eval(const vec &x) const {
121  return arma::dot(arma::linspace(1, mDim, mDim), arma::square(x));
122  }
123  };
124 
126 
136  class Schwefel22 : public TestProblem {
137  protected:
138  int mDim;
142  double mMinimum = 0;
143  std::string mName = "Schwefel22";
144  public:
146 
150  mDim = dim;
151  mOptimum = arma::zeros<vec>(dim);
152  mxLow = -10.0 * arma::ones<vec>(dim);
153  mxUp = 10.0 * arma::ones<vec>(dim);
154  }
155  vec lBounds() const {
156  return mxLow;
157  }
158  vec uBounds() const {
159  return mxUp;
160  }
161  int dim() const {
162  return mDim;
163  }
164  double min() const {
165  return mMinimum;
166  }
167  vec optimum() const {
168  return mOptimum;
169  }
170  std::string name() const {
171  return mName;
172  }
173  double eval(const vec &x) const {
174  return arma::sum(arma::abs(x)) + arma::prod(arma::abs(x));
175  }
176  };
177 
179 
189  class Exponential : public TestProblem {
190  protected:
191  int mDim;
195  double mMinimum = -1.0;
196  std::string mName = "Exponential";
197  public:
199 
203  mDim = dim;
204  mOptimum = arma::zeros<vec>(dim);
205  mxLow = -1.0 * arma::ones<vec>(dim);
206  mxUp = 1.0 * arma::ones<vec>(dim);
207  }
208  vec lBounds() const {
209  return mxLow;
210  }
211  vec uBounds() const {
212  return mxUp;
213  }
214  int dim() const {
215  return mDim;
216  }
217  double min() const {
218  return mMinimum;
219  }
220  vec optimum() const {
221  return mOptimum;
222  }
223  std::string name() const {
224  return mName;
225  }
226  double eval(const vec &x) const {
227  return - exp(-0.5 * arma::sum(x % x));
228  }
229  };
230 
232 
242  class Tablet : public TestProblem {
243  protected:
244  int mDim;
248  double mMinimum = 0.0;
249  std::string mName = "Tablet";
250  public:
252 
255  Tablet(int dim) {
256  mDim = dim;
257  mOptimum = arma::zeros<vec>(dim);
258  mxLow = -10.0 * arma::ones<vec>(dim);
259  mxUp = 10.0 * arma::ones<vec>(dim);
260  }
261  vec lBounds() const {
262  return mxLow;
263  }
264  vec uBounds() const {
265  return mxUp;
266  }
267  int dim() const {
268  return mDim;
269  }
270  double min() const {
271  return mMinimum;
272  }
273  vec optimum() const {
274  return mOptimum;
275  }
276  std::string name() const {
277  return mName;
278  }
279  double eval(const vec &x) const {
280  return 1e6 * (x(0) * x(0)) + arma::sum(arma::square(x.rows(1, mDim-1)));
281  }
282  };
283 
285 
295  class Step : public TestProblem {
296  protected:
297  int mDim;
301  double mMinimum = 0.0;
302  std::string mName = "Step";
303  public:
305 
308  Step(int dim) {
309  mDim = dim;
310  mOptimum = arma::zeros<vec>(dim);
311  mxLow = -10.0 * arma::ones<vec>(dim);
312  mxUp = 10.0 * arma::ones<vec>(dim);
313  }
314  vec lBounds() const {
315  return mxLow;
316  }
317  vec uBounds() const {
318  return mxUp;
319  }
320  int dim() const {
321  return mDim;
322  }
323  double min() const {
324  return mMinimum;
325  }
326  vec optimum() const {
327  return mOptimum;
328  }
329  std::string name() const {
330  return mName;
331  }
332  double eval(const vec &x) const {
333  return arma::sum(arma::square(arma::floor(x + 0.5)));
334  }
335  };
336 
338 
350  class Zakharov : public TestProblem {
351  protected:
352  int mDim;
356  double mMinimum = 0.0;
357  std::string mName = "Zakharov";
358  public:
360 
363  Zakharov(int dim) {
364  mDim = dim;
365  mOptimum = arma::zeros<vec>(dim);
366  mxLow = -5.0 * arma::ones<vec>(dim);
367  mxUp = 10.0 * arma::ones<vec>(dim);
368  }
369  vec lBounds() const {
370  return mxLow;
371  }
372  vec uBounds() const {
373  return mxUp;
374  }
375  int dim() const {
376  return mDim;
377  }
378  double min() const {
379  return mMinimum;
380  }
381  vec optimum() const {
382  return mOptimum;
383  }
384  std::string name() const {
385  return mName;
386  }
387  double eval(const vec &x) const {
388  double term1 = arma::sum(arma::square(x));
389  double term2 = arma::sum(0.5 * arma::dot(arma::linspace(1, mDim, mDim), x));
390  return term1 + std::pow(term2, 2) + std::pow(term2, 4);
391  }
392  };
393 
395 
405  class Rosenbrock : public TestProblem {
406  protected:
407  int mDim;
411  double mMinimum = 0.0;
412  std::string mName = "Rosenbrock";
413  public:
415 
419  mDim = dim;
420  mOptimum = arma::ones<vec>(dim);
421  mxLow = -2.0 * arma::ones<vec>(dim);
422  mxUp = 2.0 * arma::ones<vec>(dim);
423  }
424  vec lBounds() const {
425  return mxLow;
426  }
427  vec uBounds() const {
428  return mxUp;
429  }
430  int dim() const {
431  return mDim;
432  }
433  double min() const {
434  return mMinimum;
435  }
436  vec optimum() const {
437  return mOptimum;
438  }
439  std::string name() const {
440  return mName;
441  }
442  double eval(const vec &x) const {
443  double total = 0.0;
444  for(int i=0; i < mDim-1; i++) {
445  total += 100.0 * std::pow(x(i)*x(i) - x(i+1), 2) + std::pow(x(i) - 1, 2);
446  }
447  return total;
448  }
449  };
450 
452 
463  class Griewank : public TestProblem {
464  protected:
465  int mDim;
469  double mMinimum = 0.0;
470  std::string mName = "Griewank";
471  public:
473 
476  Griewank(int dim) {
477  mDim = dim;
478  mOptimum = arma::zeros<vec>(dim);
479  mxLow = -10.0 * arma::ones<vec>(dim);
480  mxUp = 10.0 * arma::ones<vec>(dim);
481  }
482  vec lBounds() const {
483  return mxLow;
484  }
485  vec uBounds() const {
486  return mxUp;
487  }
488  int dim() const {
489  return mDim;
490  }
491  double min() const {
492  return mMinimum;
493  }
494  vec optimum() const {
495  return mOptimum;
496  }
497  std::string name() const {
498  return mName;
499  }
500  double eval(const vec &x) const {
501  return 1.0 + (1.0/4000) * arma::sum(x % x) -
502  arma::prod(arma::cos(x / sqrt(arma::linspace(1, mDim, mDim))));
503  }
504  };
505 
507 
518  class Schaffer2 : public TestProblem {
519  protected:
520  int mDim;
524  double mMinimum = 0.0;
525  std::string mName = "Schaffer 2";
526  public:
528 
531  Schaffer2(int dim) {
532  mDim = dim;
533  mOptimum = arma::zeros<vec>(dim);
534  mxLow = -10.0 * arma::ones<vec>(dim);
535  mxUp = 10.0 * arma::ones<vec>(dim);
536  }
537  vec lBounds() const {
538  return mxLow;
539  }
540  vec uBounds() const {
541  return mxUp;
542  }
543  int dim() const {
544  return mDim;
545  }
546  double min() const {
547  return mMinimum;
548  }
549  vec optimum() const {
550  return mOptimum;
551  }
552  std::string name() const {
553  return mName;
554  }
555  double eval(const vec &x) const {
556  double total = 0.0;
557  for(int i=0; i < mDim - 1; i++) {
558  total += std::pow(x(i)*x(i) + x(i+1)*x(i+1), 0.25) *
559  (std::pow(std::sin(50*std::pow(x(i)*x(i) + x(i+1)*x(i+1), 0.1)), 2.0) + 1);
560  }
561  return total;
562  }
563  };
564 
566 
576  class Schwefel26 : public TestProblem {
577  protected:
578  int mDim;
582  double mMinimum;
583  std::string mName = "Schwefel26";
584  public:
586 
590  mDim = dim;
591  mOptimum = 420.968746 * arma::ones<vec>(dim);
592  mxLow = -500.0 * arma::ones<vec>(dim);
593  mxUp = 500.0 * arma::ones<vec>(dim);
594  mMinimum = - 418.9829 * dim;
595  }
596  vec lBounds() const {
597  return mxLow;
598  }
599  vec uBounds() const {
600  return mxUp;
601  }
602  int dim() const {
603  return mDim;
604  }
605  double min() const {
606  return mMinimum;
607  }
608  vec optimum() const {
609  return mOptimum;
610  }
611  std::string name() const {
612  return mName;
613  }
614  double eval(const vec &x) const {
615  return - arma::dot(x, arma::sin(arma::sqrt(arma::abs(x))));
616  }
617  };
618 
620 
631  class Himmelblau : public TestProblem {
632  protected:
633  int mDim;
637  double mMinimum = -78.3323;
638  std::string mName = "Himmelblau";
639  public:
641 
645  mDim = dim;
646  mOptimum = -2.9035 * arma::ones<vec>(dim);
647  mxLow = -10.0 * arma::ones<vec>(dim);
648  mxUp = 10.0 * arma::ones<vec>(dim);
649  }
650  vec lBounds() const {
651  return mxLow;
652  }
653  vec uBounds() const {
654  return mxUp;
655  }
656  int dim() const {
657  return mDim;
658  }
659  double min() const {
660  return mMinimum;
661  }
662  vec optimum() const {
663  return mOptimum;
664  }
665  std::string name() const {
666  return mName;
667  }
668  double eval(const vec &x) const {
669  return (1.0/mDim) * arma::sum( arma::pow(x, 4) - 16*arma::square(x) + 5*x);
670  }
671  };
672 
674 
685  class Ackley : public TestProblem {
686  protected:
687  int mDim;
691  double mMinimum = - 20 - exp(1);
692  std::string mName = "Ackley";
693  public:
695 
698  Ackley(int dim) {
699  mDim = dim;
700  mOptimum = arma::zeros<vec>(dim);
701  mxLow = -15.0 * arma::ones<vec>(dim);
702  mxUp = 20.0 * arma::ones<vec>(dim);
703  }
704  vec lBounds() const {
705  return mxLow;
706  }
707  vec uBounds() const {
708  return mxUp;
709  }
710  int dim() const {
711  return mDim;
712  }
713  double min() const {
714  return mMinimum;
715  }
716  vec optimum() const {
717  return mOptimum;
718  }
719  std::string name() const {
720  return mName;
721  }
722  double eval(const vec &x) const {
723  return -20.0 * exp(-0.2 * sqrt(arma::sum(arma::square(x))/double(mDim))) -
724  exp(arma::sum(arma::cos(2.0 * arma::datum::pi * x))/double(mDim));
725  }
726  };
727 
729 
739  class Rastrigin : public TestProblem {
740  protected:
741  int mDim;
745  double mMinimum;
746  std::string mName = "Rastrigin";
747  public:
749 
752  Rastrigin(int dim) {
753  mDim = dim;
754  mOptimum = arma::zeros<vec>(dim);
755  mxLow = -4.0 * arma::ones<vec>(dim);
756  mxUp = 5.0 * arma::ones<vec>(dim);
757  mMinimum = -dim;
758  }
759  vec lBounds() const {
760  return mxLow;
761  }
762  vec uBounds() const {
763  return mxUp;
764  }
765  int dim() const {
766  return mDim;
767  }
768  double min() const {
769  return mMinimum;
770  }
771  vec optimum() const {
772  return mOptimum;
773  }
774  std::string name() const {
775  return mName;
776  }
777  double eval(const vec &x) const {
778  return arma::sum(arma::square(x) - arma::cos(2 * arma::datum::pi * x));
779  }
780  };
781 
783 
794  class Michalewicz : public TestProblem {
795  protected:
796  int mDim;
800  double mMinimum;
801  std::string mName = "Michalewicz";
802  public:
804 
808  mDim = dim;
809  mxLow = arma::zeros<vec>(dim);
810  mxUp = arma::datum::pi * arma::ones<vec>(dim);
811  mMinimum = -0.966 * dim;
812  }
813  vec lBounds() const {
814  return mxLow;
815  }
816  vec uBounds() const {
817  return mxUp;
818  }
819  int dim() const {
820  return mDim;
821  }
822  double min() const {
823  return mMinimum;
824  }
825  vec optimum() const {
826  return mOptimum;
827  }
828  std::string name() const {
829  return mName;
830  }
831  double eval(const vec &x) const {
832  return - arma::sum(arma::sin(x) % arma::pow(arma::sin(
833  ((arma::linspace(1, mDim, mDim) % arma::square(x))/arma::datum::pi)), 20));
834  }
835  };
836 
838 
850  class Keane : public TestProblem {
851  protected:
852  int mDim;
856  double mMinimum;
857  std::string mName = "Keane";
858  public:
860 
863  Keane(int dim) {
864  mDim = dim;
865  mxLow = arma::ones<vec>(dim);
866  mxUp = 10.0 * arma::ones<vec>(dim);
867  mMinimum = -0.47;
868  }
869  vec lBounds() const {
870  return mxLow;
871  }
872  vec uBounds() const {
873  return mxUp;
874  }
875  int dim() const {
876  return mDim;
877  }
878  double min() const {
879  return mMinimum;
880  }
881  vec optimum() const {
882  return mOptimum;
883  }
884  std::string name() const {
885  return mName;
886  }
887  double eval(const vec &x) const {
888  double y1 = arma::sum((vec)arma::pow(arma::cos(x), 4.0));
889  double y2 = arma::prod((vec)arma::pow(arma::cos(x), 2.0));
890  double y3 = arma::sum(arma::linspace(1, mDim, mDim) % arma::square(x));
891  return -fabs((y1 - 2.0 * y2) / sqrt(y3));
892  }
893  };
894 
896 
908  class Levy : public TestProblem {
909  protected:
910  int mDim;
914  double mMinimum = 0.0;
915  std::string mName = "Levy";
916  public:
918 
921  Levy(int dim) {
922  mDim = dim;
923  mOptimum = arma::ones<vec>(dim);
924  mxLow = -5.0 * arma::ones<vec>(dim);
925  mxUp = 5.0 * arma::ones<vec>(dim);
926  }
927  vec lBounds() const {
928  return mxLow;
929  }
930  vec uBounds() const {
931  return mxUp;
932  }
933  int dim() const {
934  return mDim;
935  }
936  double min() const {
937  return mMinimum;
938  }
939  vec optimum() const {
940  return mOptimum;
941  }
942  std::string name() const {
943  return mName;
944  }
945  double eval(const vec &x) const {
946  vec w = 1 + (x - 1)/4.0;
947  double term1 = std::pow(std::sin(arma::datum::pi*w(0)), 2);
948  double term3 = std::pow(w(mDim-1)-1, 2) * (1 + std::pow(std::sin(2*arma::datum::pi*w(mDim-1)), 2));
949  vec wMid = w.rows(1, mDim-2);
950  double term2 = arma::sum(arma::square(wMid-1) %
951  (1 + 10*arma::square(arma::sin(arma::datum::pi*wMid+1))));
952  return term1 + term2 + term3;
953  }
954  };
955 
957 
968  class Salomon : public TestProblem {
969  protected:
970  int mDim;
974  double mMinimum = 0.0;
975  std::string mName = "Salomon";
976  public:
978 
981  Salomon(int dim) {
982  mDim = dim;
983  mOptimum = arma::zeros<vec>(dim);
984  mxLow = -10.0 * arma::ones<vec>(dim);
985  mxUp = 10.0 * arma::ones<vec>(dim);
986  }
987  vec lBounds() const {
988  return mxLow;
989  }
990  vec uBounds() const {
991  return mxUp;
992  }
993  int dim() const {
994  return mDim;
995  }
996  double min() const {
997  return mMinimum;
998  }
999  vec optimum() const {
1000  return mOptimum;
1001  }
1002  std::string name() const {
1003  return mName;
1004  }
1005  double eval(const vec &x) const {
1006  return 1 - cos(2*arma::datum::pi*sqrt(arma::sum(arma::square(x)))) +
1007  0.1*sqrt(arma::sum(arma::square(x)));
1008  }
1009  };
1010 
1012 
1023  class Schubert3 : public TestProblem {
1024  protected:
1025  int mDim;
1029  double mMinimum = -24.062499;
1030  std::string mName = "Schubert3";
1031  public:
1033 
1037  mDim = dim;
1038  mxLow = -10.0 * arma::ones<vec>(dim);
1039  mxUp = 10.0 * arma::ones<vec>(dim);
1040  }
1041  vec lBounds() const { return mxLow; }
1042  vec uBounds() const { return mxUp; }
1043  int dim() const { return mDim; }
1044  double min() const { return mMinimum; }
1045  vec optimum() const { return mOptimum; }
1046  std::string name() const { return mName; }
1047  double eval(const vec &x) const {
1048  double total = 0.0;
1049  for(int i=0; i < mDim; i++) {
1050  for(int j=1; j < 6; j++) {
1051  total += j*sin((j+1)*x(i)) + j;
1052  }
1053  }
1054  return total;
1055  }
1056  };
1057 
1059 
1070  class SineEnvelope : public TestProblem {
1071  protected:
1072  int mDim;
1076  double mMinimum = 0.0;
1077  std::string mName = "Sine Envelope";
1078  public:
1080 
1084  mDim = dim;
1085  mOptimum = arma::zeros<vec>(dim);
1086  mxLow = -20.0 * arma::ones<vec>(dim);
1087  mxUp = 20.0 * arma::ones<vec>(dim);
1088  }
1089  vec lBounds() const {
1090  return mxLow;
1091  }
1092  vec uBounds() const {
1093  return mxUp;
1094  }
1095  int dim() const {
1096  return mDim;
1097  }
1098  double min() const {
1099  return mMinimum;
1100  }
1101  vec optimum() const {
1102  return mOptimum;
1103  }
1104  std::string name() const {
1105  return mName;
1106  }
1107  double eval(const vec &x) const {
1108  double total = 0.0;
1109  for(int i=0; i < mDim-1; i++) {
1110  total += (std::pow(std::sin(std::sqrt(x(i)*x(i) + x(i+1)*x(i+1))), 2.0) - 0.5)/
1111  (std::pow(0.001*(x(i)*x(i) + x(i+1)*x(i+1))+1, 2.0)) + 0.5;
1112  }
1113  return total;
1114  }
1115  };
1116 
1118 
1135  class Schoen : public TestProblem {
1136  protected:
1137  int mDim;
1141  double mMinimum = 0.0;
1142  std::string mName;
1143  int mk;
1147  double mDistTol = 1e-10;
1148  public:
1150 
1153  Schoen(int dim) : Schoen(dim, fmax(2^dim, 500)) {}
1155 
1159  Schoen(int dim, int k) {
1160  mName = "Schoen, k = " + std::to_string(k);
1161  mDim = dim;
1162  mk = k;
1163  mxLow = arma::zeros<vec>(dim);
1164  mxUp = arma::ones<vec>(dim);
1165  mf = 100 * arma::randu<vec>(k);
1166  mf(0) = 0;
1167  mAlpha = 2 + arma::randu<vec>(k);
1168  mZ = arma::randu<mat>(dim, k);
1169  mOptimum = this->mZ.col(0);
1170  }
1171  vec lBounds() const {
1172  return mxLow;
1173  }
1174  vec uBounds() const {
1175  return mxUp;
1176  }
1177  int dim() const {
1178  return mDim;
1179  }
1180  double min() const {
1181  return mMinimum;
1182  }
1183  vec optimum() const {
1184  return mOptimum;
1185  }
1186  std::string name() const {
1187  return mName;
1188  }
1189  double eval(const vec &x) const {
1190  vec dists = squaredPointSetDistance<mat,vec>(x, mZ);
1191  if (arma::min(dists) < mDistTol) { // Just return the closest point
1192  arma::uword closest;
1193  double scores = dists.min(closest);
1194  return mf(closest);
1195  }
1196  else {
1197  long double num = 0, den = 0, prodval = 0;
1198  for(int i=0; i < mk; i++) {
1199  prodval = std::pow(std::sqrt(arma::sum(arma::square(mZ.col(i) - x))), mAlpha(i));
1200  num += mf(i) / prodval;
1201  den += 1 / prodval;
1202  }
1203  return num/den;
1204  }
1205  }
1206  };
1207 
1209 
1219  class CosineMixture : public TestProblem {
1220  protected:
1221  int mDim;
1225  double mMinimum;
1226  std::string mName = "Cosine Mixture";
1227  public:
1229 
1233  mDim = dim;
1234  mOptimum = arma::zeros<vec>(dim);
1235  mxLow = -1.0 * arma::ones<vec>(dim);
1236  mxUp = 1.0 * arma::ones<vec>(dim);
1237  mMinimum = -0.1 * dim;
1238  }
1239  vec lBounds() const {
1240  return mxLow;
1241  }
1242  vec uBounds() const {
1243  return mxUp;
1244  }
1245  int dim() const {
1246  return mDim;
1247  }
1248  double min() const {
1249  return mMinimum;
1250  }
1251  vec optimum() const {
1252  return mOptimum;
1253  }
1254  std::string name() const {
1255  return mName;
1256  }
1257  double eval(const vec &x) const {
1258  return -0.1*arma::sum(arma::cos(5*arma::datum::pi*x)) + arma::sum(arma::square(x));
1259  }
1260  };
1261 
1263 
1280  template<class OptProb>
1281  class RotatedProblem : public TestProblem {
1282  protected:
1283  std::shared_ptr<Problem> mProblem;
1286  int mDim;
1290  double mMinimum;
1291  std::string mName;
1293  void createTranslation() {
1295  mTranslation = mxLow + (mxUp - mxLow) % arma::randu(mDim);
1296  }
1299  mat Q, R;
1300  mat X = arma::randn<mat>(mDim, mDim);
1301  arma::qr(Q, R, X);
1302  mRotation = Q;
1303  }
1304  public:
1306 
1310  mProblem = std::make_shared<OptProb>(dim);
1311  if (mProblem->optimum().n_elem != mProblem->dim()) {
1312  throw std::logic_error("Optimum not specified for: " +
1313  mProblem->name() + " so can't create a rotated version");
1314  }
1315  mDim = mProblem->dim();
1316  mxLow = mProblem->lBounds();
1317  mxUp = mProblem->uBounds();
1318  mMinimum = mProblem->min();
1319  createTranslation();
1320  createRotation();
1321  mOptimum = mTranslation;
1322  mName = "Rotated + Translated " + mProblem->name();
1323  }
1325 
1328  mat rotation() const {
1329  return mRotation;
1330  }
1332 
1335  vec translation() const {
1336  return mTranslation;
1337  }
1338  vec lBounds() const {
1339  return mxLow;
1340  }
1341  vec uBounds() const {
1342  return mxUp;
1343  }
1344  int dim() const {
1345  return mDim;
1346  }
1347  double min() const {
1348  return mMinimum;
1349  }
1350  vec optimum() const {
1351  return mOptimum;
1352  }
1353  std::string name() const {
1354  return mName;
1355  }
1356  double eval(const vec &x) const {
1357  vec xx = mProblem->optimum() + mRotation * (x - mTranslation);
1358  return mProblem->eval(xx);
1359  }
1360  };
1361 
1363 
1374  template<class OptProb>
1375  class UnitBoxProblem : public TestProblem {
1376  protected:
1377  std::shared_ptr<Problem> mProblem;
1378  int mDim;
1382  double mMinimum;
1383  std::string mName;
1385  public:
1387 
1391  mProblem = std::make_shared<OptProb>(dim);
1392  mDim = dim;
1393  mxLow = mProblem->lBounds();
1394  mxUp = mProblem->uBounds();
1395  mMinimum = mProblem->min();
1396  if(mProblem->optimum().n_elem == dim) {
1397  mOptimum = toUnitBox(mProblem->optimum(), mxLow, mxUp);
1398  }
1399  mName = mProblem->name() + " scaled to the unit box";
1400  }
1401  vec lBounds() const {
1402  return arma::zeros(mDim);
1403  }
1404  vec uBounds() const {
1405  return arma::ones(mDim);
1406  }
1407  int dim() const {
1408  return mDim;
1409  }
1410  double min() const {
1411  return mMinimum;
1412  }
1413  vec optimum() const {
1414  return mOptimum;
1415  }
1416  std::string name() const {
1417  return mName;
1418  }
1419  double eval(const vec &x) const {
1420  vec xx = fromUnitBox(x, mxLow, mxUp);
1421  return mProblem->eval(xx);
1422  }
1423  };
1424 }
1425 
1426 #endif
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:552
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:762
vec mOptimum
Definition: test_problems.h:973
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:120
int mDim
Definition: test_problems.h:297
vec mOptimum
Definition: test_problems.h:855
vec mxLow
Definition: test_problems.h:86
vec mxUp
Definition: test_problems.h:1027
Schoen(int dim)
Constructor with k = max(2^dim, 500)
Definition: test_problems.h:1153
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:1174
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:993
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:765
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:214
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:261
vec mOptimum
Definition: test_problems.h:300
Tablet(int dim)
Constructor.
Definition: test_problems.h:255
vec mxLow
Definition: test_problems.h:353
int mDim
Definition: test_problems.h:465
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:264
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:828
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:55
double min() const
Method for getting global minimum value.
Definition: test_problems.h:936
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:1107
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:543
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:1245
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:549
Step(int dim)
Constructor.
Definition: test_problems.h:308
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:375
CosineMixture(int dim)
Constructor.
Definition: test_problems.h:1232
Exponential function
Definition: test_problems.h:189
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:1341
arma::vec vec
Default (column) vector class.
Definition: common.h:17
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:1257
vec mOptimum
Definition: test_problems.h:1075
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:710
int mDim
Definition: test_problems.h:852
int mDim
Definition: test_problems.h:85
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:52
RotatedProblem(int dim)
Constructor.
Definition: test_problems.h:1309
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:439
vec mxUp
Definition: test_problems.h:635
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:161
vec mxUp
Definition: test_problems.h:1288
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:831
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:494
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:1046
double mMinimum
Definition: test_problems.h:1382
vec mxLow
Definition: test_problems.h:1222
Schwefel26(int dim)
Constructor.
Definition: test_problems.h:589
vec mf
Definition: test_problems.h:1144
int mDim
Definition: test_problems.h:32
SumSquares(int dim)
Constructor.
Definition: test_problems.h:96
Sine Envelope function
Definition: test_problems.h:1070
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:819
vec mxUp
Definition: test_problems.h:1139
Himmelblau(int dim)
Constructor.
Definition: test_problems.h:644
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:1041
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:430
double mMinimum
Definition: test_problems.h:36
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:67
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:777
vec mxLow
Definition: test_problems.h:688
vec mxLow
Definition: test_problems.h:742
vec mxUp
Definition: test_problems.h:246
void createRotation()
Generates a random rotation matrix.
Definition: test_problems.h:1298
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:105
Salomon function
Definition: test_problems.h:968
vec mxUp
Definition: test_problems.h:1074
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:611
vec mxUp
Definition: test_problems.h:34
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:869
int mDim
Definition: test_problems.h:1378
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:211
Rastrigin function
Definition: test_problems.h:739
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:999
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:1407
mat mZ
Definition: test_problems.h:1146
vec mAlpha
Definition: test_problems.h:1145
double mMinimum
Definition: test_problems.h:800
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:872
std::shared_ptr< Problem > mProblem
Definition: test_problems.h:1283
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:602
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:387
double min() const
Method for getting global minimum value.
Definition: test_problems.h:111
double min() const
Method for getting global minimum value.
Definition: test_problems.h:713
vec mxUp
Definition: test_problems.h:354
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:326
vec mOptimum
Definition: test_problems.h:247
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:329
double min() const
Method for getting global minimum value.
Definition: test_problems.h:270
int mDim
Definition: test_problems.h:1137
std::string mName
Definition: test_problems.h:37
vec mOptimum
Definition: test_problems.h:1289
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:158
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:220
double min() const
Method for getting global minimum value.
Definition: test_problems.h:1410
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:497
vec mOptimum
Definition: test_problems.h:1140
Schwefel22(int dim)
Constructor.
Definition: test_problems.h:149
vec mOptimum
Definition: test_problems.h:1224
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:102
vec mxLow
Definition: test_problems.h:1287
int mDim
Definition: test_problems.h:687
Schwefel22 function
Definition: test_problems.h:136
int mDim
Definition: test_problems.h:1025
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:1183
int mDim
Definition: test_problems.h:138
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:488
double min() const
Method for getting global minimum value.
Definition: test_problems.h:164
Michalewicz function
Definition: test_problems.h:794
vec mxUp
Definition: test_problems.h:299
mat rotation() const
Method that returns the rotation matrix.
Definition: test_problems.h:1328
vec mxUp
Definition: test_problems.h:140
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:662
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:1344
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:267
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:61
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:114
vec mOptimum
Definition: test_problems.h:88
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:1095
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:1045
double min() const
Method for getting global minimum value.
Definition: test_problems.h:659
double min() const
Method for getting global minimum value.
Definition: test_problems.h:546
double min() const
Method for getting global minimum value.
Definition: test_problems.h:768
Levy function
Definition: test_problems.h:908
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:485
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:656
double mMinimum
Definition: test_problems.h:1290
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:813
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:320
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:1413
vec mOptimum
Definition: test_problems.h:410
vec mxLow
Definition: test_problems.h:1379
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:771
vec mxLow
Definition: test_problems.h:1026
Rosenbrock(int dim)
Constructor.
Definition: test_problems.h:418
int mDim
Definition: test_problems.h:352
double min() const
Method for getting global minimum value.
Definition: test_problems.h:1347
mat mRotation
Definition: test_problems.h:1285
double min() const
Method for getting global minimum value.
Definition: test_problems.h:996
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:1254
std::shared_ptr< Problem > mProblem
Definition: test_problems.h:1377
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:1189
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:369
vec mxUp
Definition: test_problems.h:193
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:540
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:650
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:226
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:167
Griewank(int dim)
Constructor.
Definition: test_problems.h:476
Schwefel26 function
Definition: test_problems.h:576
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:1089
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:384
vec mxLow
Definition: test_problems.h:579
vec mxUp
Definition: test_problems.h:854
Cosine Mixture function
Definition: test_problems.h:1219
vec mOptimum
Definition: test_problems.h:799
Exponential(int dim)
Constructor.
Definition: test_problems.h:202
vec mxLow
Definition: test_problems.h:408
vec mxUp
Definition: test_problems.h:912
vec mOptimum
Definition: test_problems.h:523
int mk
Definition: test_problems.h:1143
vec mxLow
Definition: test_problems.h:466
Schubert3 function
Definition: test_problems.h:1023
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:381
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:332
Schaffer2 function
Definition: test_problems.h:518
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:653
vec mxLow
Definition: test_problems.h:245
vec mOptimum
Definition: test_problems.h:744
double min() const
Method for getting global minimum value.
Definition: test_problems.h:1180
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:170
vec translation() const
Method that returns the translation vector.
Definition: test_problems.h:1335
int mDim
Definition: test_problems.h:633
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:704
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:665
vec mxUp
Definition: test_problems.h:798
vec mOptimum
Definition: test_problems.h:35
double mMinimum
Definition: test_problems.h:856
Levy(int dim)
Constructor.
Definition: test_problems.h:921
vec mOptimum
Definition: test_problems.h:1028
Salomon(int dim)
Constructor.
Definition: test_problems.h:981
vec mOptimum
Definition: test_problems.h:194
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:279
vec mxUp
Definition: test_problems.h:1380
vec mxUp
Definition: test_problems.h:689
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:1047
vec mxLow
Definition: test_problems.h:192
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:314
UnitBoxProblem(int dim)
Constructor.
Definition: test_problems.h:1390
std::string mName
Definition: test_problems.h:1383
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:1239
vec toUnitBox(const vec &x, const vec &xLow, const vec &xUp)
Map one point to the unit box.
Definition: utils.h:66
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:1005
vec mxUp
Definition: test_problems.h:522
Zakharov function
Definition: test_problems.h:350
vec mxLow
Definition: test_problems.h:971
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:884
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:608
double min() const
Method for getting global minimum value.
Definition: test_problems.h:323
Sphere(int dim)
Constructor.
Definition: test_problems.h:43
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:875
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:930
std::string mName
Definition: test_problems.h:1142
double min() const
Method for getting global minimum value.
Definition: test_problems.h:58
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:945
int mDim
Definition: test_problems.h:1072
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:1043
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:276
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:719
vec mxUp
Definition: test_problems.h:87
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:816
double min() const
Method for getting global minimum value.
Definition: test_problems.h:1248
Himmelblau function
Definition: test_problems.h:631
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:596
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:427
int mDim
Definition: test_problems.h:796
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:1171
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:1104
double mMinimum
Definition: test_problems.h:1225
vec mxLow
Definition: test_problems.h:797
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:990
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:117
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:774
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:942
vec mOptimum
Definition: test_problems.h:355
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:1338
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:927
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:887
int mDim
Definition: test_problems.h:578
Ackley(int dim)
Constructor.
Definition: test_problems.h:698
double min() const
Method for getting global minimum value.
Definition: test_problems.h:605
Abstract class for a SOT test problem.
Definition: problem.h:62
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:500
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:668
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:1350
Schubert3(int dim)
Constructor.
Definition: test_problems.h:1036
vec mxLow
Definition: test_problems.h:521
vec mxUp
Definition: test_problems.h:972
vec mOptimum
Definition: test_problems.h:141
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:223
double min() const
Method for getting global minimum value.
Definition: test_problems.h:1044
Ackley function
Definition: test_problems.h:685
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:482
vec mOptimum
Definition: test_problems.h:581
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:1002
int mDim
Definition: test_problems.h:407
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:1177
Rastrigin(int dim)
Constructor.
Definition: test_problems.h:752
double min() const
Method for getting global minimum value.
Definition: test_problems.h:433
vec mOptimum
Definition: test_problems.h:636
vec mOptimum
Definition: test_problems.h:1381
int mDim
Definition: test_problems.h:970
vec mxLow
Definition: test_problems.h:853
vec mxLow
Definition: test_problems.h:911
vec fromUnitBox(const vec &x, const vec &xLow, const vec &xUp)
Map one point from the unit box to another hypercube.
Definition: utils.h:94
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:1186
SineEnvelope(int dim)
Constructor.
Definition: test_problems.h:1083
vec mOptimum
Definition: test_problems.h:913
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:759
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:614
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:555
int mDim
Definition: test_problems.h:910
double min() const
Method for getting global minimum value.
Definition: test_problems.h:378
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:372
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:987
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:442
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:1242
vec mxLow
Definition: test_problems.h:1138
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:1042
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:881
Schaffer2(int dim)
Constructor.
Definition: test_problems.h:531
SOT namespace.
Definition: sot.h:27
vec mxUp
Definition: test_problems.h:743
Sphere function
Definition: test_problems.h:30
double mMinimum
Definition: test_problems.h:745
vec mxUp
Definition: test_problems.h:467
Keane(int dim)
Constructor.
Definition: test_problems.h:863
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:825
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:1353
Rosenbrock function
Definition: test_problems.h:405
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:424
Tablet function
Definition: test_problems.h:242
vec mxUp
Definition: test_problems.h:1223
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:716
Rotated and translated problem.
Definition: test_problems.h:1281
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:1416
Schoen function
Definition: test_problems.h:1135
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:273
Griewank function
Definition: test_problems.h:463
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:933
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:1419
vec mxLow
Definition: test_problems.h:1073
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:317
double min() const
Method for getting global minimum value.
Definition: test_problems.h:491
arma::mat mat
Default matrix class.
Definition: common.h:16
int mDim
Definition: test_problems.h:191
vec mxLow
Definition: test_problems.h:634
Sum of Squares function.
Definition: test_problems.h:83
vec mxLow
Definition: test_problems.h:139
int mDim
Definition: test_problems.h:520
int mDim
Definition: test_problems.h:244
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:1401
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:939
Michalewicz(int dim)
Constructor.
Definition: test_problems.h:807
Problem scaled to the unit box.
Definition: test_problems.h:1375
std::string name() const
Method for getting the name of the optimization problem.
Definition: test_problems.h:64
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:208
Keane function
Definition: test_problems.h:850
double mMinimum
Definition: test_problems.h:582
int mDim
Definition: test_problems.h:1286
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:1092
double min() const
Method for getting global minimum value.
Definition: test_problems.h:217
double min() const
Method for getting global minimum value.
Definition: test_problems.h:878
vec mOptimum
Definition: test_problems.h:468
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:537
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:722
double min() const
Method for getting global minimum value.
Definition: test_problems.h:822
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:155
Schoen(int dim, int k)
Constructor for given k.
Definition: test_problems.h:1159
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:1404
vec mTranslation
Definition: test_problems.h:1284
Zakharov(int dim)
Constructor.
Definition: test_problems.h:363
vec mxUp
Definition: test_problems.h:409
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:436
Step function
Definition: test_problems.h:295
int mDim
Definition: test_problems.h:1221
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:1101
vec optimum() const
Method for getting the global minimizer.
Definition: test_problems.h:1251
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:1356
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:599
int dim() const
Method for getting the number of dimensions.
Definition: test_problems.h:108
vec mxLow
Definition: test_problems.h:298
int mDim
Definition: test_problems.h:741
double min() const
Method for getting global minimum value.
Definition: test_problems.h:1098
vec mOptimum
Definition: test_problems.h:690
vec mxLow
Definition: test_problems.h:33
vec lBounds() const
Method for getting the lower variable bounds.
Definition: test_problems.h:49
vec uBounds() const
Method for getting the upper variable bounds.
Definition: test_problems.h:707
std::string mName
Definition: test_problems.h:1291
vec mxUp
Definition: test_problems.h:580
double eval(const vec &x) const
Method for evaluating the objective function.
Definition: test_problems.h:173