[Dip] Issues related to Dippy source code
Marcus Kaiser
marcus.kaiser at mytum.de
Sat Oct 24 08:36:17 EDT 2015
Hello Dip/Dippy Community,
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.
1. DippyPythonUtils.cpp, line 274: The method pyColDict_AsPackedArrays
calls getVarType on a Python object of type pulp.LpVariable 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 getVarType
is not used anyway, maybe the line can be deleted.
2. DippySolve.cpp, line 31: The definition of DecompInf 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.
3. DippyDecompAlgo.cpp, line 47: The assertion in this line does not
allow the fallback to the default implementation of
DecompAlgo::chooseBranchSet to return false. This yields an error if
the column generation is stopped due to lacking improvement and
chooseBranchSet is called for an integer solution. In general, the
usage of chooseBranchSet in
AlpsDecompTreeNode::chooseBranchingObject (AlpsDecompTreeNode, line
379) suggests that the return value false 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 AlpsNodeStatusEvaluated. Does it
proceed with column generation? Maybe, the failure of
chooseBranchSet should be allowed in Dippy and be propagated to DIP.
4. dippy.py, line 852 sqq.: As I understand the cost and reduced cost
for a column is computed here if relaxed_solver returns a dictionary
for the variable values without including those corresponding costs.
The value of target, 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
DipProblem.solveRelaxed 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 relaxed_solver 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 solveRelaxed method
only and does not use more information from the MILP formulation
than the occurence of variables.
Thanks in advance for your help,
Marcus
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/dip/attachments/20151024/90de85a4/attachment.html>
More information about the Dip
mailing list