paradiseo/trunk/paradiseo-eo/doc/html/gprop_8cpp-source.html
legrand c3aec878e5 Paradiseo-eo sources added
git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@40 331e1502-861f-0410-8da2-ba01fb791d7f
2006-12-12 14:49:08 +00:00

185 lines
12 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>EO: gprop.cpp Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
<div class="qindex"> <form class="search" action="search.php" method="get">
<a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a> | <span class="search"><u>S</u>earch&nbsp;for&nbsp;<input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div>
<div class="nav">
<a class="el" href="dir_000020.html">app</a>&nbsp;/&nbsp;<a class="el" href="dir_000023.html">gprop</a></div>
<h1>gprop.cpp</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">//-----------------------------------------------------------------------------</span>
00002 <span class="comment">// gprop</span>
00003 <span class="comment">//-----------------------------------------------------------------------------</span>
00004 <span class="keyword">using</span> <span class="keyword">namespace </span>std;
00005
00006 <span class="preprocessor">#include &lt;stdlib.h&gt;</span> <span class="comment">// EXIT_SUCCESS EXIT_FAILURE</span>
00007 <span class="preprocessor">#include &lt;stdexcept&gt;</span> <span class="comment">// exception </span>
00008 <span class="preprocessor">#include &lt;iostream&gt;</span> <span class="comment">// cerr cout</span>
00009 <span class="preprocessor">#include &lt;fstream&gt;</span> <span class="comment">// ifstream</span>
00010 <span class="preprocessor">#include &lt;string&gt;</span> <span class="comment">// string</span>
00011 <span class="preprocessor">#include &lt;eo&gt;</span> <span class="comment">// all usefull eo stuff</span>
00012 <span class="preprocessor">#include "gprop.h"</span> <span class="comment">// Chrom eoChromInit eoChromMutation eoChromXover eoChromEvaluator</span>
00013
00014 <span class="comment">//-----------------------------------------------------------------------------</span>
00015 <span class="comment">// global variables</span>
00016 <span class="comment">//-----------------------------------------------------------------------------</span>
00017
00018 <span class="keywordtype">unsigned</span> in, out, hidden;
00019 mlp::set train, validate, test;
00020
00021 <span class="comment">//-----------------------------------------------------------------------------</span>
00022 <span class="comment">// parameters</span>
00023 <span class="comment">//-----------------------------------------------------------------------------</span>
00024
00025 <a class="code" href="classeo_value_param.html">eoValueParam&lt;unsigned&gt;</a> pop_size(10, <span class="stringliteral">"pop_size"</span>, <span class="stringliteral">"population size"</span>, <span class="charliteral">'p'</span>);
00026 <a class="code" href="classeo_value_param.html">eoValueParam&lt;unsigned&gt;</a> generations(10, <span class="stringliteral">"generations"</span>, <span class="stringliteral">"number of generation"</span>, <span class="charliteral">'g'</span>);
00027 <a class="code" href="classeo_value_param.html">eoValueParam&lt;double&gt;</a> mut_rate(0.25, <span class="stringliteral">"mut_rate"</span>, <span class="stringliteral">"mutation rate"</span>, <span class="charliteral">'m'</span>);
00028 <a class="code" href="classeo_value_param.html">eoValueParam&lt;double&gt;</a> xover_rate(0.25, <span class="stringliteral">"xover_rate"</span>, <span class="stringliteral">"default crossover rate"</span>, <span class="charliteral">'x'</span>);
00029 <a class="code" href="classeo_value_param.html">eoValueParam&lt;string&gt;</a> file(<span class="stringliteral">""</span>, <span class="stringliteral">"file"</span>, <span class="stringliteral">"common start of patterns filenames *.trn *.val and *.tst"</span>, <span class="charliteral">'f'</span>);
00030 <a class="code" href="classeo_value_param.html">eoValueParam&lt;unsigned&gt;</a> hiddenp(0, <span class="stringliteral">"hidden"</span>, <span class="stringliteral">"number of neurons in hidden layer"</span>, <span class="charliteral">'d'</span>);
00031
00032 <span class="comment">//-----------------------------------------------------------------------------</span>
00033 <span class="comment">// auxiliar functions</span>
00034 <span class="comment">//-----------------------------------------------------------------------------</span>
00035
00036 <span class="keywordtype">void</span> arg(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>** argv);
00037 <span class="keywordtype">void</span> load_file(mlp::set&amp; s, <span class="keyword">const</span> string&amp; s);
00038 <span class="keywordtype">void</span> ga();
00039
00040 <span class="comment">//-----------------------------------------------------------------------------</span>
00041 <span class="comment">// main</span>
00042 <span class="comment">//-----------------------------------------------------------------------------</span>
00043
00044 <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>** argv)
00045 {
00046 <span class="keywordflow">try</span>
00047 {
00048 arg(argc, argv);
00049 ga();
00050 }
00051 <span class="keywordflow">catch</span> (exception&amp; e)
00052 {
00053 cerr &lt;&lt; argv[0] &lt;&lt; <span class="stringliteral">": "</span> &lt;&lt; e.what() &lt;&lt; endl;
00054 exit(EXIT_FAILURE);
00055 }
00056
00057 <span class="keywordflow">return</span> 0;
00058 }
00059
00060 <span class="comment">//-----------------------------------------------------------------------------</span>
00061 <span class="comment">// implementation</span>
00062 <span class="comment">//-----------------------------------------------------------------------------</span>
00063
00064 <span class="keywordtype">void</span> arg(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>** argv)
00065 {
00066 eoParser parser(argc, argv);
00067
00068 parser.processParam(pop_size, <span class="stringliteral">"genetic operators"</span>);
00069 parser.processParam(generations, <span class="stringliteral">"genetic operators"</span>);
00070 parser.processParam(mut_rate, <span class="stringliteral">"genetic operators"</span>);
00071 parser.processParam(xover_rate, <span class="stringliteral">"genetic operators"</span>);
00072 parser.processParam(file, <span class="stringliteral">"files"</span>);
00073 parser.processParam(hiddenp, <span class="stringliteral">"genetic operators"</span>);
00074
00075 <span class="keywordflow">if</span> (parser.userNeedsHelp())
00076 {
00077 parser.printHelp(cout);
00078 exit(EXIT_SUCCESS);
00079 }
00080
00081 load_file(train, <span class="stringliteral">"trn"</span>);
00082 load_file(validate, <span class="stringliteral">"val"</span>);
00083 load_file(test, <span class="stringliteral">"tst"</span>);
00084
00085 phenotype::trn_max = train.size();
00086 phenotype::val_max = validate.size();
00087 phenotype::tst_max = test.size();
00088
00089 in = train.front().input.size();
00090 out = train.front().output.size();
00091 gprop_use_datasets(&amp;train, &amp;validate, &amp;test);
00092 hidden = hiddenp.<a class="code" href="classeo_value_param.html#a2">value</a>();
00093 }
00094
00095 <span class="comment">//-----------------------------------------------------------------------------</span>
00096
00097 <span class="keywordtype">void</span> load_file(mlp::set&amp; set, <span class="keyword">const</span> string&amp; ext)
00098 {
00099 string filename = file.<a class="code" href="classeo_value_param.html#a2">value</a>(); filename += <span class="stringliteral">"."</span> + ext;
00100
00101 ifstream ifs(filename.c_str());
00102 <span class="keywordflow">if</span> (!ifs)
00103 {
00104 cerr &lt;&lt; <span class="stringliteral">"can't open file \""</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">"\""</span> &lt;&lt; endl;
00105 exit(EXIT_FAILURE);
00106 }
00107
00108 ifs &gt;&gt; set;
00109
00110 <span class="keywordflow">if</span> (set.size() == 0)
00111 {
00112 cerr &lt;&lt; filename &lt;&lt; <span class="stringliteral">" data file is empty!"</span>;
00113 exit(EXIT_FAILURE);
00114 }
00115 }
00116
00117 <span class="comment">//-----------------------------------------------------------------------------</span>
00118
00119 <span class="keywordtype">void</span> ga()
00120 {
00121 <span class="comment">// create population</span>
00122 eoInitChrom init;
00123 <a class="code" href="classeo_pop.html">eoPop&lt;Chrom&gt;</a> pop(pop_size.<a class="code" href="classeo_value_param.html#a2">value</a>(), init);
00124
00125 <span class="comment">// evaluate population</span>
00126 <a class="code" href="structeo_eval_func_ptr.html">eoEvalFuncPtr&lt;Chrom&gt;</a> evaluator(eoChromEvaluator);
00127 apply&lt;Chrom&gt;(evaluator, pop);
00128
00129 <span class="comment">// selector</span>
00130 <a class="code" href="classeo_stoch_tournament_select.html">eoStochTournamentSelect&lt;Chrom&gt;</a> select;
00131
00132 <span class="comment">// genetic operators</span>
00133 eoChromMutation mutation;
00134 eoChromXover xover;
00135
00136 <span class="comment">// stop condition</span>
00137 <a class="code" href="classeo_gen_continue.html">eoGenContinue&lt;Chrom&gt;</a> continuator1(generations.<a class="code" href="classeo_value_param.html#a2">value</a>());
00138 phenotype p; p.val_ok = validate.size() - 1; p.mse_error = 0;
00139 <a class="code" href="classeo_fit_continue.html">eoFitContinue&lt;Chrom&gt;</a> continuator2(p);
00140 <a class="code" href="classeo_combined_continue.html">eoCombinedContinue&lt;Chrom&gt;</a> continuator(continuator1, continuator2);
00141
00142 <span class="comment">// checkpoint</span>
00143 <a class="code" href="classeo_check_point.html">eoCheckPoint&lt;Chrom&gt;</a> checkpoint(continuator);
00144
00145 <span class="comment">// monitor</span>
00146 <a class="code" href="classeo_stdout_monitor.html">eoStdoutMonitor</a> monitor;
00147 checkpoint.add(monitor);
00148
00149 <span class="comment">// statistics</span>
00150 <a class="code" href="classeo_best_fitness_stat.html">eoBestFitnessStat&lt;Chrom&gt;</a> stats;
00151 checkpoint.add(stats);
00152 monitor.<a class="code" href="classeo_monitor.html#a1">add</a>(stats);
00153
00154 <span class="comment">// genetic algorithm</span>
00155 <a class="code" href="classeo_s_g_a.html">eoSGA&lt;Chrom&gt;</a> sga(select,
00156 xover, xover_rate.<a class="code" href="classeo_value_param.html#a2">value</a>(),
00157 mutation, mut_rate.<a class="code" href="classeo_value_param.html#a2">value</a>(),
00158 evaluator,
00159 checkpoint);
00160
00161 sga(pop);
00162
00163 cout &lt;&lt; <span class="stringliteral">"best: "</span> &lt;&lt; *max_element(pop.begin(), pop.end()) &lt;&lt; endl;
00164 }
00165
00166 <span class="comment">//-----------------------------------------------------------------------------</span>
00167
00168 <span class="comment">// Local Variables: </span>
00169 <span class="comment">// mode:C++</span>
00170 <span class="comment">// End:</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Oct 19 05:06:40 2006 for EO by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.3.9.1 </small></address>
</body>
</html>