OPTK  0.1.2
Toolkit for global optimisation algorithms
synthetic.hpp
Go to the documentation of this file.
1 
23 #ifndef __SYNTHETIC_H_
24 #define __SYNTHETIC_H_
25 
26 #include <cmath>
27 #include <cstring>
28 #include <iostream>
29 #include <fstream>
30 #include <stdexcept>
31 #include <sys/types.h>
32 #include <bits/stdint-intn.h>
33 
34 #include <optk/core.hpp>
35 #include <optk/types.hpp>
36 #include <optk/benchmark.hpp>
37 
38 namespace syn {
39 
43 enum class properties: char {
44  continuous,
45  discontinuous,
46  differentiable,
47  non_differentiable,
48  separable,
49  partially_separable,
50  non_separable,
51  scalable,
52  non_scalable,
53  multimodal,
54  unimodal
55 };
56 
62 class synthetic: public optk::benchmark {
63  public:
78  synthetic (
79  const std::string &n,
80  u_int dims,
81  double lb,
82  double ub,
83  double opt);
84 
93  synthetic (const std::string &n, u_int dims, double opt);
94 
99  ~synthetic ();
100 
105  sspace::sspace_t * get_search_space() { return &m_sspace; }
106 
112  void set_properties (std::vector <properties> p) { m_properties = p; }
113  std::vector <properties> get_properties() { return m_properties; }
114 
118  inst::set get_opt_param () { return opt_params; }
119 
123  double get_opt () { return m_opt; }
124 
128  void update_opt (double opt) { m_opt = opt; }
129 
132  u_int get_dims () { return m_dims; }
133 
141  void validate_param_set (inst::set x);
142 
143  protected:
153  void set_opt_param (inst::set op);
154 
155  u_int m_dims;
156  double m_lb, m_ub, m_opt;
157  std::vector<properties> m_properties;
158  inst::set opt_params;
159  sspace::sspace_t m_sspace;
160 };
161 
167  public:
169 
170  ~synthetic_benchmark () {}
171 
178  void run (optk::optimisers *opts, optk::ctx_t *ctx) override;
179 };
180 
193 class ackley1: public synthetic {
194  public:
197  ackley1 (int d);
198  double evaluate(inst::set x) override;
199 };
200 
212 class ackley2: public synthetic {
213  public:
214  ackley2 ();
215  double evaluate(inst::set x) override;
216 };
217 
228 class ackley3: public synthetic {
229  public:
230  ackley3 ();
231  double evaluate(inst::set x) override;
232 };
233 
245 class adjiman: public synthetic {
246  public:
247  adjiman ();
248  double evaluate(inst::set x) override;
249 };
250 
260 class alpine1: public synthetic {
261  public:
262  alpine1 (int dims);
263  double evaluate(inst::set x) override;
264 };
265 
275 class alpine2: public synthetic {
276  public:
277  alpine2 (int dims);
278  double evaluate(inst::set x) override;
279 };
280 
298 class brad: public synthetic {
299  public:
300  brad ();
301  double evaluate(inst::set x) override;
302 };
303 
313 class bartels_conn: public synthetic {
314  public:
315  bartels_conn ();
316  double evaluate(inst::set x) override;
317 };
318 
330 class beale: public synthetic {
331  public:
332  beale ();
333  double evaluate(inst::set x) override;
334 };
335 
346 class biggs_exp2: public synthetic {
347  public:
348  biggs_exp2 ();
349  double evaluate(inst::set x) override;
350 };
351 
363 class biggs_exp3: public synthetic {
364  public:
365  biggs_exp3 ();
366  double evaluate(inst::set x) override;
367 };
368 
380 class biggs_exp4: public synthetic {
381  public:
382  biggs_exp4 ();
383  double evaluate(inst::set x) override;
384 };
385 
396 class biggs_exp5: public synthetic {
397  public:
398  biggs_exp5 ();
399  double evaluate(inst::set x) override;
400 };
401 
412 class biggs_exp6: public synthetic {
413  public:
414  biggs_exp6 ();
415  double evaluate (inst::set x) override;
416 };
417 
430 class bird: public synthetic {
431  public:
432  bird ();
433  double evaluate (inst::set x) override;
434 };
435 
445 class bohachevsky1: public synthetic {
446  public:
447  bohachevsky1 ();
448  double evaluate (inst::set x) override;
449 };
450 
460 class bohachevsky2: public synthetic {
461  public:
462  bohachevsky2 ();
463  double evaluate (inst::set x) override;
464 };
465 
474 class bohachevsky3: public synthetic {
475  public:
476  bohachevsky3 ();
477  double evaluate (inst::set x) override;
478 };
479 
488 class booth: public synthetic {
489  public:
490  booth ();
491  double evaluate (inst::set x) override;
492 };
493 
508 class box_betts: public synthetic {
509  public:
510  box_betts ();
511  double evaluate (inst::set x) override;
512 };
513 
525 class branin1: public synthetic {
526  public:
527  branin1 ();
528  double evaluate (inst::set x) override;
529 };
530 
542 class branin2: public synthetic {
543  public:
544  branin2 ();
545  double evaluate (inst::set x) override;
546 };
547 
556 class brent: public synthetic {
557  public:
558  brent ();
559  double evaluate (inst::set x) override;
560 };
561 
571 class brown: public synthetic {
572  public:
573  brown (int dims);
574  double evaluate (inst::set x) override;
575 };
576 
586 class bukin2: public synthetic {
587  public:
588  bukin2 ();
589  double evaluate (inst::set x) override;
590 };
591 
601 class bukin4: public synthetic {
602  public:
603  bukin4 ();
604  double evaluate (inst::set x) override;
605 };
606 
617 class bukin6: public synthetic {
618  public:
619  bukin6 ();
620  double evaluate (inst::set x) override;
621 };
622 
631 class camel3: public synthetic {
632  public:
633  camel3 ();
634  double evaluate (inst::set x) override;
635 };
636 
648 class camel6: public synthetic {
649  public:
650  camel6 ();
651  double evaluate (inst::set x) override;
652 };
653 
654 // We omit the chen* functions on the basis that they are difficult to
655 // calculate leading to floating-point errors. When we are given control over
656 // the experimental design, we can constrain our optimisations to values which
657 // are easily represented by floating-point values; henc ethese benchmarks can
658 // be considered somewhat unrealistic.
659 
670 class chichinadze: public synthetic {
671  public:
672  chichinadze ();
673  double evaluate (inst::set x) override;
674 };
675 
684 class chung_reynolds: public synthetic {
685  public:
686  chung_reynolds (int dims);
687  double evaluate (inst::set x) override;
688 };
689 
729 class cola: public synthetic {
730  public:
731  cola ();
732  double evaluate (inst::set x) override;
733 };
734 
748 class colville: public synthetic {
749  public:
750  colville ();
751  double evaluate (inst::set x) override;
752 };
753 
779 class corana: public synthetic {
780  public:
781  corana ();
782  double evaluate (inst::set x) override;
783 };
784 
794 class cosine_mixture2: public synthetic {
795  public:
796  cosine_mixture2 ();
797  double evaluate (inst::set x) override;
798 };
799 
809 class cosine_mixture: public synthetic {
810  public:
811  cosine_mixture (int dims);
812  double evaluate (inst::set x) override;
813 };
814 
826 class cross_in_tray: public synthetic {
827  public:
828  cross_in_tray ();
829  double evaluate (inst::set x) override;
830 };
831 
843 class csendes: public synthetic {
844  public:
845  csendes (int dims);
846  double evaluate (inst::set x) override;
847 };
848 
857 class cube: public synthetic {
858  public:
859  cube ();
860  double evaluate (inst::set x) override;
861 };
862 
863 
877 class damavandi: public synthetic {
878  public:
879  damavandi ();
880  double evaluate (inst::set x) override;
881 };
882 
892 class deb1: public synthetic {
893  public:
894  deb1 (int dims);
895  double evaluate (inst::set x) override;
896 };
897 
908 class deb2: public synthetic {
909  public:
910  deb2 (int dims);
911  double evaluate (inst::set x) override;
912 };
913 
926 class deckkers_aarts: public synthetic {
927  public:
928  deckkers_aarts ();
929  double evaluate (inst::set x) override;
930 };
931 
949  public:
951  double evaluate (inst::set x) override;
952 };
953 
969  public:
975  double evaluate (inst::set x) override;
976 };
977 
987 class dixon_price: public synthetic {
988  public:
989  dixon_price (int dims);
990  double evaluate (inst::set x) override;
991 };
992 
1004 class dolan: public synthetic {
1005  public:
1006  dolan ();
1007  double evaluate (inst::set x) override;
1008 };
1009 
1031 class deceptive: public synthetic {
1032  public:
1033  deceptive (int dims);
1034  double evaluate (inst::set x) override;
1035 };
1036 
1048  public:
1049  deflected_corrugated_spring (int dims);
1050  double evaluate (inst::set x) override;
1051 };
1052 
1062 class drop_wave: public synthetic {
1063  public:
1064  drop_wave ();
1065  double evaluate (inst::set x) override;
1066 };
1067 
1077 class easom: public synthetic {
1078  public:
1079  easom ();
1080  double evaluate (inst::set x) override;
1081 };
1082 
1091 class egg_crate: public synthetic {
1092  public:
1093  egg_crate ();
1094  double evaluate (inst::set x) override;
1095 };
1096 
1108 class egg_holder: public synthetic {
1109  public:
1110  egg_holder ();
1111  double evaluate (inst::set x) override;
1112 };
1113 
1125  public:
1127  double evaluate (inst::set x) override;
1128 };
1129 
1139 class exponential: public synthetic {
1140  public:
1141  exponential (int dims);
1142  double evaluate (inst::set x) override;
1143 };
1144 
1156 class exp2: public synthetic {
1157  public:
1158  exp2 ();
1159  double evaluate (inst::set x) override;
1160 };
1161 
1177 class franke: public synthetic {
1178  public:
1179  franke ();
1180  double evaluate (inst::set x) override;
1181 };
1182 
1193  public:
1194  freudenstein_roth ();
1195  double evaluate (inst::set x) override;
1196 };
1197 
1210 class gear: public synthetic {
1211  public:
1212  gear ();
1213  double evaluate (inst::set x) override;
1214 };
1215 
1228 class giunta: public synthetic {
1229  public:
1230  giunta ();
1231  double evaluate (inst::set x) override;
1232 };
1233 
1252  public:
1253  goldstein_price ();
1254  double evaluate (inst::set x) override;
1255 };
1256 
1266 class griewank: public synthetic {
1267  public:
1268  griewank (int dims);
1269  double evaluate (inst::set x) override;
1270 };
1271 
1288 class gulf: public synthetic {
1289  public:
1290  gulf ();
1291  double evaluate (inst::set x) override;
1292 };
1293 
1304 class hansen: public synthetic {
1305  public:
1306  hansen ();
1307  double evaluate (inst::set x) override;
1308 };
1309 
1336 class hartman3: public synthetic {
1337  public:
1338  hartman3 ();
1339  double evaluate (inst::set x) override;
1340 };
1341 
1374 class hartman6: public synthetic {
1375  public:
1376  hartman6 ();
1377  double evaluate (inst::set x) override;
1378 };
1379 
1396 class helical_valley: public synthetic {
1397  public:
1398  helical_valley ();
1399  double evaluate (inst::set x) override;
1400 };
1401 
1411 class himmelblau: public synthetic {
1412  public:
1413  himmelblau ();
1414  double evaluate (inst::set x) override;
1415 };
1416 
1428 class holder_table: public synthetic {
1429  public:
1430  holder_table ();
1431  double evaluate (inst::set x) override;
1432 };
1433 
1446 class hosaki: public synthetic {
1447  public:
1448  hosaki ();
1449  double evaluate (inst::set x) override;
1450 };
1451 
1462  public:
1463  jennrich_sampson ();
1464  double evaluate (inst::set x) override;
1465 };
1466 
1492 class judge: public synthetic {
1493  public:
1494  judge ();
1495  double evaluate (inst::set x) override;
1496 };
1497 
1516 class langermann2: public synthetic {
1517  public:
1518  langermann2 ();
1519  double evaluate (inst::set x) override;
1520 };
1521 
1547 class langermann5: public synthetic {
1548  public:
1549  langermann5 ();
1550  double evaluate (inst::set x) override;
1551 };
1552 
1571 class lennard_jones: public synthetic {
1572  public:
1573  lennard_jones ();
1574  double evaluate (inst::set x) override;
1575 };
1576 
1587 class keane: public synthetic {
1588  public:
1589  keane ();
1590  double evaluate (inst::set x) override;
1591 };
1592 
1601 class leon: public synthetic {
1602  public:
1603  leon ();
1604  double evaluate (inst::set x) override;
1605 };
1606 
1622 class levy3: public synthetic {
1623  public:
1624  levy3 (int dims);
1625  double evaluate (inst::set x) override;
1626 };
1627 
1639 class levy5: public synthetic {
1640  public:
1641  levy5 ();
1642  double evaluate (inst::set x) override;
1643 };
1644 
1655 class levy13: public synthetic {
1656  public:
1657  levy13 ();
1658  double evaluate (inst::set x) override;
1659 };
1660 
1669 class matyas: public synthetic {
1670  public:
1671  matyas ();
1672  double evaluate (inst::set x) override;
1673 };
1674 
1685 class mccormick: public synthetic {
1686  public:
1687  mccormick ();
1688  double evaluate (inst::set x) override;
1689 };
1690 
1692 typedef struct {
1696  int prob;
1699  int coef;
1700 } rdims;
1701 
1709 class regression: public synthetic {
1710  public:
1711  enum class dist_type: char {
1712  one,
1713  squared,
1714  inf
1715  };
1716 
1727  regression (
1728  rdims dims,
1729  double *e_mat,
1730  double *centres,
1731  double *coefs,
1732  const std::string &n,
1733  double fmin,
1734  double *minloc
1735  );
1736 
1737  virtual void kernel (double *xs, double *ret) = 0;
1738 
1739  double evaluate (inst::set x) override;
1740 
1741  protected:
1747  void dist_sq_1 (double *xs, double *ret);
1748 
1754  void dist_sq_2 (double *xs, double *ret);
1755 
1761  void dist_sq_inf (double *xs, double *ret);
1762 
1763  private:
1764 
1765  double *m_e_mat;
1766  double *m_centres;
1767  double *m_coefs;
1768  rdims m_dims;
1769 };
1770 
1771 class court01: public regression {
1772  public:
1773  court01 ();
1774  void kernel (double *xs, double *ret) override;
1775  enum { prob = 7, coef = 6 };
1776 
1777  private:
1778  static constexpr rdims dims = { .prob = prob, .coef = coef };
1779  static constexpr double fmin = -0.0859426686096;
1780  static constexpr double minloc[prob] =
1781  {0.6241, 0.7688, 0.8793, 0.2739, 0.7351, 0.8499, 0.6196};
1782 
1783  static constexpr double centres[coef * prob] = {
1784  0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
1785  0.3, 0.1, 0.5, 0.1, 0.8, 0.8, 0.6,
1786  0.6, 0.7, 0.8, 0.3, 0.7, 0.8, 0.6,
1787  0.4, 0.7, 0.4, 0.9, 0.4, 0.1, 0.9,
1788  0.9, 0.3, 0.3, 0.5, 0.2, 0.7, 0.2,
1789  0.5, 0.5, 0.2, 0.8, 0.5, 0.3, 0.4};
1790 
1791  static constexpr double e_mat[coef * prob] = {
1792  5, 5, 5, 5, 5, 5, 5,
1793  5, 5, 5, 5, 5, 5, 5,
1794  5, 5, 5, 5, 5, 5, 5,
1795  5, 5, 5, 5, 5, 5, 5,
1796  5, 5, 5, 5, 5, 5, 5,
1797  5, 5, 5, 5, 5, 5, 5};
1798 
1799  static constexpr double coefs[coef] = {1, 1, -2, 1, 1, 1};
1800 };
1801 
1802 class court02: public regression {
1803  public:
1804  court02 ();
1805  void kernel (double *xs, double *ret) override;
1806  enum { prob = 7, coef = 6 };
1807 
1808  private:
1809  static constexpr rdims dims = { .prob = prob, .coef = coef };
1810  static constexpr double fmin = -2.74162116801;
1811  static constexpr double minloc[prob] =
1812  {0.4068, 0.4432, 0.6479, 0.1978, 0.7660, 0.7553, 0.5640};
1813 
1814  static constexpr double centres[coef * prob] = {
1815  0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
1816  0.3, 0.1, 0.5, 0.1, 0.8, 0.8, 0.6,
1817  0.6, 0.7, 0.8, 0.3, 0.7, 0.8, 0.6,
1818  0.4, 0.7, 0.4, 0.9, 0.4, 0.1, 0.9,
1819  0.9, 0.3, 0.3, 0.5, 0.2, 0.7, 0.2,
1820  0.5, 0.5, 0.2, 0.8, 0.5, 0.3, 0.4};
1821 
1822  static constexpr double e_mat[coef * prob] = {
1823  5. , 5. , 5. , 5. , 5. , 5. , 5. ,
1824  1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5,
1825  1. , 1. , 1. , 1. , 1. , 1. , 1. ,
1826  5. , 5. , 5. , 5. , 5. , 5. , 5. ,
1827  5. , 5. , 5. , 5. , 5. , 5. , 5. ,
1828  5. , 5. , 5. , 5. , 5. , 5. , 5.};
1829 
1830  static constexpr double coefs[coef] = {-1, -1, -2, 1, 1, -1};
1831 };
1832 
1833 class court03: public regression {
1834  public:
1835  court03 ();
1836  void kernel (double *xs, double *ret) override;
1837  enum { prob = 9, coef = 9 };
1838 
1839  private:
1840  static constexpr rdims dims = { .prob = prob, .coef = coef };
1841  static constexpr double fmin = -3.02379637466;
1842  static constexpr double minloc[prob] =
1843  { 0.9317, 0.1891, 0.2503, 0.3646, 0.1603, 0.9829, 0.0392, 0.3263,
1844  0.6523 };
1845 
1846  static constexpr double centres[coef * prob] = {
1847  0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
1848  0.3, 0.1, 0.5, 0.1, 0.8, 0.8, 0.6, 0.4, 0.2,
1849  0.6, 0.7, 0.8, 0.3, 0.7, 0.8, 0.6, 0.9, 0.1,
1850  0.7, 0.2, 0.7, 0.7, 0.3, 0.3, 0.8, 0.6, 0.4,
1851  0.4, 0.6, 0.4, 0.9, 0.4, 0.1, 0.9, 0.3, 0.3,
1852  0.5, 0.5, 0.2, 0.8, 0.5, 0.3, 0.4, 0.5, 0.8,
1853  0.8, 0.3, 0.3, 0.5, 0.2, 0.7, 0.2, 0.4, 0.6,
1854  0.8, 0.3, 0.3, 0.5, 0.2, 0.7, 0.2, 0.4, 0.6,
1855  0.8, 0.3, 0.3, 0.5, 0.2, 0.7, 0.2, 0.4, 0.6};
1856 
1857  static constexpr double e_mat[coef * prob] = {
1858  1, 1, 1, 1, 1, 1, 1, 1, 1,
1859  1, 1, 1, 1, 1, 1, 1, 1, 1,
1860  1, 1, 1, 1, 1, 1, 1, 1, 1,
1861  1, 1, 1, 1, 1, 1, 1, 1, 1,
1862  1, 1, 1, 1, 1, 1, 1, 1, 1,
1863  1, 1, 1, 1, 1, 1, 1, 1, 1,
1864  0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
1865  0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
1866  1, 1, 1, 1, 1, 1, 1, 1, 1};
1867 
1868  static constexpr double coefs[coef] = {1, -1, 1, 1, 1, 1, -1, -2, -1};
1869 };
1870 
1871 class court04: public regression {
1872  public:
1873  court04 ();
1874  void kernel (double *xs, double *ret) override;
1875  enum { prob = 10, coef = 9 };
1876 
1877  private:
1878  static constexpr rdims dims = { .prob = prob, .coef = coef };
1879  static constexpr double fmin = -4.631135472012;
1880  static constexpr double minloc[prob] =
1881  { 0.8286, 0.3562, 0.3487, 0.4623, 0.1549,
1882  0.7182, 0.2218, 0.3919, 0.5394, 0.441};
1883 
1884  static constexpr double centres[coef * prob] = {
1885  0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
1886  0.3, 0.1, 0.5, 0.1, 0.8, 0.8, 0.6, 0.4, 0.2, 0.9,
1887  0.6, 0.7, 0.8, 0.3, 0.7, 0.8, 0.6, 0.9, 0.1, 0.2,
1888  0.7, 0.2, 0.7, 0.7, 0.3, 0.3, 0.8, 0.6, 0.4, 0.1,
1889  0.4, 0.6, 0.4, 0.9, 0.4, 0.1, 0.9, 0.3, 0.3, 0.2,
1890  0.5, 0.5, 0.2, 0.8, 0.5, 0.3, 0.4, 0.5, 0.8, 0.6,
1891  0.8, 0.4, 0.3, 0.5, 0.2, 0.7, 0.2, 0.4, 0.6, 0.5,
1892  0.8, 0.4, 0.3, 0.5, 0.2, 0.7, 0.2, 0.4, 0.6, 0.5,
1893  0.8, 0.4, 0.3, 0.5, 0.2, 0.7, 0.2, 0.4, 0.6, 0.5};
1894 
1895  static constexpr double e_mat[coef * prob] = {
1896  0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5,
1897  0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5,
1898  0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5,
1899  0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5,
1900  0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5,
1901  0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5,
1902  0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05,
1903  0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,
1904  0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5};
1905 
1906  static constexpr double coefs[coef] = {1, -1, 1, -1, 1, 1, -2, -1, -1};
1907 };
1908 
1909 class court05: public regression {
1910  public:
1911  court05 ();
1912  void kernel (double *xs, double *ret) override;
1913  enum { prob = 12, coef = 10 };
1914 
1915  private:
1916  static constexpr rdims dims = { .prob = prob, .coef = coef };
1917  static constexpr double fmin = -11.89842508364;
1918  static constexpr double minloc[prob] =
1919  { 0.636, 0.622, 0.39, 0.622, 0.29, 0.047,
1920  0.97, 0.26, 0.311, 0.247, 0.794, 0.189 };
1921 
1922  static constexpr double centres[coef * prob] = {
1923  0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
1924  0.3, 0.1, 0.5, 0.1, 0.8, 0.8, 0.6, 0.4, 0.2, 0.9, 0.3, 0.7,
1925  0.6, 0.7, 0.8, 0.3, 0.7, 0.8, 0.6, 0.9, 0.1, 0.2, 0.5, 0.2,
1926  0.7, 0.2, 0.7, 0.7, 0.3, 0.3, 0.8, 0.6, 0.4, 0.1, 0.9, 0.9,
1927  0.4, 0.6, 0.4, 0.5, 0.4, 0.2, 0.8, 0.3, 0.3, 0.2, 0.5, 0.1,
1928  0.5, 0.5, 0.2, 0.8, 0.5, 0.3, 0.4, 0.5, 0.8, 0.6, 0.9, 0.1,
1929  0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0, 0.1, 0.2,
1930  0.8, 0.4, 0.3, 0.5, 0.2, 0.7, 0.2, 0.4, 0.6, 0.5, 0.3, 0.8,
1931  0.9, 0.5, 0.3, 0.2, 0.1, 0.9, 0.3, 0.7, 0.7, 0.7, 0.4, 0.4,
1932  0.2, 0.8, 0.6, 0.4, 0.6, 0.6, 0.5, 0, 0.2, 0.8, 0.2, 0.3};
1933 
1934  static constexpr double e_mat[coef * prob] = {
1935  0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,
1936  0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,
1937  0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,
1938  0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,
1939  0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,
1940  0.08,0.08,0.08,0.08,0.08,0.08,0.08,0.08,0.08,0.08,0.08,0.08,
1941  0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,
1942  0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,0.2 ,
1943  0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,
1944  0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 ,0.4 };
1945 
1946 
1947  static constexpr double coefs[coef] =
1948  {5, -2, 5, -5, -20, -2, 10, 2, -5, 5};
1949 };
1950 
1951 class court06: public regression {
1952  public:
1953  court06 ();
1954  void kernel (double *xs, double *ret) override;
1955  enum { prob = 5, coef = 7 };
1956 
1957  private:
1958  static constexpr rdims dims = { .prob = prob, .coef = coef };
1959  static constexpr double fmin = 2.80720263234;
1960  static constexpr double minloc[prob] = {1, 1, 0.7636, 0.5268, 1};
1961 
1962  static constexpr double centres[coef * prob] = {
1963  0.1, 0.1, 0.1, 0.1, 0.1,
1964  0.3, 0.8, 0.8, 0.6, 0.9,
1965  0.6, 0.1, 0.2, 0.5, 0.2,
1966  0.7, 0.2, 0.1, 0.8, 0.9,
1967  0.4, 0.6, 0.5, 0.3, 0.8,
1968  0.9, 0.5, 0.3, 0.2, 0.4,
1969  0.2, 0.8, 0.6, 0.4, 0.6};
1970 
1971  static constexpr double e_mat[coef * prob] = {
1972  0.4 , 0.4 , 0.4 , 0.4 , 0.4 ,
1973  0.2 , 0.2 , 0.2 , 0.2 , 0.2 ,
1974  0.4 , 0.4 , 0.4 , 0.4 , 0.4 ,
1975  0.08, 0.08, 0.08, 0.08, 0.08,
1976  0.2 , 0.2 , 0.2 , 0.2 , 0.2 ,
1977  0.4 , 0.4 , 0.4 , 0.4 , 0.4 ,
1978  0.4 , 0.4 , 0.4 , 0.4 , 0.4};
1979 
1980  static constexpr double coefs[coef] = {-3, 2, -2, 4, -1, 5, -1};
1981 };
1982 
1983 class court07: public regression {
1984  public:
1985  court07 ();
1986  void kernel (double *xs, double *ret) override;
1987  enum { prob = 6, coef = 7 };
1988 
1989  private:
1990  static constexpr rdims dims = { .prob = prob, .coef = coef };
1991  static constexpr double fmin = -0.36321372933;
1992  static constexpr double minloc[prob] = {0.3811, 1, 0.2312, 0, 1, 0.1403};
1993 
1994  static constexpr double centres[coef * prob] = {
1995  0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
1996  0.3, 0.8, 0.8, 0.6, 0.9, 0.4,
1997  0.6, 1, 0.2, 0, 1, 0.3,
1998  0.7, 0.2, 0.1, 0.8, 0.9, 0.2,
1999  0.4, 0.6, 0.5, 0.3, 0.8, 0.3,
2000  0.9, 0.5, 0.3, 0.2, 0.4, 0.8,
2001  0.2, 0.8, 0.6, 0.4, 0.6, 0.9};
2002 
2003  static constexpr double e_mat[coef * prob] = {
2004  0.7 , 0.7 , 0.7 , 0.7 , 0.7 , 0.7 ,
2005  0.35, 0.35, 0.35, 0.35, 0.35, 0.35,
2006  0.7 , 0.7 , 0.7 , 0.7 , 0.7 , 0.7 ,
2007  0.14, 0.14, 0.14, 0.14, 0.14, 0.14,
2008  0.35, 0.35, 0.35, 0.35, 0.35, 0.35,
2009  0.7 , 0.7 , 0.7 , 0.7 , 0.7 , 0.7 ,
2010  0.49, 0.49, 0.49, 0.49, 0.49, 0.49};
2011 
2012  static constexpr double coefs[coef] = {2, 2, -4, 1, -2, 4, -2};
2013 };
2014 
2015 class court08: public regression {
2016  public:
2017  court08 ();
2018  void kernel (double *xs, double *ret) override;
2019  enum { prob = 4, coef = 7 };
2020 
2021  private:
2022  static constexpr rdims dims = { .prob = prob, .coef = coef };
2023  static constexpr double fmin = -3.45224058874;
2024  static constexpr double minloc[prob] = {0.5067, 1, 0.5591, 0.0823};
2025 
2026  static constexpr double centres[coef * prob] = {
2027  0.1, 0.1, 0.1, 0.1,
2028  0.3, 0.8, 0.9, 0.4,
2029  0.6, 1, 0.2, 0,
2030  0.7, 0.2, 0.1, 0.8,
2031  0.4, 0, 0.8, 1,
2032  0.9, 0.5, 0.3, 0.2,
2033  0.2, 0.8, 0.6, 0.4};
2034 
2035  static constexpr double e_mat[coef * prob] = {
2036  0.7 , 0.7 , 0.7 , 0.7 ,
2037  0.35, 0.35, 0.35, 0.35,
2038  0.7 , 2.1 , 0.7 , 2.1 ,
2039  0.35, 0.35, 0.35, 0.35,
2040  1.4 , 0.7 , 1.4 , 0.7 ,
2041  0.7 , 0.7 , 0.7 , 0.7 ,
2042  0.49, 0.49, 0.49, 0.49};
2043 
2044  static constexpr double coefs[coef] = {2, 1, -8, 1, -5, 3, 2};
2045 };
2046 
2047 class court09: public regression {
2048  public:
2049  court09 ();
2050  void kernel (double *xs, double *ret) override;
2051  enum { prob = 3, coef = 8 };
2052 
2053  private:
2054  static constexpr rdims dims = { .prob = prob, .coef = coef };
2055  static constexpr double fmin = -10.17146707797;
2056  static constexpr double minloc[prob] = {0.594, 1, 0.205};
2057 
2058  static constexpr double centres[coef * prob] = {
2059  0.1, 0.1, 0.1,
2060  0.3, 0.8, 0.9,
2061  0.6, 1, 0.2,
2062  0.6, 1, 0.2,
2063  0.7, 0.2, 0.1,
2064  0.4, 0, 0.8,
2065  0.9, 0.5, 1,
2066  0, 0.8, 0.6};
2067 
2068  static constexpr double e_mat[coef * prob] = {
2069  0.6 , 0.6 , 0.6 ,
2070  0.36, 0.36, 0.36,
2071  0.6 , 0.3 , 0.6 ,
2072  2.4 , 6. , 2.4 ,
2073  0.3 , 0.3 , 0.3 ,
2074  0.3 , 0.6 , 0.3 ,
2075  0.6 , 0.6 , 0.6 ,
2076  0.18, 0.3 , 0.3};
2077 
2078  static constexpr double coefs[coef] = {4, -3, -6, -2, 1, -3, 6, 2};
2079 };
2080 
2081 class court10: public regression {
2082  public:
2083  court10 ();
2084  void kernel (double *xs, double *ret) override;
2085  enum { prob = 8, coef = 10 };
2086 
2087  private:
2088  static constexpr rdims dims = { .prob = prob, .coef = coef };
2089  static constexpr double fmin = -2.51939597030;
2090  static constexpr double minloc[prob] =
2091  {0.5085, 0.5433, 0.2273, 1, 0.3381, 0.0255, 1, 0.5038};
2092 
2093  static constexpr double centres[coef * prob] = {
2094  0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
2095  0.3, 0.1, 0.5, 0.1, 0.8, 0.8, 0.6, 0.4,
2096  0.6, 0.7, 0.8, 0.3, 0.7, 0.8, 0.6, 0.9,
2097  0.7, 0, 0.7, 1, 0.3, 0, 0.8, 0.6,
2098  0.4, 0.6, 0.4, 1, 0.4, 0.2, 1, 0.3,
2099  0.5, 0.5, 0.2, 0.8, 0.5, 0.3, 0.4, 0.5,
2100  0.1, 0.2, 1, 0.4, 0.5, 0.6, 0.7, 0,
2101  0.9, 0.4, 0.3, 0.5, 0.2, 0.7, 0.2, 0.4,
2102  0, 0.5, 0.3, 0.2, 0.1, 0.9, 0.3, 0.7,
2103  0.2, 0.8, 0.6, 0.4, 0.6, 0.6, 0.5, 0};
2104 
2105  static constexpr double e_mat[coef * prob] = {
2106  0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8,
2107  0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8,
2108  0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8,
2109  0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4,
2110  0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8,
2111  2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4,
2112  0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4,
2113  0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8,
2114  1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6,
2115  0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8};
2116 
2117  static constexpr double coefs[coef] =
2118  {5, -2, 5, -5, -12, -2, 10, 2, -5, 5};
2119 };
2120 
2121 class court11: public regression {
2122  public:
2123  court11 ();
2124  void kernel (double *xs, double *ret) override;
2125  enum { prob = 8, coef = 10 };
2126 
2127  private:
2128  static constexpr rdims dims = { .prob = prob, .coef = coef };
2129  static constexpr double fmin = -0.39045528652;
2130  static constexpr double minloc[prob] =
2131  {0.4, 0.6, 0.4, 1, 0.4, 0.2, 1, 0.3};
2132 
2133  static constexpr double centres[coef * prob] = {
2134  0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
2135  0.3, 0.1, 0.5, 0.1, 0.8, 0.8, 0.6, 0.4,
2136  0.6, 0.7, 0.8, 0.3, 0.7, 0.8, 0.6, 0.9,
2137  0.7, 0, 0.7, 1, 0.3, 0, 0.8, 0.6,
2138  0.4, 0.6, 0.4, 1, 0.4, 0.2, 1, 0.3,
2139  0.5, 0.5, 0.2, 0.8, 0.5, 0.3, 0.4, 0.5,
2140  0.1, 0.2, 1, 0.4, 0.5, 0.6, 0.7, 0,
2141  0.9, 0.4, 0.3, 0.5, 0.2, 0.7, 0.2, 0.4,
2142  0, 0.5, 0.3, 0.2, 0.1, 0.9, 0.3, 0.7,
2143  0.2, 0.8, 0.6, 0.4, 0.6, 0.6, 0.5, 0};
2144 
2145  static constexpr double e_mat[coef * prob] = {
2146  0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 ,
2147  0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 ,
2148  0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 ,
2149  0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,
2150  0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 ,
2151  1.5 , 1.5 , 1.5 , 1.5 , 1.5 , 1.5 , 1.5 , 1.5 ,
2152  0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,
2153  0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 ,
2154  1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. ,
2155  0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 };
2156 
2157  static constexpr double coefs[coef] =
2158  {5, -2, 5, -5, -7, -2, 10, 2, -5, 5};
2159 };
2160 
2161 // skip 12 because of bessel function (imported from scipy in evalse). TODO for
2162 // completeness, implement scipy.special.jv).
2163 
2164 class court13: public regression {
2165  public:
2166  court13 ();
2167  void kernel (double *xs, double *ret) override;
2168  enum { prob = 3, coef = 15 };
2169 
2170  private:
2171  static constexpr rdims dims = { .prob = prob, .coef = coef };
2172  static constexpr double fmin = 1.49048296359;
2173  static constexpr double minloc[prob] = {1,1,1};
2174 
2175  static constexpr double centres[coef * prob] = {
2176  0.9, 0.9, 0.9,
2177  0.9, 0.9, 1,
2178  0.9, 1, 0.9,
2179  1, 0.9, 0.9,
2180  1, 1, 1,
2181  1, 0, 0,
2182  0.5, 0, 0,
2183  0, 1, 0,
2184  0, 0.7, 0,
2185  0, 0, 0,
2186  0.4, 0.3, 0.6,
2187  0.7, 0.7, 0.7,
2188  0.7, 0.7, 1,
2189  1, 0.7, 0.7,
2190  0.7, 1, 0.7};
2191 
2192  static constexpr double e_mat[coef * prob] = {
2193  7.6, 7.6, 7.6,
2194  7.6, 7.6, 7.6,
2195  7.6, 7.6, 7.6,
2196  7.6, 7.6, 7.6,
2197  7.6, 7.6, 7.6,
2198  0.8, 0.4, 0.8,
2199  1.6, 0.4, 0.8,
2200  0.4, 0.4, 0.4,
2201  0.4, 0.8, 0.4,
2202  0.8, 0.8, 0.8,
2203  1.6, 1.6, 2.8,
2204  6.8, 6.8, 6.8,
2205  6.8, 6.8, 6.8,
2206  6.8, 6.8, 6.8,
2207  6.8, 6.8, 6.8};
2208 
2209  static constexpr double coefs[coef] =
2210  {4, 4, 4, 4, -12, 1, 3, -2, 5, -2, 1, -2, -2, -2, -2};
2211 };
2212 
2213 class court14: public regression {
2214  public:
2215  court14 ();
2216  void kernel (double *xs, double *ret) override;
2217  enum { prob = 3, coef = 1 };
2218 
2219  private:
2220  static constexpr rdims dims = { .prob = prob, .coef = coef };
2221  static constexpr double fmin = -5;
2222  static constexpr double minloc[prob] = {0.1, 0.8, 0.3};
2223  static constexpr double centres[coef * prob] = {0.1, 0.8, 0.3};
2224  static constexpr double e_mat[coef * prob] = {5, 5, 5};
2225  static constexpr double coefs[coef] = {-5};
2226 };
2227 
2228 class court15: public regression {
2229  public:
2230  court15 ();
2231  void kernel (double *xs, double *ret) override;
2232  enum { prob = 3, coef = 1 };
2233 
2234  private:
2235  static constexpr rdims dims = { .prob = prob, .coef = coef };
2236  static constexpr double fmin = -5;
2237  static constexpr double minloc[prob] = {0.1, 0.8, 0.3};
2238  static constexpr double centres[coef * prob] = {0.1, 0.8, 0.3};
2239  static constexpr double e_mat[coef * prob] = {7, 7, 7};
2240  static constexpr double coefs[coef] = {-5};
2241 };
2242 
2243 class court16: public regression {
2244  public:
2245  court16 ();
2246  void kernel (double *xs, double *ret) override;
2247  enum { prob = 4, coef = 2 };
2248 
2249  private:
2250  static constexpr rdims dims = { .prob = prob, .coef = coef };
2251  static constexpr double fmin = -0.84221700966;
2252  static constexpr double minloc[prob] = {0.1858, 0.6858, 0.1858, 0.4858};
2253  static constexpr double centres[coef * prob] =
2254  {0.3, 0.8, 0.3, 0.6, 0.4, 0.9, 0.4, 0.7};
2255  static constexpr double e_mat[coef * prob] = {5, 5, 5, 5, 5, 5, 5, 5};
2256  static constexpr double coefs[coef] = {-5, 5};
2257 };
2258 
2259 class court17: public regression {
2260  public:
2261  court17 ();
2262  void kernel (double *xs, double *ret) override;
2263  enum { prob = 7, coef = 3 };
2264 
2265  private:
2266  static constexpr rdims dims = { .prob = prob, .coef = coef };
2267  static constexpr double fmin = -0.47089199032;
2268  static constexpr double minloc[prob] = {
2269  0.3125, 0.9166, 0.3125, 0.7062, 0.0397, 0.9270, 0.5979};
2270  static constexpr double centres[coef * prob] = {
2271  0.3, 0.8, 0.3, 0.6, 0.2, 0.8, 0.5,
2272  0.8, 0.3, 0.8, 0.2, 0.5, 0.2, 0.8,
2273  0.2, 0.7, 0.2, 0.5, 0.4, 0.7, 0.3};
2274 
2275  static constexpr double e_mat[coef * prob] = {
2276  4, 4, 4, 4, 4, 4, 4,
2277  4, 4, 4, 4, 4, 4, 4,
2278  4, 4, 4, 4, 4, 4, 4};
2279 
2280  static constexpr double coefs[coef] = {-5, 5, 5};
2281 };
2282 
2283 class court18: public regression {
2284  public:
2285  court18 ();
2286  void kernel (double *xs, double *ret) override;
2287  enum { prob = 8, coef = 5 };
2288 
2289  private:
2290  static constexpr rdims dims = { .prob = prob, .coef = coef };
2291  static constexpr double fmin = -1.42906223657;
2292  static constexpr double minloc[prob] =
2293  {0.2677, 0.8696, 0.2677, 0.6594, 0.1322, 0.9543, 0.0577, 0.295};
2294  static constexpr double centres[coef * prob] = {
2295  0.3, 0.8, 0.3, 0.6, 0.2, 0.8, 0.2, 0.4,
2296  0.3, 0.8, 0.3, 0.6, 0.2, 0.8, 0.2, 0.4,
2297  0.3, 0.8, 0.3, 0.6, 0.2, 0.8, 0.2, 0.4,
2298  0.8, 0.3, 0.8, 0.2, 0.5, 0.2, 0.5, 0.7,
2299  0.2, 0.7, 0.2, 0.5, 0.4, 0.3, 0.8, 0.8};
2300 
2301  static constexpr double e_mat[coef * prob] = {
2302  0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
2303  1, 1, 1, 1, 1, 1, 1, 1,
2304  4, 4, 4, 4, 4, 4, 4, 4,
2305  4, 4, 4, 4, 4, 4, 4, 4,
2306  4, 4, 4, 4, 4, 4, 4, 4};
2307 
2308  static constexpr double coefs[coef] = {-1, 2, -5, 4, 4};
2309 };
2310 
2311 class court19: public regression {
2312  public:
2313  court19 ();
2314  void kernel (double *xs, double *ret) override;
2315  enum { prob = 2, coef = 10 };
2316 
2317  private:
2318  static constexpr rdims dims = { .prob = prob, .coef = coef };
2319  static constexpr double fmin = -8.67263950474;
2320  static constexpr double minloc[prob] = {0.4, 0.8};
2321  static constexpr double centres[coef * prob] = {
2322  0.1, 0.1,
2323  0.3, 0.8,
2324  0.6, 0.7,
2325  0.7, 0.1,
2326  0.4, 0.3,
2327  0.2, 0.8,
2328  0.1, 0.2,
2329  0.9, 0.4,
2330  0.5, 0.5,
2331  0, 0.8};
2332 
2333  static constexpr double e_mat[coef * prob] = {
2334  3. , 3. ,
2335  3. , 3. ,
2336  3. , 3. ,
2337  1.5, 1.5,
2338  3. , 3. ,
2339  9. , 9. ,
2340  1.5, 1.5,
2341  3. , 3. ,
2342  6. , 6. ,
2343  3. , 3. };
2344 
2345  static constexpr double coefs[coef] =
2346  { -5, 4, -5, 5, 4, 2, -10, -4, 5, 5};
2347 };
2348 
2349 class court20: public regression {
2350  public:
2351  court20 ();
2352  void kernel (double *xs, double *ret) override;
2353  enum { prob = 2, coef = 10 };
2354 
2355  private:
2356  static constexpr rdims dims = { .prob = prob, .coef = coef };
2357  static constexpr double fmin = -6.59763663216;
2358  static constexpr double minloc[prob] = {0.7, 0.1};
2359  static constexpr double centres[coef * prob] = {
2360  0.1, 0.1,
2361  0.3, 0.8,
2362  0.6, 0.7,
2363  0.7, 0.1,
2364  0.4, 0.3,
2365  0.2, 0.8,
2366  0.1, 0.2,
2367  0.9, 0.4,
2368  0.5, 0.5,
2369  0, 0.8};
2370 
2371  static constexpr double e_mat[coef * prob] = {
2372  50., 50.,
2373  50., 50.,
2374  50., 50.,
2375  25., 25.,
2376  50., 50.,
2377  150., 150.,
2378  25., 25.,
2379  50., 50.,
2380  100., 100.,
2381  50., 50.};
2382 
2383  static constexpr double coefs[coef] =
2384  {5, -4, 5, -7, -4, -2, 10, 4, -2, -5};
2385 };
2386 
2387 class court21: public regression {
2388  public:
2389  court21 ();
2390  void kernel (double *xs, double *ret) override;
2391  enum { prob = 4, coef = 10 };
2392 
2393  private:
2394  static constexpr rdims dims = { .prob = prob, .coef = coef };
2395  static constexpr double fmin = -7.74993665759;
2396  static constexpr double minloc[prob] = {0.9, 0.4, 0.9, 0.8};
2397  static constexpr double centres[coef * prob] = {
2398  0.1, 0.1, 0.1, 0.1,
2399  0.3, 0.8, 0.5, 0.2,
2400  0, 0.7, 0.4, 0.9,
2401  0.7, 0.1, 0.2, 0.8,
2402  0.4, 0.3, 0.6, 0.6,
2403  0.2, 0.8, 0.2, 0.6,
2404  0.9, 0.2, 0.3, 0.4,
2405  0.9, 0.4, 0.9, 0.8,
2406  0.5, 0.5, 0.5, 0.5,
2407  0, 0.8, 0, 0.2};
2408 
2409  static constexpr double e_mat[coef * prob] = {
2410  10., 10., 40., 40.,
2411  10., 10., 40., 40.,
2412  30., 30., 40., 40.,
2413  5., 5., 20., 20.,
2414  10., 10., 5., 2.,
2415  30., 30., 10., 10.,
2416  5., 5., 40., 20.,
2417  10., 10., 20., 30.,
2418  20., 20., 30., 40.,
2419  10., 10., 5., 5.};
2420 
2421  static constexpr double coefs[coef] =
2422  {5, -4, 5, -5, 4, -2, 10, -8, -2, -5};
2423 };
2424 
2425 class court22: public regression {
2426  public:
2427  court22 ();
2428  void kernel (double *xs, double *ret) override;
2429  enum { prob = 5, coef = 7 };
2430 
2431  private:
2432  static constexpr rdims dims = { .prob = prob, .coef = coef };
2433  static constexpr double fmin = -3.08088199150;
2434  static constexpr double minloc[prob] =
2435  {0.2723, 0.4390, 0.8277, 0.3390, 0.3695};
2436  static constexpr double centres[coef * prob] = {
2437  1, 0.3, 0.1, 0.4, 0.1,
2438  0.9, 0.7, 0, 0.5, 0.8,
2439  0.5, 0.6, 0.6, 0.5, 0.5,
2440  0.2, 0.2, 0.4, 0, 0.3,
2441  0, 0.6, 1, 0.1, 0.8,
2442  0.3, 0.5, 0.8, 0, 0.2,
2443  0.8, 1, 0.1, 0.1, 0.5};
2444 
2445  static constexpr double e_mat[coef * prob] = {
2446  5, 30, 25, 5, 15,
2447  10, 30, 10, 5, 5,
2448  5, 10, 5, 10, 5,
2449  20, 5, 20, 5, 5,
2450  25, 30, 5, 15, 10,
2451  20, 10, 15, 5, 20,
2452  15, 25, 5, 20, 25};
2453 
2454  static constexpr double coefs[coef] =
2455  {3, 4, -4, 2, -3, -2, 6};
2456 };
2457 
2458 // Skip 23 because of bessel function issue; see above (12)
2459 
2460 class court24: public regression {
2461  public:
2462  court24 ();
2463  void kernel (double *xs, double *ret) override;
2464  enum { prob = 7, coef = 9 };
2465 
2466  private:
2467  static constexpr rdims dims = { .prob = prob, .coef = coef };
2468  static constexpr double fmin = -0.17296443752;
2469  static constexpr double minloc[prob] =
2470  {0.7, 0.1369, 0.6, 0.2, 0.5, 0.3, 0.2};
2471  static constexpr double centres[coef * prob] = {
2472  0, 0.4, 0, 0.3, 0.2, 0.3, 0.6,
2473  0.6, 0.8, 0.6, 0.7, 0.7, 0.1, 0.4,
2474  0.7, 0.7, 0, 0.5, 0, 0.6, 0.8,
2475  0.7, 0.5, 0.6, 0.2, 0.5, 0.3, 0.2,
2476  0.9, 0.3, 0.9, 0.8, 0.7, 1, 0,
2477  0.8, 0.1, 0.1, 0.2, 0.6, 0.1, 0.3,
2478  0.2, 0.7, 0.5, 0.5, 1, 0.7, 0.4,
2479  0.4, 0.1, 0.4, 0.1, 0.9, 0.2, 0.9,
2480  0.6, 0.9, 0.1, 0.4, 0.8, 0.7, 0.1};
2481 
2482  static constexpr double e_mat[coef * prob] = {
2483  0.2, 0.4, 0.4, 0.6, 1. , 0.4, 0.2,
2484  1. , 0.4, 0.6, 0.6, 0.8, 0.4, 0.8,
2485  1. , 0.8, 0.4, 0.2, 0.8, 0.2, 0.8,
2486  0.8, 0.2, 0.4, 1. , 0.2, 0.4, 1. ,
2487  0.4, 0.8, 0.8, 0.8, 1. , 1. , 0.6,
2488  0.2, 0.4, 1. , 0.4, 0.2, 0.8, 1.2,
2489  0.2, 1.2, 0.4, 0.2, 0.8, 1. , 1.2,
2490  0.2, 0.2, 1. , 0.2, 0.8, 1. , 1. ,
2491  0.6, 1. , 0.2, 0.6, 0.4, 1. , 0.8};
2492 
2493  static constexpr double coefs[coef] =
2494  {1, 2, 3, -4, 3, -2, -1, -2, 5};
2495 };
2496 
2497 class court25: public regression {
2498  public:
2499  court25 ();
2500  void kernel (double *xs, double *ret) override;
2501  enum { prob = 8, coef = 10 };
2502 
2503  private:
2504  static constexpr rdims dims = { .prob = prob, .coef = coef };
2505  static constexpr double fmin = -4.14042985928;
2506  static constexpr double minloc[prob] =
2507  {0.2, 0.6, 0.4, 0.8, 0.4, 0.3, 0.9, 0.8};
2508  static constexpr double centres[coef * prob] = {
2509  0.5, 0, 0.3, 0.5, 0.8, 0.3, 0.2, 1,
2510  0.6, 0.1, 0.6, 0.9, 0.2, 0, 0.5, 0.9,
2511  0.9, 0.9, 0, 1, 0.5, 1, 0.1, 0,
2512  0.2, 0.6, 0.4, 0.8, 0.4, 0.3, 0.9, 0.8,
2513  0.2, 0.8, 0.5, 0.1, 0.7, 0.2, 0.4, 0.8,
2514  0.2, 0.1, 0.7, 0.6, 0.2, 1, 0.6, 0.2,
2515  0.5, 0.8, 0.6, 0, 0.6, 0.3, 0.3, 0.2,
2516  0, 0, 0.2, 0.8, 0.9, 0.1, 0.1, 0.5,
2517  0.9, 0.9, 0.1, 0.3, 0.9, 0.8, 0.7, 0,
2518  0.3, 0.2, 0.9, 0.8, 0.9, 0.3, 0, 0.7};
2519 
2520  static constexpr double e_mat[coef * prob] = {
2521  25, 20, 20, 30, 20, 25, 15, 5,
2522  30, 30, 5, 25, 10, 25, 15, 10,
2523  10, 20, 25, 10, 15, 30, 25, 10,
2524  10, 5, 15, 10, 5, 5, 10, 20,
2525  20, 15, 30, 20, 5, 5, 25, 20,
2526  25, 5, 30, 5, 20, 30, 20, 30,
2527  25, 15, 15, 15, 5, 15, 20, 25,
2528  25, 20, 10, 25, 5, 25, 15, 25,
2529  30, 20, 10, 5, 5, 25, 25, 20,
2530  15, 15, 15, 15, 10, 25, 30, 5};
2531 
2532  static constexpr double coefs[coef] =
2533  {1, 2, 3, -5, 3, -2, -1, -2, 5, 2};
2534 };
2535 
2536 class court26: public regression {
2537  public:
2538  court26 ();
2539  void kernel (double *xs, double *ret) override;
2540  enum { prob = 3, coef = 11 };
2541 
2542  private:
2543  static constexpr rdims dims = { .prob = prob, .coef = coef };
2544  static constexpr double fmin = -1.55349754312;
2545  static constexpr double minloc[prob] = {0.5, 0.8, 0.3};
2546  static constexpr double centres[coef * prob] = {
2547  0.5, 0.2, 0,
2548  0.6, 0.2, 0.5,
2549  0.4, 0.6, 0.5,
2550  0.5, 0.7, 0.3,
2551  0.4, 0.4, 0.4,
2552  0.8, 0.5, 0.8,
2553  0, 0, 0.8,
2554  0.7, 0.7, 0.2,
2555  0.9, 0.3, 1,
2556  0.4, 0.4, 0.8,
2557  0.2, 0.8, 0.8};
2558 
2559  static constexpr double e_mat[coef * prob] = {
2560  1. , 1. , 1. ,
2561  3. , 2.5, 1.5,
2562  1.5, 1.5, 1.5,
2563  2.5, 1. , 2.5,
2564  2. , 3. , 1.5,
2565  1. , 1. , 1.5,
2566  1. , 2. , 0.5,
2567  2. , 3. , 2. ,
2568  0.5, 1.5, 2. ,
2569  1.5, 1. , 1. ,
2570  3. , 1. , 1.5};
2571 
2572  static constexpr double coefs[coef] =
2573  {1, 2, 3, -5, 3, -2, 1, -2, 5, 2, -2};
2574 };
2575 
2576 class court27: public regression {
2577  public:
2578  court27 ();
2579  void kernel (double *xs, double *ret) override;
2580  enum { prob = 3, coef = 11 };
2581 
2582  private:
2583  static constexpr rdims dims = { .prob = prob, .coef = coef };
2584  static constexpr double fmin = -1.76908456233;
2585  static constexpr double minloc[prob] = {0.6, 0.3, 0.5};
2586  static constexpr double centres[coef * prob] = {
2587  0.6, 0.3, 0.5,
2588  0.5, 0.2, 0,
2589  0.4, 0.6, 0.5,
2590  0.5, 0.7, 0.3,
2591  0.4, 0.4, 0.4,
2592  0.8, 0.5, 0.8,
2593  0, 0, 0.8,
2594  0.7, 0, 0.2,
2595  0.9, 0.3, 1,
2596  0.4, 0.4, 0.8,
2597  0.2, 0.8, 0.8};
2598 
2599  static constexpr double e_mat[coef * prob] = {
2600  2, 2, 2,
2601  6, 5, 3,
2602  3, 3, 3,
2603  5, 2, 5,
2604  4, 6, 3,
2605  2, 2, 3,
2606  2, 4, 1,
2607  4, 6, 4,
2608  1, 3, 4,
2609  3, 2, 2,
2610  6, 2, 3};
2611 
2612  static constexpr double coefs[coef] =
2613  {-10, 2, 3, 5, 3, 2, 1, 2, 5, 2, 2};
2614 };
2615 
2616 class court28: public regression {
2617  public:
2618  court28 ();
2619  void kernel (double *xs, double *ret) override;
2620  enum { prob = 4, coef = 11 };
2621 
2622  private:
2623  static constexpr rdims dims = { .prob = prob, .coef = coef };
2624  static constexpr double fmin = -7.69432628909;
2625  static constexpr double minloc[prob] =
2626  {0.4493, 0.0667, 0.9083, 0.2710};
2627  static constexpr double centres[coef * prob] = {
2628  0.6, 0.2, 0.8, 0.4,
2629  0.1, 0.1, 0.7, 0.9,
2630  1, 0.1, 0.8, 0.6,
2631  0, 0.3, 0.2, 1,
2632  0.2, 1, 0.8, 0,
2633  0.6, 0.9, 0.2, 0.9,
2634  0.1, 0.7, 0.6, 0.8,
2635  0.8, 0.4, 0.3, 0.2,
2636  0.1, 1, 0.8, 0.2,
2637  0.3, 0.9, 0.9, 0,
2638  0.8, 1, 0.6, 0.9};
2639 
2640  static constexpr double e_mat[coef * prob] = {
2641  1, 1, 1, 1,
2642  5, 3, 3, 3,
2643  4, 6, 2, 4,
2644  4, 1, 6, 3,
2645  2, 5, 3, 5,
2646  5, 4, 6, 1,
2647  6, 4, 1, 6,
2648  5, 1, 2, 1,
2649  1, 5, 4, 2,
2650  1, 3, 3, 2,
2651  4, 6, 6, 2};
2652 
2653  static constexpr double coefs[coef] =
2654  {-10, 2, 3, 5, 3, 2, 1, 2, 5, 2, 2};
2655 };
2656 
2669 class michalewicz02: public synthetic {
2670  public:
2671  michalewicz02 ();
2672  double evaluate (inst::set x) override;
2673 };
2674 
2687 class michalewicz06: public synthetic {
2688  public:
2689  michalewicz06 ();
2690  double evaluate (inst::set x) override;
2691 };
2692 
2706 class michalewicz12: public synthetic {
2707  public:
2708  michalewicz12 ();
2709  double evaluate (inst::set x) override;
2710 };
2711 
2721 class miele_cantrell: public synthetic {
2722  public:
2723  miele_cantrell();
2724  double evaluate (inst::set x) override;
2725 };
2726 
2739 class mishra01: public synthetic {
2740  public:
2741  mishra01(int dims);
2742  double evaluate (inst::set x) override;
2743 };
2744 
2757 class mishra02: public synthetic {
2758  public:
2759  mishra02(int dims);
2760  double evaluate (inst::set x) override;
2761 };
2762 
2773 class mishra03: public synthetic {
2774  public:
2775  mishra03();
2776  double evaluate (inst::set x) override;
2777 };
2778 
2789 class mishra04: public synthetic {
2790  public:
2791  mishra04();
2792  double evaluate (inst::set x) override;
2793 };
2794 
2808 class mishra05: public synthetic {
2809  public:
2810  mishra05();
2811  double evaluate (inst::set x) override;
2812 };
2813 
2828 class mishra06: public synthetic {
2829  public:
2830  mishra06();
2831  double evaluate (inst::set x) override;
2832 };
2833 
2834 // We exclude the mishra 07 (factorial function) for reasons of computational
2835 // unwieldiness; it is more of a computational hassle than useful or
2836 // challenging function to optimise over.
2837 
2854 class mishra08: public synthetic {
2855  public:
2856  mishra08();
2857  double evaluate (inst::set x) override;
2858 };
2859 
2876 class mishra09: public synthetic {
2877  public:
2878  mishra09();
2879  double evaluate (inst::set x) override;
2880 };
2881 
2892 class mishra10: public synthetic {
2893  public:
2894  mishra10();
2895  double evaluate (inst::set x) override;
2896 };
2897 
2910 class mishra11: public synthetic {
2911  public:
2912  mishra11(int dims);
2913  double evaluate (inst::set x) override;
2914 };
2915 
2926 class manifoldmin: public synthetic {
2927  public:
2928  manifoldmin(int dims);
2929  double evaluate (inst::set x) override;
2930 };
2931 
2941 class mog01: public synthetic {
2942  public:
2943  mog01 ();
2944  double evaluate (inst::set x) override;
2945 };
2946 
2947 // pick up from f85. in jamil et al
2948 // from l.3035 in evalset:test_funcs
2949 // https://al-roomi.org/ for reference
2950 
2951 } // end namespace syn
2952 
2953 #endif // __SYNTHETIC_H_
Definition: synthetic.hpp:2283
Definition: synthetic.hpp:1461
Definition: synthetic.hpp:2669
Definition: synthetic.hpp:228
Definition: synthetic.hpp:1004
Definition: synthetic.hpp:1983
Definition: synthetic.hpp:2387
Definition: synthetic.hpp:2789
std::vector< param_t * > sspace_t
Definition: types.hpp:318
Definition: types.hpp:150
Definition: synthetic.hpp:2164
double get_opt()
Definition: synthetic.hpp:123
Definition: synthetic.hpp:525
Definition: synthetic.hpp:1077
Definition: synthetic.hpp:1047
Definition: synthetic.hpp:380
u_int get_dims()
Definition: synthetic.hpp:132
Definition: synthetic.hpp:1802
Definition: synthetic.hpp:1685
Definition: synthetic.hpp:2497
dist_type
Definition: synthetic.hpp:1711
Definition: synthetic.hpp:2854
Definition: synthetic.hpp:1516
Definition: synthetic.hpp:2259
Definition: synthetic.hpp:1304
Definition: synthetic.hpp:1108
Definition: optimiser.hpp:147
Definition: benchmark.hpp:38
Definition: synthetic.hpp:1951
Definition: synthetic.hpp:2349
Definition: synthetic.hpp:1669
Definition: synthetic.hpp:2773
Definition: synthetic.hpp:809
Definition: synthetic.hpp:542
Definition: synthetic.hpp:617
Defines the main types used in the program.
int prob
Definition: synthetic.hpp:1696
Definition: synthetic.hpp:488
Definition: synthetic.hpp:363
Definition: synthetic.hpp:857
Definition: synthetic.hpp:1771
Definition: synthetic.hpp:1411
Definition: synthetic.hpp:2757
Definition: synthetic.hpp:2706
Definition: synthetic.hpp:313
Definition: synthetic.hpp:1177
Definition: synthetic.hpp:1156
Definition: types.hpp:47
Definition: synthetic.hpp:2460
Definition: synthetic.hpp:346
void set_properties(std::vector< properties > p)
Definition: synthetic.hpp:112
Definition: synthetic.hpp:2941
inst::set get_opt_param()
Definition: synthetic.hpp:118
Definition: synthetic.hpp:2243
sspace::sspace_t * get_search_space()
Definition: synthetic.hpp:105
Definition: synthetic.hpp:1571
Definition: synthetic.hpp:193
Definition: synthetic.hpp:1091
Definition: synthetic.hpp:729
Definition: synthetic.hpp:1639
Definition: synthetic.hpp:1909
Definition: synthetic.hpp:794
void update_opt(double opt)
Definition: synthetic.hpp:128
Definition: synthetic.hpp:2828
Definition: synthetic.hpp:926
Definition: synthetic.hpp:2121
Definition: synthetic.hpp:684
Definition: synthetic.hpp:1336
Definition: synthetic.hpp:1601
Definition: synthetic.hpp:2721
Definition: synthetic.hpp:826
Definition: synthetic.hpp:2616
Definition: synthetic.hpp:412
Definition: synthetic.hpp:1210
Definition: synthetic.hpp:877
Definition: synthetic.hpp:2739
Definition: synthetic.hpp:508
This file defines the base class for benchmarks.
Definition: synthetic.hpp:1228
Definition: synthetic.hpp:474
Definition: synthetic.hpp:968
Definition: synthetic.hpp:2687
Definition: synthetic.hpp:2047
This file contains definitions for &#39;core&#39; logic.
Definition: synthetic.hpp:1587
Definition: benchmark.hpp:81
Definition: synthetic.hpp:1062
Definition: synthetic.hpp:1396
Definition: synthetic.hpp:2228
Definition: synthetic.hpp:212
Definition: synthetic.hpp:556
Definition: synthetic.hpp:166
Definition: synthetic.hpp:62
Definition: synthetic.hpp:1692
Definition: synthetic.hpp:779
Definition: synthetic.hpp:1871
Definition: synthetic.hpp:2808
Definition: synthetic.hpp:586
Definition: synthetic.hpp:1124
Definition: synthetic.hpp:571
Definition: synthetic.hpp:2081
Definition: synthetic.hpp:1374
properties
Definition: synthetic.hpp:43
Definition: synthetic.hpp:1288
Definition: synthetic.hpp:445
Definition: synthetic.hpp:1192
Definition: synthetic.hpp:1139
Definition: synthetic.hpp:2576
Definition: synthetic.hpp:396
Definition: synthetic.hpp:2311
Definition: synthetic.hpp:330
Definition: synthetic.hpp:1428
Definition: synthetic.hpp:987
Definition: synthetic.hpp:948
Definition: synthetic.hpp:1655
Definition: synthetic.cpp:29
Definition: synthetic.hpp:1547
Definition: synthetic.hpp:2015
Definition: synthetic.hpp:2425
Definition: synthetic.hpp:2876
Definition: synthetic.hpp:2213
Definition: synthetic.hpp:748
Definition: synthetic.hpp:843
Definition: synthetic.hpp:601
Definition: synthetic.hpp:2926
int coef
Definition: synthetic.hpp:1699
Definition: synthetic.hpp:1709
Definition: synthetic.hpp:1622
Definition: synthetic.hpp:1266
Definition: synthetic.hpp:1833
Definition: synthetic.hpp:2910
Definition: synthetic.hpp:430
Definition: synthetic.hpp:460
Definition: synthetic.hpp:1251
Definition: synthetic.hpp:2536
Definition: synthetic.hpp:1446