Files Classes Functions Hierarchy
00001 #include <iostream> 00002 #include <cmath> 00003 #include <iomanip> 00004 using namespace std; 00005 00006 #include <commandline.h> 00007 #include <exploreh.h> 00008 #include <exploreline.h> 00009 #include <explorelinetest.h> 00010 #include <explorequad.h> 00011 #include <lineoptimizergold.h> 00012 #include <print.h> 00013 #include <probparab.h> 00014 #include <probsysequ01.h> 00015 00016 00017 00018 void explorelinetest01(int argc, char** argv) 00019 { 00020 cout << "explore and golden ratio line search" << endl; 00021 cout << " k=3 lineiter=10 are defaults." << endl; 00022 00023 00024 typedef exploreh<probparab2,double*,double> exp2; 00025 typedef lineoptimizergold<probparab2&,double*,double*,double> lnmin; 00026 00027 commandline cmd(argc,argv); 00028 uint lineiter(10); 00029 cmd.mapvar(lineiter,"lineiter"); 00030 uint k(3); 00031 cmd.mapvar(k,"k"); 00032 00033 exploreline< exp2, lnmin > w(3,lineiter); 00034 00035 cmd.mapvar(w.linet0,"t0"); 00036 cmd.mapvar(w.linet1,"t1"); 00037 00038 double x0[3] = { 0.0, 0.0, 0.0 }; 00039 w.reset(x0); 00040 //cout << printvecfunc(w.xi,3) << endl; 00041 00042 for (uint i=0; i<k; ++i) 00043 { 00044 ++w; 00045 } 00046 00047 double dist=0.0; 00048 dist = abs(w.xi[0]-1.0) + abs(w.xi[1]-2.0) + abs(w.xi[2]-5.0); 00049 00050 cout << "Compare with true solution" << endl; 00051 cout << "fn-count, k, lineiter, distance" << endl; 00052 cout << w.fn.counter << " "; 00053 cout << k << " "; 00054 cout << lineiter << " "; 00055 cout << scientific << dist << endl; 00056 00057 00058 //uintc imax=5; 00059 //for (uint i=0; i<imax; ++i) 00060 // ++w; 00061 //cout << printvecfunc(w.xi,3) << endl; 00062 00063 } 00064 00065 00066 void explorelinetest02(int argc, char** argv) 00067 { 00068 cout << "exploreh with quad and golden ratio line search" << endl; 00069 cout << " k=3 lineiter=10 are defaults." << endl; 00070 00071 00072 typedef explorequad< exploreh<probparab2,double*,double> > eh2; 00073 // typedef exploreh<probparab2,double*,double> exp2; 00074 typedef lineoptimizergold<probparab2&,double*,double*,double> lnmin; 00075 00076 commandline cmd(argc,argv); 00077 uint lineiter(10); 00078 cmd.mapvar(lineiter,"lineiter"); 00079 uint k(3); 00080 cmd.mapvar(k,"k"); 00081 00082 exploreline< eh2, lnmin > w(3,lineiter); 00083 00084 cmd.mapvar(w.linet0,"t0"); 00085 cmd.mapvar(w.linet1,"t1"); 00086 00087 double x0[3] = { 0.0, 0.0, 0.0 }; 00088 w.reset(x0); 00089 //cout << printvecfunc(w.xi,3) << endl; 00090 00091 00092 //w.move(); 00093 00094 00095 for (uint i=0; i<k; ++i) 00096 ++w; 00097 00098 00099 double dist=0.0; 00100 dist = abs(w.xi[0]-1.0) + abs(w.xi[1]-2.0) + abs(w.xi[2]-5.0); 00101 00102 cout << "Compare with true solution" << endl; 00103 cout << "fn-count, k, lineiter, distance" << endl; 00104 cout << w.fn.counter << " "; 00105 cout << k << " "; 00106 cout << lineiter << " "; 00107 cout << scientific << dist << endl; 00108 } 00109 00110 00111 00112 00113 void explorelinetest03(int argc, char** argv) 00114 { 00115 cout << "explore and golden ratio line search" << endl; 00116 cout << " k=3 lineiter=10 are defaults." << endl; 00117 00118 typedef exploreh<probsysequ01,double*,double> exp2; 00119 typedef lineoptimizergold<probsysequ01&,double*,double*,double> lnmin; 00120 00121 commandline cmd(argc,argv); 00122 uint lineiter(10); 00123 cmd.mapvar(lineiter,"lineiter"); 00124 uint k(3); 00125 cmd.mapvar(k,"k"); 00126 00127 exploreline< exp2, lnmin > w(2,lineiter); 00128 00129 cmd.mapvar(w.linet0,"t0"); 00130 cmd.mapvar(w.linet1,"t1"); 00131 00132 double x0[2] = { 0.5, 0.5 }; 00133 w.reset(x0); 00134 00135 for (uint i=0; i<k; ++i) 00136 { 00137 //cout << printvecfunc(w.xi,2) << endl; 00138 ++w; 00139 // cout << SHOW(w.fn.counter) << endl; 00140 } 00141 00142 long double y0((long double)0.2); 00143 long double y1((long double)2.0/(long double)3.0); 00144 long double dist = (y0-w.xi[0])*(y0-w.xi[0]) + (y1-w.xi[1])*(y1-w.xi[1]); 00145 00146 cout << "Compare with true solution" << endl; 00147 cout << "fn-count, k, lineiter, distance" << endl; 00148 cout << w.fn.counter << " "; 00149 cout << k << " "; 00150 cout << lineiter << " "; 00151 cout << scientific << dist << endl; 00152 00153 } 00154 00155 00156 00157
1.5.8