Introduction
Introduction Statistics Contact Development Disclaimer Help
tmain.B.cpp - numeric - C++ library with numerical algorithms
git clone git://src.adamsgaard.dk/numeric
Log
Files
Refs
LICENSE
---
tmain.B.cpp (2518B)
---
1 #include <iostream>
2 #include <armadillo>
3 #include <functional>
4 #include "header.h"
5 #include "functions.h"
6 #include "downhill_simplex.h"
7 using namespace arma;
8 using namespace std;
9
10 int main(int argc, char* argv[])
11 {
12 // Namespace declarations
13 using std::cout;
14
15 // Calculate machine precision
16 double eps = 1.0f;
17 while (1.0f + eps != 1.0f)
18 eps /= 2.0f;
19
20 cout << "\n\033[1;36m## Minimization with downhill-simplex, part B ##\…
21
22 // Try amoeba on Rosenbrock's valley function
23 cout << "\n\033[1;33m--- Rosenbrock's valley function ---\033[0m\n";
24 int d = 2;
25 vec p(2); p[0]=5; p[1]=6;
26 if (verbose == true)
27 p.print("Initial simplex is chosen around the point:");
28 vector<vec> simplex;
29 vector<vec> simplex_mod;
30 for(int i=0; i<d+1; ++i) {
31 simplex.push_back(p);
32 simplex_mod.push_back(p);
33 }
34 double dx = 1;
35 for(int i=0; i<d; ++i) {
36 simplex[i][i] += dx;
37 simplex_mod[i][i] += dx;
38 }
39 amoeba A(rosenbrock, simplex);
40 ncalls = 0;
41 A.downhill(10.0f*eps);
42 if (verbose == true)
43 A.low().print("Lowest point:");
44 cout << "Amoeba converged after " << ncalls << " calls\n";
45 amoeba A_mod(rosenbrock, simplex_mod);
46 ncalls = 0;
47 A_mod.downhill_mod(10.0f*eps);
48 if (verbose == true)
49 A_mod.low().print("Lowest point (modified downhill)");
50 cout << "Amoeba converged after " << ncalls << " calls with modified m…
51
52
53 // Try amoeba on Himmelblau's function
54 cout << "\n\033[1;33m--- Himmelblau's function ---\033[0m\n";
55 vec p2(2); p2[0]=5; p2[1]=6;
56 if (verbose == true)
57 p2.print("Initial simplex is chosen around the point:");
58 vector<vec> simplex2;
59 vector<vec> simplex2_mod;
60 for(int i=0; i<d+1; ++i) {
61 simplex2.push_back(p2);
62 simplex2_mod.push_back(p2);
63 }
64 double dx2 = 1;
65 for(int i=0; i<d; ++i) {
66 simplex2[i][i] += dx2;
67 simplex2_mod[i][i] += dx2;
68 }
69 amoeba A2(himmelblau, simplex2);
70 ncalls = 0;
71 A2.downhill(10.0f*eps);
72 if (verbose == true)
73 A2.low().print("Lowest point:");
74 cout << "Amoeba converged after " << ncalls << " calls\n";
75 amoeba A2_mod(himmelblau, simplex2_mod);
76 ncalls = 0;
77 A2_mod.downhill_mod(10.0f*eps);
78 if (verbose == true)
79 A2_mod.low().print("Lowest point (modified downhill)");
80 cout << "Amoeba converged after " << ncalls << " calls with modified m…
81
82 // Return successfully
83 return 0;
84 }
85
86 void check(const bool statement)
87 {
88 using std::cout;
89 if (statement == true)
90 cout << "\t\033[0;32mPassed\033[0m\n";
91 else
92 cout << "\t\033[1;31mFail!!\033[0m\n";
93 }
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.