1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.20"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>QuantLib: ArmijoLineSearch Class Reference</title>
<link href='https://fonts.googleapis.com/css?family=Merriweather+Sans:800' rel='stylesheet' type='text/css'>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="quantlibextra.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname"><a href="http://quantlib.org">
<img alt="QuantLib" src="QL-title.jpg"></a>
<div id="projectbrief">A free/open-source library for quantitative finance</div>
<div id="projectnumber">Reference manual - version 1.20</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.20 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespace_quant_lib.html">QuantLib</a></li><li class="navelem"><a class="el" href="class_quant_lib_1_1_armijo_line_search.html">ArmijoLineSearch</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> |
<a href="class_quant_lib_1_1_armijo_line_search-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">ArmijoLineSearch Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Armijo line search.
<a href="class_quant_lib_1_1_armijo_line_search.html#details">More...</a></p>
<p><code>#include <ql/math/optimization/armijo.hpp></code></p>
<div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
<img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for ArmijoLineSearch:</div>
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
<div class="center"><img src="class_quant_lib_1_1_armijo_line_search__inherit__graph.png" border="0" usemap="#a_armijo_line_search_inherit__map" alt="Inheritance graph"/></div>
<map name="_armijo_line_search_inherit__map" id="a_armijo_line_search_inherit__map">
<area shape="rect" title="Armijo line search." alt="" coords="5,80,129,107"/>
<area shape="rect" href="class_quant_lib_1_1_line_search.html" title="Base class for line search." alt="" coords="24,5,111,32"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:aa9b7b48a8c23873cce8850ca4c91b983"><td class="memItemLeft" align="right" valign="top"><a id="aa9b7b48a8c23873cce8850ca4c91b983"></a>
 </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_armijo_line_search.html#aa9b7b48a8c23873cce8850ca4c91b983">ArmijoLineSearch</a> (<a class="el" href="group__types.html#ga4bdf4bfe76b9ffa6fa64c47d8bfa0c78">Real</a> eps=1e-8, <a class="el" href="group__types.html#ga4bdf4bfe76b9ffa6fa64c47d8bfa0c78">Real</a> alpha=0.05, <a class="el" href="group__types.html#ga4bdf4bfe76b9ffa6fa64c47d8bfa0c78">Real</a> beta=0.65)</td></tr>
<tr class="memdesc:aa9b7b48a8c23873cce8850ca4c91b983"><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. <br /></td></tr>
<tr class="separator:aa9b7b48a8c23873cce8850ca4c91b983"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af20e38c359ea31c395a8ce7cc336635a"><td class="memItemLeft" align="right" valign="top"><a id="af20e38c359ea31c395a8ce7cc336635a"></a>
<a class="el" href="group__types.html#ga4bdf4bfe76b9ffa6fa64c47d8bfa0c78">Real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_armijo_line_search.html#af20e38c359ea31c395a8ce7cc336635a">operator()</a> (<a class="el" href="class_quant_lib_1_1_problem.html">Problem</a> &P, EndCriteria::Type &ecType, const <a class="el" href="class_quant_lib_1_1_end_criteria.html">EndCriteria</a> &, <a class="el" href="group__types.html#ga4bdf4bfe76b9ffa6fa64c47d8bfa0c78">Real</a> t_ini)</td></tr>
<tr class="memdesc:af20e38c359ea31c395a8ce7cc336635a"><td class="mdescLeft"> </td><td class="mdescRight">Perform line search. <br /></td></tr>
<tr class="separator:af20e38c359ea31c395a8ce7cc336635a"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="inherit_header pub_methods_class_quant_lib_1_1_line_search"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_quant_lib_1_1_line_search')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="class_quant_lib_1_1_line_search.html">LineSearch</a></td></tr>
<tr class="memitem:abf6329e7e510004f936417b572cd3feb inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="abf6329e7e510004f936417b572cd3feb"></a>
 </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_line_search.html#abf6329e7e510004f936417b572cd3feb">LineSearch</a> (<a class="el" href="group__types.html#ga4bdf4bfe76b9ffa6fa64c47d8bfa0c78">Real</a>=0.0)</td></tr>
<tr class="memdesc:abf6329e7e510004f936417b572cd3feb inherit pub_methods_class_quant_lib_1_1_line_search"><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. <br /></td></tr>
<tr class="separator:abf6329e7e510004f936417b572cd3feb inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aa1525d9d1f8f851f1371337be8d9a587 inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="aa1525d9d1f8f851f1371337be8d9a587"></a>
virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_line_search.html#aa1525d9d1f8f851f1371337be8d9a587">~LineSearch</a> ()</td></tr>
<tr class="memdesc:aa1525d9d1f8f851f1371337be8d9a587 inherit pub_methods_class_quant_lib_1_1_line_search"><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br /></td></tr>
<tr class="separator:aa1525d9d1f8f851f1371337be8d9a587 inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a73029249454596185357bd919ecc66e7 inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="a73029249454596185357bd919ecc66e7"></a>
const <a class="el" href="class_quant_lib_1_1_array.html">Array</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_line_search.html#a73029249454596185357bd919ecc66e7">lastX</a> ()</td></tr>
<tr class="memdesc:a73029249454596185357bd919ecc66e7 inherit pub_methods_class_quant_lib_1_1_line_search"><td class="mdescLeft"> </td><td class="mdescRight">return last x value <br /></td></tr>
<tr class="separator:a73029249454596185357bd919ecc66e7 inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:acb191c566a812e3e7d1406977c0fb9dd inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="acb191c566a812e3e7d1406977c0fb9dd"></a>
<a class="el" href="group__types.html#ga4bdf4bfe76b9ffa6fa64c47d8bfa0c78">Real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_line_search.html#acb191c566a812e3e7d1406977c0fb9dd">lastFunctionValue</a> () const</td></tr>
<tr class="memdesc:acb191c566a812e3e7d1406977c0fb9dd inherit pub_methods_class_quant_lib_1_1_line_search"><td class="mdescLeft"> </td><td class="mdescRight">return last cost function value <br /></td></tr>
<tr class="separator:acb191c566a812e3e7d1406977c0fb9dd inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a0a99d489f61c963d573fb9eb2a404c1d inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="a0a99d489f61c963d573fb9eb2a404c1d"></a>
const <a class="el" href="class_quant_lib_1_1_array.html">Array</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_line_search.html#a0a99d489f61c963d573fb9eb2a404c1d">lastGradient</a> ()</td></tr>
<tr class="memdesc:a0a99d489f61c963d573fb9eb2a404c1d inherit pub_methods_class_quant_lib_1_1_line_search"><td class="mdescLeft"> </td><td class="mdescRight">return last gradient <br /></td></tr>
<tr class="separator:a0a99d489f61c963d573fb9eb2a404c1d inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aaaca9b17704b9a7356e394a6e56be66a inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="aaaca9b17704b9a7356e394a6e56be66a"></a>
<a class="el" href="group__types.html#ga4bdf4bfe76b9ffa6fa64c47d8bfa0c78">Real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_line_search.html#aaaca9b17704b9a7356e394a6e56be66a">lastGradientNorm2</a> () const</td></tr>
<tr class="memdesc:aaaca9b17704b9a7356e394a6e56be66a inherit pub_methods_class_quant_lib_1_1_line_search"><td class="mdescLeft"> </td><td class="mdescRight">return square norm of last gradient <br /></td></tr>
<tr class="separator:aaaca9b17704b9a7356e394a6e56be66a inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:acf96853903414c5ad66169f291938f4c inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="acf96853903414c5ad66169f291938f4c"></a>
bool </td><td class="memItemRight" valign="bottom"><b>succeed</b> () const</td></tr>
<tr class="separator:acf96853903414c5ad66169f291938f4c inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a5014094d4595b63fad08d361f70bea98 inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="a5014094d4595b63fad08d361f70bea98"></a>
<a class="el" href="group__types.html#ga4bdf4bfe76b9ffa6fa64c47d8bfa0c78">Real</a> </td><td class="memItemRight" valign="bottom"><b>update</b> (<a class="el" href="class_quant_lib_1_1_array.html">Array</a> &params, const <a class="el" href="class_quant_lib_1_1_array.html">Array</a> &direction, <a class="el" href="group__types.html#ga4bdf4bfe76b9ffa6fa64c47d8bfa0c78">Real</a> beta, const <a class="el" href="class_quant_lib_1_1_constraint.html">Constraint</a> &constraint)</td></tr>
<tr class="separator:a5014094d4595b63fad08d361f70bea98 inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aa84d8a98a895f6cf2dce4fd113140c60 inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="aa84d8a98a895f6cf2dce4fd113140c60"></a>
const <a class="el" href="class_quant_lib_1_1_array.html">Array</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_line_search.html#aa84d8a98a895f6cf2dce4fd113140c60">searchDirection</a> () const</td></tr>
<tr class="memdesc:aa84d8a98a895f6cf2dce4fd113140c60 inherit pub_methods_class_quant_lib_1_1_line_search"><td class="mdescLeft"> </td><td class="mdescRight">current value of the search direction <br /></td></tr>
<tr class="separator:aa84d8a98a895f6cf2dce4fd113140c60 inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a8925a1dc9b83be8f1181b1c638804a1f inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="a8925a1dc9b83be8f1181b1c638804a1f"></a>
<a class="el" href="class_quant_lib_1_1_array.html">Array</a> & </td><td class="memItemRight" valign="bottom"><b>searchDirection</b> ()</td></tr>
<tr class="separator:a8925a1dc9b83be8f1181b1c638804a1f inherit pub_methods_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
Additional Inherited Members</h2></td></tr>
<tr class="inherit_header pro_attribs_class_quant_lib_1_1_line_search"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_quant_lib_1_1_line_search')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="class_quant_lib_1_1_line_search.html">LineSearch</a></td></tr>
<tr class="memitem:a2279b9a5a0693be810780a356ce2593f inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="a2279b9a5a0693be810780a356ce2593f"></a>
<a class="el" href="class_quant_lib_1_1_array.html">Array</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_line_search.html#a2279b9a5a0693be810780a356ce2593f">searchDirection_</a></td></tr>
<tr class="memdesc:a2279b9a5a0693be810780a356ce2593f inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="mdescLeft"> </td><td class="mdescRight">current values of the search direction <br /></td></tr>
<tr class="separator:a2279b9a5a0693be810780a356ce2593f inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a633de5cce68edbe62dcc0104c92e69c1 inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="a633de5cce68edbe62dcc0104c92e69c1"></a>
<a class="el" href="class_quant_lib_1_1_array.html">Array</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_line_search.html#a633de5cce68edbe62dcc0104c92e69c1">xtd_</a></td></tr>
<tr class="memdesc:a633de5cce68edbe62dcc0104c92e69c1 inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="mdescLeft"> </td><td class="mdescRight">new x and its gradient <br /></td></tr>
<tr class="separator:a633de5cce68edbe62dcc0104c92e69c1 inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a28dad9f0113c33c5641f4c87b6c5208c inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="a28dad9f0113c33c5641f4c87b6c5208c"></a>
<a class="el" href="class_quant_lib_1_1_array.html">Array</a> </td><td class="memItemRight" valign="bottom"><b>gradient_</b></td></tr>
<tr class="separator:a28dad9f0113c33c5641f4c87b6c5208c inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af784d8fad068c2fcb91696bd7a7346c3 inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="af784d8fad068c2fcb91696bd7a7346c3"></a>
<a class="el" href="group__types.html#ga4bdf4bfe76b9ffa6fa64c47d8bfa0c78">Real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_line_search.html#af784d8fad068c2fcb91696bd7a7346c3">qt_</a></td></tr>
<tr class="memdesc:af784d8fad068c2fcb91696bd7a7346c3 inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="mdescLeft"> </td><td class="mdescRight">cost function value and gradient norm corresponding to xtd_ <br /></td></tr>
<tr class="separator:af784d8fad068c2fcb91696bd7a7346c3 inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aca10938722a51a63857d6bc7bc1f4717 inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="aca10938722a51a63857d6bc7bc1f4717"></a>
<a class="el" href="group__types.html#ga4bdf4bfe76b9ffa6fa64c47d8bfa0c78">Real</a> </td><td class="memItemRight" valign="bottom"><b>qpt_</b></td></tr>
<tr class="separator:aca10938722a51a63857d6bc7bc1f4717 inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a1bdb6aaa82b6a980db5312bcc3c86c3a inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="memItemLeft" align="right" valign="top"><a id="a1bdb6aaa82b6a980db5312bcc3c86c3a"></a>
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_line_search.html#a1bdb6aaa82b6a980db5312bcc3c86c3a">succeed_</a></td></tr>
<tr class="memdesc:a1bdb6aaa82b6a980db5312bcc3c86c3a inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="mdescLeft"> </td><td class="mdescRight">flag to know if linesearch succeed <br /></td></tr>
<tr class="separator:a1bdb6aaa82b6a980db5312bcc3c86c3a inherit pro_attribs_class_quant_lib_1_1_line_search"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Armijo line search. </p>
<p>Let \( \alpha \) and \( \beta \) be 2 scalars in \( [0,1] \). Let \( x \) be the current value of the unknown, \( d \) the search direction and \( t \) the step. Let \( f \) be the function to minimize. The line search stops when \( t \) verifies </p><p class="formulaDsp">
\[ f(x + t \cdot d) - f(x) \leq -\alpha t f'(x+t \cdot d) \]
</p>
<p> and </p><p class="formulaDsp">
\[ f(x+\frac{t}{\beta} \cdot d) - f(x) > -\frac{\alpha}{\beta} t f'(x+t \cdot d) \]
</p>
<p>(see Polak, Algorithms and consistent approximations, Optimization, volume 124 of Applied Mathematical Sciences, Springer-Verlag, NY, 1997) </p>
</div></div><!-- contents -->
<!-- HTML footer for doxygen 1.8.9.1-->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by <a href="http://www.doxygen.org/index.html">Doxygen</a>
1.8.20
</small></address>
</body>
</html>
|