Files
ortools-clone/docs/cpp_algorithms/classoperations__research_1_1KnapsackSolver.html
2019-06-29 18:18:08 +02:00

419 lines
22 KiB
HTML

<!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>
<title>OR-Tools</title>
<meta http-equiv="Content-Type" content="text/html;"/>
<meta charset="utf-8"/>
<!--<link rel='stylesheet' type='text/css' href="https://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic"/>-->
<link rel="stylesheet" type="text/css" href="ortools.css" title="default" media="screen,print" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
</head>
<body>
<div id="banner-container">
<div id="banner">
<span id="sfml">OR-Tools 7.2</span>
</div>
</div>
<link rel="icon" href="https://developers.google.com/optimization/images/orLogo.png">
<div id="content">
<!-- Generated by Doxygen 1.8.15 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceoperations__research.html">operations_research</a></li><li class="navelem"><a class="el" href="classoperations__research_1_1KnapsackSolver.html">KnapsackSolver</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classoperations__research_1_1KnapsackSolver-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">operations_research::KnapsackSolver Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p><code>#include &lt;<a class="el" href="knapsack__solver_8h_source.html">knapsack_solver.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a81ce17438663c39f7793e8db92ff1893"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1KnapsackSolver.html#a81ce17438663c39f7793e8db92ff1893">SolverType</a> { <a class="el" href="classoperations__research_1_1KnapsackSolver.html#a81ce17438663c39f7793e8db92ff1893a4d72c45990d1a81e3f5bcdaf6de72096">KNAPSACK_BRUTE_FORCE_SOLVER</a> = 0,
<a class="el" href="classoperations__research_1_1KnapsackSolver.html#a81ce17438663c39f7793e8db92ff1893aa6c3b9157b2506f5a53b0c73165c8f9b">KNAPSACK_64ITEMS_SOLVER</a> = 1,
<a class="el" href="classoperations__research_1_1KnapsackSolver.html#a81ce17438663c39f7793e8db92ff1893a9c02fa29c925bc1d37cba92490998132">KNAPSACK_DYNAMIC_PROGRAMMING_SOLVER</a> = 2,
<a class="el" href="classoperations__research_1_1KnapsackSolver.html#a81ce17438663c39f7793e8db92ff1893ae8c15c25eaf606f5f853821aaabba164">KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER</a> = 5
}</td></tr>
<tr class="separator:a81ce17438663c39f7793e8db92ff1893"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><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:a7638cb76df7cb79d956dda62d179a554"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1KnapsackSolver.html#a7638cb76df7cb79d956dda62d179a554">KnapsackSolver</a> (const std::string &amp;solver_name)</td></tr>
<tr class="separator:a7638cb76df7cb79d956dda62d179a554"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab36466b997fe3f25955461708061ce40"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1KnapsackSolver.html#ab36466b997fe3f25955461708061ce40">KnapsackSolver</a> (<a class="el" href="classoperations__research_1_1KnapsackSolver.html#a81ce17438663c39f7793e8db92ff1893">SolverType</a> solver_type, const std::string &amp;solver_name)</td></tr>
<tr class="separator:ab36466b997fe3f25955461708061ce40"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6d1a38c9a1c607e80d05720372ace4d"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1KnapsackSolver.html#ac6d1a38c9a1c607e80d05720372ace4d">~KnapsackSolver</a> ()</td></tr>
<tr class="separator:ac6d1a38c9a1c607e80d05720372ace4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad2a0397c061a1cf0bfc759b35f23e463"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1KnapsackSolver.html#ad2a0397c061a1cf0bfc759b35f23e463">Init</a> (const std::vector&lt; int64 &gt; &amp;profits, const std::vector&lt; std::vector&lt; int64 &gt; &gt; &amp;weights, const std::vector&lt; int64 &gt; &amp;capacities)</td></tr>
<tr class="memdesc:ad2a0397c061a1cf0bfc759b35f23e463"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes the solver and enters the problem to be solved. <a href="#ad2a0397c061a1cf0bfc759b35f23e463">More...</a><br /></td></tr>
<tr class="separator:ad2a0397c061a1cf0bfc759b35f23e463"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7c3b5825c8effd86de03a610d1a38ed7"><td class="memItemLeft" align="right" valign="top">int64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1KnapsackSolver.html#a7c3b5825c8effd86de03a610d1a38ed7">Solve</a> ()</td></tr>
<tr class="memdesc:a7c3b5825c8effd86de03a610d1a38ed7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Solves the problem and returns the profit of the optimal solution. <a href="#a7c3b5825c8effd86de03a610d1a38ed7">More...</a><br /></td></tr>
<tr class="separator:a7c3b5825c8effd86de03a610d1a38ed7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a170ccb08012026c5a438fcf16feb6faa"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1KnapsackSolver.html#a170ccb08012026c5a438fcf16feb6faa">BestSolutionContains</a> (int item_id) const</td></tr>
<tr class="memdesc:a170ccb08012026c5a438fcf16feb6faa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if the item 'item_id' is packed in the optimal knapsack. <a href="#a170ccb08012026c5a438fcf16feb6faa">More...</a><br /></td></tr>
<tr class="separator:a170ccb08012026c5a438fcf16feb6faa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a96f960b29496f637af7a3eeb10e606ab"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1KnapsackSolver.html#a96f960b29496f637af7a3eeb10e606ab">IsSolutionOptimal</a> () const</td></tr>
<tr class="memdesc:a96f960b29496f637af7a3eeb10e606ab"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if the solution was proven optimal. <a href="#a96f960b29496f637af7a3eeb10e606ab">More...</a><br /></td></tr>
<tr class="separator:a96f960b29496f637af7a3eeb10e606ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad2950d2690930dd8562b40d29bb7002e"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1KnapsackSolver.html#ad2950d2690930dd8562b40d29bb7002e">GetName</a> () const</td></tr>
<tr class="separator:ad2950d2690930dd8562b40d29bb7002e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0408f46c96d0dbf4eb463fa385778593"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1KnapsackSolver.html#a0408f46c96d0dbf4eb463fa385778593">use_reduction</a> () const</td></tr>
<tr class="separator:a0408f46c96d0dbf4eb463fa385778593"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb429376ba12d5541f22a905a728b0e1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1KnapsackSolver.html#abb429376ba12d5541f22a905a728b0e1">set_use_reduction</a> (bool <a class="el" href="classoperations__research_1_1KnapsackSolver.html#a0408f46c96d0dbf4eb463fa385778593">use_reduction</a>)</td></tr>
<tr class="separator:abb429376ba12d5541f22a905a728b0e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0f6ca3ef8483871052325ea2d04ca72d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1KnapsackSolver.html#a0f6ca3ef8483871052325ea2d04ca72d">set_time_limit</a> (double time_limit_seconds)</td></tr>
<tr class="memdesc:a0f6ca3ef8483871052325ea2d04ca72d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Time limit in seconds. <a href="#a0f6ca3ef8483871052325ea2d04ca72d">More...</a><br /></td></tr>
<tr class="separator:a0f6ca3ef8483871052325ea2d04ca72d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock">
<p class="definition">Definition at line <a class="el" href="knapsack__solver_8h_source.html#l00117">117</a> of file <a class="el" href="knapsack__solver_8h_source.html">knapsack_solver.h</a>.</p>
</div><h2 class="groupheader">Member Enumeration Documentation</h2>
<a id="a81ce17438663c39f7793e8db92ff1893"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a81ce17438663c39f7793e8db92ff1893">&#9670;&nbsp;</a></span>SolverType</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="classoperations__research_1_1KnapsackSolver.html#a81ce17438663c39f7793e8db92ff1893">operations_research::KnapsackSolver::SolverType</a></td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a81ce17438663c39f7793e8db92ff1893a4d72c45990d1a81e3f5bcdaf6de72096"></a>KNAPSACK_BRUTE_FORCE_SOLVER&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a81ce17438663c39f7793e8db92ff1893aa6c3b9157b2506f5a53b0c73165c8f9b"></a>KNAPSACK_64ITEMS_SOLVER&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a81ce17438663c39f7793e8db92ff1893a9c02fa29c925bc1d37cba92490998132"></a>KNAPSACK_DYNAMIC_PROGRAMMING_SOLVER&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a81ce17438663c39f7793e8db92ff1893ae8c15c25eaf606f5f853821aaabba164"></a>KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="knapsack__solver_8h_source.html#l00119">119</a> of file <a class="el" href="knapsack__solver_8h_source.html">knapsack_solver.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a7638cb76df7cb79d956dda62d179a554"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7638cb76df7cb79d956dda62d179a554">&#9670;&nbsp;</a></span>KnapsackSolver() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">operations_research::KnapsackSolver::KnapsackSolver </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>solver_name</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ab36466b997fe3f25955461708061ce40"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab36466b997fe3f25955461708061ce40">&#9670;&nbsp;</a></span>KnapsackSolver() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">operations_research::KnapsackSolver::KnapsackSolver </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1KnapsackSolver.html#a81ce17438663c39f7793e8db92ff1893">SolverType</a>&#160;</td>
<td class="paramname"><em>solver_type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>solver_name</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ac6d1a38c9a1c607e80d05720372ace4d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac6d1a38c9a1c607e80d05720372ace4d">&#9670;&nbsp;</a></span>~KnapsackSolver()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual operations_research::KnapsackSolver::~KnapsackSolver </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a170ccb08012026c5a438fcf16feb6faa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a170ccb08012026c5a438fcf16feb6faa">&#9670;&nbsp;</a></span>BestSolutionContains()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool operations_research::KnapsackSolver::BestSolutionContains </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>item_id</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if the item 'item_id' is packed in the optimal knapsack. </p>
</div>
</div>
<a id="ad2950d2690930dd8562b40d29bb7002e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad2950d2690930dd8562b40d29bb7002e">&#9670;&nbsp;</a></span>GetName()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::string operations_research::KnapsackSolver::GetName </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ad2a0397c061a1cf0bfc759b35f23e463"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad2a0397c061a1cf0bfc759b35f23e463">&#9670;&nbsp;</a></span>Init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void operations_research::KnapsackSolver::Init </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; int64 &gt; &amp;&#160;</td>
<td class="paramname"><em>profits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; std::vector&lt; int64 &gt; &gt; &amp;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; int64 &gt; &amp;&#160;</td>
<td class="paramname"><em>capacities</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes the solver and enters the problem to be solved. </p>
</div>
</div>
<a id="a96f960b29496f637af7a3eeb10e606ab"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a96f960b29496f637af7a3eeb10e606ab">&#9670;&nbsp;</a></span>IsSolutionOptimal()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool operations_research::KnapsackSolver::IsSolutionOptimal </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if the solution was proven optimal. </p>
<p class="definition">Definition at line <a class="el" href="knapsack__solver_8h_source.html#l00147">147</a> of file <a class="el" href="knapsack__solver_8h_source.html">knapsack_solver.h</a>.</p>
</div>
</div>
<a id="a0f6ca3ef8483871052325ea2d04ca72d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0f6ca3ef8483871052325ea2d04ca72d">&#9670;&nbsp;</a></span>set_time_limit()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void operations_research::KnapsackSolver::set_time_limit </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>time_limit_seconds</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Time limit in seconds. </p>
<p>When a finite time limit is set the solution obtained might not be optimal if the limit is reached. </p>
<p class="definition">Definition at line <a class="el" href="knapsack__solver_8h_source.html#l00155">155</a> of file <a class="el" href="knapsack__solver_8h_source.html">knapsack_solver.h</a>.</p>
</div>
</div>
<a id="abb429376ba12d5541f22a905a728b0e1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb429376ba12d5541f22a905a728b0e1">&#9670;&nbsp;</a></span>set_use_reduction()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void operations_research::KnapsackSolver::set_use_reduction </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>use_reduction</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="knapsack__solver_8h_source.html#l00151">151</a> of file <a class="el" href="knapsack__solver_8h_source.html">knapsack_solver.h</a>.</p>
</div>
</div>
<a id="a7c3b5825c8effd86de03a610d1a38ed7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7c3b5825c8effd86de03a610d1a38ed7">&#9670;&nbsp;</a></span>Solve()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int64 operations_research::KnapsackSolver::Solve </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Solves the problem and returns the profit of the optimal solution. </p>
</div>
</div>
<a id="a0408f46c96d0dbf4eb463fa385778593"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0408f46c96d0dbf4eb463fa385778593">&#9670;&nbsp;</a></span>use_reduction()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool operations_research::KnapsackSolver::use_reduction </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="knapsack__solver_8h_source.html#l00150">150</a> of file <a class="el" href="knapsack__solver_8h_source.html">knapsack_solver.h</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="knapsack__solver_8h_source.html">knapsack_solver.h</a></li>
</ul>
</div><!-- contents -->
</div>
<div id="footer-container">
<div id="footer">
</div>
</div>
</body>
</html>