525 lines
33 KiB
HTML
525 lines
33 KiB
HTML
<!-- HTML header for doxygen 1.8.18-->
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.15"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>OR-Tools: KnapsackSolver</title>
|
|
<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="navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="resize.js"></script>
|
|
<script type="text/javascript" src="navtreedata.js"></script>
|
|
<script type="text/javascript" src="navtree.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(document).ready(initResizable);
|
|
/* @license-end */</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>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
<link href="styleSheet.tmp.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="projectlogo"><img alt="Logo" src="orLogo.png"/></td>
|
|
<td id="projectalign" style="padding-left: 0.5em;">
|
|
<div id="projectname">OR-Tools
|
|
 <span id="projectnumber">9.2</span>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.8.15 -->
|
|
<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>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(document).ready(function(){initNavTree('classoperations__research_1_1_knapsack_solver.html','');});
|
|
/* @license-end */
|
|
</script>
|
|
<div id="doc-content">
|
|
<!-- 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 class="header">
|
|
<div class="summary">
|
|
<a href="#pub-types">Public Types</a> |
|
|
<a href="#pub-methods">Public Member Functions</a> |
|
|
<a href="classoperations__research_1_1_knapsack_solver-members.html">List of all members</a> </div>
|
|
<div class="headertitle">
|
|
<div class="title">KnapsackSolver</div> </div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
|
<div class="textblock"><p>This library solves knapsack problems. </p>
|
|
<p>Problems the library solves include:</p><ul>
|
|
<li>0-1 knapsack problems,</li>
|
|
<li>Multi-dimensional knapsack problems,</li>
|
|
</ul>
|
|
<p>Given n items, each with a profit and a weight, given a knapsack of capacity c, the goal is to find a subset of items which fits inside c and maximizes the total profit. The knapsack problem can easily be extended from 1 to d dimensions. As an example, this can be useful to constrain the maximum number of items inside the knapsack. Without loss of generality, profits and weights are assumed to be positive.</p>
|
|
<p>From a mathematical point of view, the multi-dimensional knapsack problem can be modeled by d linear constraints: </p><pre class="fragment">ForEach(j:1..d)(Sum(i:1..n)(weight_ij * item_i) <= c_j
|
|
where item_i is a 0-1 integer variable.
|
|
</pre><p>Then the goal is to maximize: </p><pre class="fragment">Sum(i:1..n)(profit_i * item_i).
|
|
</pre><p>There are several ways to solve knapsack problems. One of the most efficient is based on dynamic programming (mainly when weights, profits and dimensions are small, and the algorithm runs in pseudo polynomial time). Unfortunately, when adding conflict constraints the problem becomes strongly NP-hard, i.e. there is no pseudo-polynomial algorithm to solve it. That's the reason why the most of the following code is based on branch and bound search.</p>
|
|
<p>For instance to solve a 2-dimensional knapsack problem with 9 items, one just has to feed a profit vector with the 9 profits, a vector of 2 vectors for weights, and a vector of capacities. E.g.:</p>
|
|
<p><b>Python:</b> </p><div class="fragment"><div class="line">profits = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]</div><div class="line">weights = [ [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ],</div><div class="line"> [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ]</div><div class="line"> ]</div><div class="line">capacities = [ 34, 4 ]</div><div class="line"></div><div class="line">solver = pywrapknapsack_solver.KnapsackSolver(</div><div class="line"> pywrapknapsack_solver.KnapsackSolver</div><div class="line"> .KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER,</div><div class="line"> <span class="stringliteral">'Multi-dimensional solver'</span>)</div><div class="line">solver.Init(profits, weights, capacities)</div><div class="line">profit = solver.Solve()</div></div><!-- fragment --><p><b>C++</b>: </p><div class="fragment"><div class="line"><span class="keyword">const</span> std::vector<int64_t> profits = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };</div><div class="line"><span class="keyword">const</span> std::vector<std::vector<int64_t>> weights =</div><div class="line"> { { 1, 2, 3, 4, 5, 6, 7, 8, 9 },</div><div class="line"> { 1, 1, 1, 1, 1, 1, 1, 1, 1 } };</div><div class="line"><span class="keyword">const</span> std::vector<int64_t> capacities = { 34, 4 };</div><div class="line"></div><div class="line"><a class="code" href="classoperations__research_1_1_knapsack_solver.html#a6b46c35c8977efde66ae7ad97423bdf2">KnapsackSolver</a> solver(</div><div class="line"> <a class="code" href="classoperations__research_1_1_knapsack_solver.html#a8b06041d7c1fb05f379714f4312306eca2a4e77eec4f386d17001e7285e812a0b">KnapsackSolver::KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER</a>,</div><div class="line"> <span class="stringliteral">"Multi-dimensional solver"</span>);</div><div class="line">solver.Init(profits, weights, capacities);</div><div class="line"><span class="keyword">const</span> int64_t profit = solver.Solve();</div></div><!-- fragment --><p><b>Java:</b> </p><div class="fragment"><div class="line"><span class="keyword">final</span> <span class="keywordtype">long</span>[] profits = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };</div><div class="line"><span class="keyword">final</span> <span class="keywordtype">long</span>[][] weights = { { 1, 2, 3, 4, 5, 6, 7, 8, 9 },</div><div class="line"> { 1, 1, 1, 1, 1, 1, 1, 1, 1 } };</div><div class="line"><span class="keyword">final</span> <span class="keywordtype">long</span>[] capacities = { 34, 4 };</div><div class="line"></div><div class="line"><a class="code" href="classoperations__research_1_1_knapsack_solver.html#a6b46c35c8977efde66ae7ad97423bdf2">KnapsackSolver</a> solver = <span class="keyword">new</span> <a class="code" href="classoperations__research_1_1_knapsack_solver.html#a6b46c35c8977efde66ae7ad97423bdf2">KnapsackSolver</a>(</div><div class="line"> <a class="code" href="classoperations__research_1_1_knapsack_solver.html#a6b46c35c8977efde66ae7ad97423bdf2">KnapsackSolver</a>.SolverType.KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER,</div><div class="line"> <span class="stringliteral">"Multi-dimensional solver"</span>);</div><div class="line">solver.init(profits, weights, capacities);</div><div class="line"><span class="keyword">final</span> <span class="keywordtype">long</span> profit = solver.solve();</div></div><!-- fragment -->
|
|
<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><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:a8b06041d7c1fb05f379714f4312306ec"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1_knapsack_solver.html#a8b06041d7c1fb05f379714f4312306ec">SolverType</a> { <br />
|
|
  <a class="el" href="classoperations__research_1_1_knapsack_solver.html#a8b06041d7c1fb05f379714f4312306ecac43056d6d2f96cee37fcb8a752b0ff45">KNAPSACK_BRUTE_FORCE_SOLVER</a> = 0,
|
|
<a class="el" href="classoperations__research_1_1_knapsack_solver.html#a8b06041d7c1fb05f379714f4312306ecaa020f211a1ff184e712aa4f372d6ea34">KNAPSACK_64ITEMS_SOLVER</a> = 1,
|
|
<a class="el" href="classoperations__research_1_1_knapsack_solver.html#a8b06041d7c1fb05f379714f4312306eca793d998526508cfcc2bfc89fe25b3edd">KNAPSACK_DYNAMIC_PROGRAMMING_SOLVER</a> = 2,
|
|
<a class="el" href="classoperations__research_1_1_knapsack_solver.html#a8b06041d7c1fb05f379714f4312306ecae2ce6e36a247621de398e875d5feb575">KNAPSACK_MULTIDIMENSION_CBC_MIP_SOLVER</a> = 3,
|
|
<br />
|
|
  <a class="el" href="classoperations__research_1_1_knapsack_solver.html#a8b06041d7c1fb05f379714f4312306eca2a4e77eec4f386d17001e7285e812a0b">KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER</a> = 5,
|
|
<a class="el" href="classoperations__research_1_1_knapsack_solver.html#a8b06041d7c1fb05f379714f4312306eca1f4e1e2f80ab9c7d4fc1b14d9f5da959">KNAPSACK_MULTIDIMENSION_SCIP_MIP_SOLVER</a> = 6,
|
|
<a class="el" href="classoperations__research_1_1_knapsack_solver.html#a8b06041d7c1fb05f379714f4312306eca9d4c4118c9e4dc258e5052c0a457098d">KNAPSACK_DIVIDE_AND_CONQUER_SOLVER</a> = 9
|
|
<br />
|
|
}</td></tr>
|
|
<tr class="memdesc:a8b06041d7c1fb05f379714f4312306ec"><td class="mdescLeft"> </td><td class="mdescRight">Enum controlling which underlying algorithm is used. <a href="classoperations__research_1_1_knapsack_solver.html#a8b06041d7c1fb05f379714f4312306ec">More...</a><br /></td></tr>
|
|
<tr class="separator:a8b06041d7c1fb05f379714f4312306ec"><td class="memSeparator" colspan="2"> </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:a6b46c35c8977efde66ae7ad97423bdf2"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1_knapsack_solver.html#a6b46c35c8977efde66ae7ad97423bdf2">KnapsackSolver</a> (const std::string &solver_name)</td></tr>
|
|
<tr class="separator:a6b46c35c8977efde66ae7ad97423bdf2"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a09627cf25401a9880d2e94551ecbf993"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1_knapsack_solver.html#a09627cf25401a9880d2e94551ecbf993">KnapsackSolver</a> (<a class="el" href="classoperations__research_1_1_knapsack_solver.html#a8b06041d7c1fb05f379714f4312306ec">SolverType</a> solver_type, const std::string &solver_name)</td></tr>
|
|
<tr class="separator:a09627cf25401a9880d2e94551ecbf993"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:abb19dddb08cf912baec8995cfd2f1f42"><td class="memItemLeft" align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1_knapsack_solver.html#abb19dddb08cf912baec8995cfd2f1f42">~KnapsackSolver</a> ()</td></tr>
|
|
<tr class="separator:abb19dddb08cf912baec8995cfd2f1f42"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ae5982edf1a2974495d20201775a765e2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1_knapsack_solver.html#ae5982edf1a2974495d20201775a765e2">Init</a> (const std::vector< int64_t > &profits, const std::vector< std::vector< int64_t > > &weights, const std::vector< int64_t > &capacities)</td></tr>
|
|
<tr class="memdesc:ae5982edf1a2974495d20201775a765e2"><td class="mdescLeft"> </td><td class="mdescRight">Initializes the solver and enters the problem to be solved. <a href="#ae5982edf1a2974495d20201775a765e2">More...</a><br /></td></tr>
|
|
<tr class="separator:ae5982edf1a2974495d20201775a765e2"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a7f5467b49f2cba3d8804e44ed76e12a2"><td class="memItemLeft" align="right" valign="top">int64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1_knapsack_solver.html#a7f5467b49f2cba3d8804e44ed76e12a2">Solve</a> ()</td></tr>
|
|
<tr class="memdesc:a7f5467b49f2cba3d8804e44ed76e12a2"><td class="mdescLeft"> </td><td class="mdescRight">Solves the problem and returns the profit of the optimal solution. <a href="#a7f5467b49f2cba3d8804e44ed76e12a2">More...</a><br /></td></tr>
|
|
<tr class="separator:a7f5467b49f2cba3d8804e44ed76e12a2"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a57d88f584d14b161580550918c8fbf3b"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1_knapsack_solver.html#a57d88f584d14b161580550918c8fbf3b">BestSolutionContains</a> (int item_id) const</td></tr>
|
|
<tr class="memdesc:a57d88f584d14b161580550918c8fbf3b"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if the item 'item_id' is packed in the optimal knapsack. <a href="#a57d88f584d14b161580550918c8fbf3b">More...</a><br /></td></tr>
|
|
<tr class="separator:a57d88f584d14b161580550918c8fbf3b"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a9647a5f765048e8662e5efa54c7d8687"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1_knapsack_solver.html#a9647a5f765048e8662e5efa54c7d8687">IsSolutionOptimal</a> () const</td></tr>
|
|
<tr class="memdesc:a9647a5f765048e8662e5efa54c7d8687"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if the solution was proven optimal. <a href="#a9647a5f765048e8662e5efa54c7d8687">More...</a><br /></td></tr>
|
|
<tr class="separator:a9647a5f765048e8662e5efa54c7d8687"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a9a98946a64f3893b085f650932c9dfee"><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1_knapsack_solver.html#a9a98946a64f3893b085f650932c9dfee">GetName</a> () const</td></tr>
|
|
<tr class="separator:a9a98946a64f3893b085f650932c9dfee"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ac7d0a3efa2aabe6a3e667b0724f63688"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1_knapsack_solver.html#ac7d0a3efa2aabe6a3e667b0724f63688">use_reduction</a> () const</td></tr>
|
|
<tr class="separator:ac7d0a3efa2aabe6a3e667b0724f63688"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:aa5b8e0a03c593bfc3cef0ba8d178844f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1_knapsack_solver.html#aa5b8e0a03c593bfc3cef0ba8d178844f">set_use_reduction</a> (bool <a class="el" href="classoperations__research_1_1_knapsack_solver.html#ac7d0a3efa2aabe6a3e667b0724f63688">use_reduction</a>)</td></tr>
|
|
<tr class="separator:aa5b8e0a03c593bfc3cef0ba8d178844f"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a6b4f6cbb00a64b0e9745938f9b99d0c8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1_knapsack_solver.html#a6b4f6cbb00a64b0e9745938f9b99d0c8">set_time_limit</a> (double time_limit_seconds)</td></tr>
|
|
<tr class="memdesc:a6b4f6cbb00a64b0e9745938f9b99d0c8"><td class="mdescLeft"> </td><td class="mdescRight">Time limit in seconds. <a href="#a6b4f6cbb00a64b0e9745938f9b99d0c8">More...</a><br /></td></tr>
|
|
<tr class="separator:a6b4f6cbb00a64b0e9745938f9b99d0c8"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table>
|
|
<h2 class="groupheader">Member Enumeration Documentation</h2>
|
|
<a id="a8b06041d7c1fb05f379714f4312306ec"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a8b06041d7c1fb05f379714f4312306ec">◆ </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_1_knapsack_solver.html#a8b06041d7c1fb05f379714f4312306ec">SolverType</a></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Enum controlling which underlying algorithm is used. </p>
|
|
<p>This enum is passed to the constructor of the <a class="el" href="classoperations__research_1_1_knapsack_solver.html" title="This library solves knapsack problems.">KnapsackSolver</a> object. It selects which solving method will be used. </p>
|
|
<table class="fieldtable">
|
|
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a8b06041d7c1fb05f379714f4312306ecac43056d6d2f96cee37fcb8a752b0ff45"></a>KNAPSACK_BRUTE_FORCE_SOLVER </td><td class="fielddoc"><p>Brute force method. </p>
|
|
<p>Limited to 30 items and one dimension, this solver uses a brute force algorithm, ie. explores all possible states. Experiments show competitive performance for instances with less than 15 items. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="a8b06041d7c1fb05f379714f4312306ecaa020f211a1ff184e712aa4f372d6ea34"></a>KNAPSACK_64ITEMS_SOLVER </td><td class="fielddoc"><p>Optimized method for single dimension small problems. </p>
|
|
<p>Limited to 64 items and one dimension, this solver uses a branch & bound algorithm. This solver is about 4 times faster than KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="a8b06041d7c1fb05f379714f4312306eca793d998526508cfcc2bfc89fe25b3edd"></a>KNAPSACK_DYNAMIC_PROGRAMMING_SOLVER </td><td class="fielddoc"><p>Dynamic Programming approach for single dimension problems. </p>
|
|
<p>Limited to one dimension, this solver is based on a dynamic programming algorithm. The time and space complexity is O(capacity * number_of_items). </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="a8b06041d7c1fb05f379714f4312306ecae2ce6e36a247621de398e875d5feb575"></a>KNAPSACK_MULTIDIMENSION_CBC_MIP_SOLVER </td><td class="fielddoc"><p>CBC Based <a class="el" href="classoperations__research_1_1_solver.html" title="Solver Class.">Solver</a>. </p>
|
|
<pre class="fragment">This solver can deal with both large number of items and several
|
|
</pre><p> dimensions. This solver is based on Integer Programming solver CBC. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="a8b06041d7c1fb05f379714f4312306eca2a4e77eec4f386d17001e7285e812a0b"></a>KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER </td><td class="fielddoc"><p>Generic <a class="el" href="classoperations__research_1_1_solver.html" title="Solver Class.">Solver</a>. </p>
|
|
<p>This solver can deal with both large number of items and several dimensions. This solver is based on branch and bound. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="a8b06041d7c1fb05f379714f4312306eca1f4e1e2f80ab9c7d4fc1b14d9f5da959"></a>KNAPSACK_MULTIDIMENSION_SCIP_MIP_SOLVER </td><td class="fielddoc"><p>SCIP based solver. </p>
|
|
<p>This solver can deal with both large number of items and several dimensions. This solver is based on Integer Programming solver SCIP. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="a8b06041d7c1fb05f379714f4312306eca9d4c4118c9e4dc258e5052c0a457098d"></a>KNAPSACK_DIVIDE_AND_CONQUER_SOLVER </td><td class="fielddoc"><p>Divide and Conquer approach for single dimension problems. </p>
|
|
<p>Limited to one dimension, this solver is based on a divide and conquer technique and is suitable for larger problems than Dynamic Programming <a class="el" href="classoperations__research_1_1_solver.html" title="Solver Class.">Solver</a>. The time complexity is O(capacity * number_of_items) and the space complexity is O(capacity + number_of_items). </p>
|
|
</td></tr>
|
|
</table>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="knapsack__solver_8h_source.html#l00124">124</a> of file <a class="el" href="knapsack__solver_8h_source.html">knapsack_solver.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<h2 class="groupheader">Constructor & Destructor Documentation</h2>
|
|
<a id="a6b46c35c8977efde66ae7ad97423bdf2"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a6b46c35c8977efde66ae7ad97423bdf2">◆ </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"><a class="el" href="classoperations__research_1_1_knapsack_solver.html">KnapsackSolver</a> </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const std::string & </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">
|
|
|
|
<p class="definition">Definition at line <a class="el" href="knapsack__solver_8cc_source.html#l01258">1258</a> of file <a class="el" href="knapsack__solver_8cc_source.html">knapsack_solver.cc</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a09627cf25401a9880d2e94551ecbf993"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a09627cf25401a9880d2e94551ecbf993">◆ </a></span>KnapsackSolver() <span class="overload">[2/2]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="classoperations__research_1_1_knapsack_solver.html">KnapsackSolver</a> </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="classoperations__research_1_1_knapsack_solver.html#a8b06041d7c1fb05f379714f4312306ec">SolverType</a> </td>
|
|
<td class="paramname"><em>solver_type</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const std::string & </td>
|
|
<td class="paramname"><em>solver_name</em> </td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td>)</td>
|
|
<td></td><td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p class="definition">Definition at line <a class="el" href="knapsack__solver_8cc_source.html#l01262">1262</a> of file <a class="el" href="knapsack__solver_8cc_source.html">knapsack_solver.cc</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="abb19dddb08cf912baec8995cfd2f1f42"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#abb19dddb08cf912baec8995cfd2f1f42">◆ </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">~<a class="el" href="classoperations__research_1_1_knapsack_solver.html">KnapsackSolver</a> </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">
|
|
|
|
<p class="definition">Definition at line <a class="el" href="knapsack__solver_8cc_source.html#l01318">1318</a> of file <a class="el" href="knapsack__solver_8cc_source.html">knapsack_solver.cc</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<h2 class="groupheader">Member Function Documentation</h2>
|
|
<a id="a57d88f584d14b161580550918c8fbf3b"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a57d88f584d14b161580550918c8fbf3b">◆ </a></span>BestSolutionContains()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">bool BestSolutionContains </td>
|
|
<td>(</td>
|
|
<td class="paramtype">int </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>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="knapsack__solver_8cc_source.html#l01511">1511</a> of file <a class="el" href="knapsack__solver_8cc_source.html">knapsack_solver.cc</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a9a98946a64f3893b085f650932c9dfee"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a9a98946a64f3893b085f650932c9dfee">◆ </a></span>GetName()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">std::string GetName </td>
|
|
<td>(</td>
|
|
<td class="paramname"></td><td>)</td>
|
|
<td> const</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p class="definition">Definition at line <a class="el" href="knapsack__solver_8cc_source.html#l01519">1519</a> of file <a class="el" href="knapsack__solver_8cc_source.html">knapsack_solver.cc</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ae5982edf1a2974495d20201775a765e2"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ae5982edf1a2974495d20201775a765e2">◆ </a></span>Init()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void Init </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const std::vector< int64_t > & </td>
|
|
<td class="paramname"><em>profits</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const std::vector< std::vector< int64_t > > & </td>
|
|
<td class="paramname"><em>weights</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const std::vector< int64_t > & </td>
|
|
<td class="paramname"><em>capacities</em> </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>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="knapsack__solver_8cc_source.html#l01320">1320</a> of file <a class="el" href="knapsack__solver_8cc_source.html">knapsack_solver.cc</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a9647a5f765048e8662e5efa54c7d8687"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a9647a5f765048e8662e5efa54c7d8687">◆ </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 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#l00224">224</a> of file <a class="el" href="knapsack__solver_8h_source.html">knapsack_solver.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a6b4f6cbb00a64b0e9745938f9b99d0c8"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a6b4f6cbb00a64b0e9745938f9b99d0c8">◆ </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 set_time_limit </td>
|
|
<td>(</td>
|
|
<td class="paramtype">double </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#l00235">235</a> of file <a class="el" href="knapsack__solver_8h_source.html">knapsack_solver.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="aa5b8e0a03c593bfc3cef0ba8d178844f"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#aa5b8e0a03c593bfc3cef0ba8d178844f">◆ </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 set_use_reduction </td>
|
|
<td>(</td>
|
|
<td class="paramtype">bool </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#l00228">228</a> of file <a class="el" href="knapsack__solver_8h_source.html">knapsack_solver.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a7f5467b49f2cba3d8804e44ed76e12a2"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a7f5467b49f2cba3d8804e44ed76e12a2">◆ </a></span>Solve()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int64_t 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>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="knapsack__solver_8cc_source.html#l01504">1504</a> of file <a class="el" href="knapsack__solver_8cc_source.html">knapsack_solver.cc</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ac7d0a3efa2aabe6a3e667b0724f63688"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ac7d0a3efa2aabe6a3e667b0724f63688">◆ </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 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#l00227">227</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 files:<ul>
|
|
<li><a class="el" href="knapsack__solver_8h_source.html">knapsack_solver.h</a></li>
|
|
<li><a class="el" href="knapsack__solver_8cc_source.html">knapsack_solver.cc</a></li>
|
|
</ul>
|
|
</div><!-- contents -->
|
|
</div><!-- doc-content -->
|
|
<!-- HTML footer for doxygen 1.8.18-->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<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_1_knapsack_solver.html">KnapsackSolver</a></li>
|
|
<li class="footer">Generated by
|
|
<a href="http://www.doxygen.org/index.html">
|
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|