<html>
<head>
<meta http-equiv="content-type" content="text/html;
charset=windows-1252">
</head>
<body text="#000000" bgcolor="#FFFFFF">
Hello Dip/Dippy Community,<br>
I am currently working on my master's thesis in mathematics. First
of all, I want to express my appreciation for the efforts of the Dip
team. I'm happy to be able to rely on such a comprehensive
framework. To implement a Dantzig-Wolfe decomposition with custom
initial solution and custom solver for the subproblems, I used the
Dippy package in Python. During the process, I stumbled upon some
lines of code in Dippy that I wonder about. The version that I run
is 0.91.5 compiled with MSVC 2015 for Python 2.7.10 x64 on Windows.
Even though I have not yet been able to use 0.92.1, the following
comments refer to its source.<br>
<ol>
<li>DippyPythonUtils.cpp, line 274: The method <tt>pyColDict_AsPackedArrays</tt>
calls <tt>getVarType</tt> on a Python object of type <tt>pulp.LpVariable
</tt>which I found to have no such method. This produces an
error when I try to supply an initial solution. As the result of
the call to <tt>getVarType</tt> is not used anyway, maybe the
line can be deleted.</li>
<li>DippySolve.cpp, line 31: The definition of <tt>DecompInf</tt>
leads to a compiler error as it is also globally defined in
DecompAlgo.cpp, line 43. It does not seem to be used in
DippySolve.cpp, though.</li>
<li>DippyDecompAlgo.cpp, line 47: The assertion in this line does
not allow the fallback to the default implementation of <tt>DecompAlgo::chooseBranchSet</tt>
to return <tt>false</tt>. This yields an error if the column
generation is stopped due to lacking improvement and <tt>chooseBranchSet</tt>
is called for an integer solution. In general, the usage of <tt>chooseBranchSet</tt>
in <tt>AlpsDecompTreeNode::chooseBranchingObject</tt>
(AlpsDecompTreeNode, line 379) suggests that the return value <tt>false
</tt>would also be acceptable. However, I could not figure out
what happens to a node if this is the case and the status is set
to <tt>AlpsNodeStatusEvaluated</tt>. Does it proceed with
column generation? Maybe, the failure of <tt>chooseBranchSet</tt>
should be allowed in Dippy and be propagated to DIP.</li>
<li>dippy.py, line 852 sqq.: As I understand the cost and reduced
cost for a column is computed here if <tt>relaxed_solver</tt>
returns a dictionary for the variable values without including
those corresponding costs. The value of <tt>target</tt>,
however, is not taken account of in this calculation. This would
mean incorrect testing for negative reduced costs in my opinion.
To what extent are the cost values returned by <tt>DipProblem.solveRelaxed
</tt>used by DIP? I took from a thread of the mailing list in
July that there are cases where DIP solves the subproblem as
MILP. Is it possible to prevent DIP from doing so completely? Is
returning an optimal solution with an appropriate status from <tt>relaxed_solver
</tt>enough to do so? Is it valid to return a set of several
solutions containing an optimal as well as many non-optimal
solutions while specifing the status as optimal? The reason why
I would like to know is that my subproblems are quite large when
formulated as MILP. Therefore, at the moment I provide DIP with
dummy MILPs for the subproblems which serve the only purpose of
establishing the assignment of variables to their subproblem.
They do not make any sense, though. That is why I would like to
make sure that DIP relies on the custom <tt>solveRelaxed</tt>
method only and does not use more information from the MILP
formulation than the occurence of variables.</li>
</ol>
<p>Thanks in advance for your help,<br>
Marcus<br>
</p>
</body>
</html>