Loose ends #

After the pain of last night, things are going much smoother, and the program can actually tell apart circles and squares. Some improvements and observations:

  • Accessing the results of the transport-simplex problem isn't necessarily obvious (since FLOPC++ is sorely lacking in documentation). To get things out of the MP_variable result, the level method has to be used. Although it takes multiple arguments (suggesting that one can access the flow from bucket i to bucket j by calling level(i, j), it seems to work only if one actually does i * rowWidth + j (since I specified things in row major order, presumably it uses column major).
  • Another reason to keep track of link indices by hand is because it's much more efficient to not generate links from histogram buckets that have 0 value. This results in an irregular link ordering, but we end up with 10x less links (at least for simple shapes like triangles, squares and circles), which has a direct (linear?) impact on solving speed.
  • FLOPC++ likes to output debugging info, and there's no obvious switch to turn it off. Adding a few #ifdef DEBUG lines in MP_model.cpp takes care of this
  • COIN outputs its own debugging info, but it has a much nice logging interface. However, its default logging level is to output some things, and FLOPC++ doesn't change this. Changing the default logging level (in Coin/CoinMessageHandler.cpp) from 1 to 0 is the remedy.
  • Changing the default requires COIN to be rebuilt. Although this wasn't apparent last night (due to it being in a temporary location), the process requires that there be no spaces in its path. This can be fixed by tweaking Makefiles (adding quotes), or by renaming folders in its path. You can guess which is the easier thing to do.

Post a Comment