Todo List

Class CbcCutGenerator

Add a pointer to function member which will allow a client to install their own decision algorithm to decide whether or not to call the CGL generateCuts method. Create a default decision method that looks at the builtin criteria.

It strikes me as not good that generateCuts contains code specific to individual CGL algorithms. Another set of pointer to function members, so that the client can specify the cut generation method as well as pre- and post-generation methods? Taken a bit further, should this class contain a bunch of pointer to function members, one for each of the places where the cut generator might be referenced? Initialization, root node, search tree node, discovery of solution, and termination all come to mind. Initialization and termination would also be useful for instrumenting cbc.

Class CbcFullNodeInfo
While there's no explicit statement, the code often makes the implicit assumption that an CbcFullNodeInfo structure will appear only at the root node of the search tree. Things will break if this assumption is violated.

Member CbcModel::addCuts1 (CbcNode *node, CoinWarmStartBasis *&lastws)
addCuts1() is called in contexts where it's known in advance that all that's desired is to determine a list of cuts and do the bookkeeping (adjust the reference counts). The work of installing bounds and building a basis goes to waste.

Member CbcModel::integerPresolve (bool weak=false)
It remains to work out the cleanest way of getting a solution to the original problem at the end. So this is very preliminary.

Member CbcNodeInfo::numberBranchesLeft_
There seems to be redundancy between this field and CbcBranchingObject::numberBranchesLeft_. It'd be good to sort out if both are necessary.

Class CbcStrongInfo
The notion that all branches are binary (two arms) is wired into the implementation of CbcObject, CbcBranchingObject, and CbcBranchDecision. Changing this will require a moderate amount of recoding.

Member CoinDrand48
Anyone want to volunteer an upgrade for 64-bit architectures?

File CoinMessageHandler.hpp
This needs to be worked over for correct operation with ISO character codes.

Member CoinMpsIO::dealWithFileName (const char *filename, const char *extension, CoinFileInput *&input)
Add automatic append of .bz2 suffix when compiled with libbz.

Member CoinMpsIO::readMps ()
Provide an interface that will allow a client to associate a CoinMpsCardReader object with a CoinMpsIO object by setting the cardReader_ field.

Member CoinPackedMatrix::appendMinorFast (const int number, const CoinBigIndex *starts, const int *index, const double *element)
This method really belongs in the group of protected methods with appendMinor; there are no safeties here even with COIN_DEBUG. Apparently this method was needed in ClpPackedMatrix and giving it proper visibility was too much trouble. Should be moved.

Class CoinWarmStartBasis

Modify this class so that the number of status entries per byte and bytes per status vector allocation unit are not hardcoded. At the least, collect this into a couple of macros.

Consider separate fields for allocated capacity and actual basis size. We could avoid some reallocation, at the price of retaining more space than we need. Perhaps more important, we could do much better sanity checks.

Class CoinWarmStartBasisDiff

This is a pretty generic structure, and vector diff is a pretty generic activity. We should be able to convert this to a template.

Using unsigned int as the data type for the diff vectors might help to contain the damage when this code is inevitably compiled for 64 bit architectures. But the notion of int as 4 bytes is hardwired into CoinWarmStartBasis, so changes are definitely required.

Class drop_empty_cols_action
Confirm correct behaviour with solution in presolve.

Class drop_empty_rows_action
Confirm behaviour when a solution is present in presolve.

Class dropped_zero
Why isn't this a nested class in drop_zero_coefficients_action? That would match the structure of other presolve classes.

Member flopc::alltrue (const MP_domain &d, const MP_boolean &b)
true? haven't used it.

Class flopc::Expression_operator
can this be moved to the cpp file?

Member flopc::forall (const Functor &f)
This turns into a no-op?

Member flopc::insertFunctor::operator() () const
should this be public? Should it be called? If so, needs doc.

Member flopc::maximum (const MP_domain &i, const Constant &e)
description? Haven't used this.

Member flopc::minimize_max (MP_set &d, const MP_expression &obj)
true?

Member flopc::minimum (const MP_domain &i, const Constant &e)
description? Haven't used this.

Class flopc::MP_constraint

more work on MP_constraint.

Member flopc::MP_data::operator double ()
purpose?

Member flopc::MP_data::operator() (const MP_index_exp &lcli1=MP_index_expgetEmpty(), const MP_index_exp &lcli2=MP_index_expgetEmpty(), const MP_index_exp &lcli3=MP_index_expgetEmpty(), const MP_index_exp &lcli4=MP_index_expgetEmpty(), const MP_index_exp &lcli5=MP_index_expgetEmpty())
can this be private?

Member flopc::MP_data::~MP_data ()
determine cause of seg fault.

Member flopc::MP_domain::MP_domain (MP_domain_base *r)
make this constructor private?

Member flopc::MP_domain_set::getDomain (MP_set *s) const
Is internal? can be private? or needs more doc.

Member flopc::MP_domain_set::operator() () const
should this be public? Should it be called? If so, needs doc.

Member flopc::MP_domain_subset::getDomain (MP_set *s) const
Is internal? can be private? or needs more doc.

Member flopc::MP_domain_subset::makeInsertFunctor () const
should this be public? Should it be called? If so, needs doc.

Member flopc::MP_domain_subset::operator() () const
should this be public? Should it be called? If so, needs doc.

Member flopc::MP_expression::MP_expression (MP_expression_base *r)
should this be private?

Member flopc::MP_index::Any

should this be private?

doc purpose.

Member flopc::MP_index::assign (int i)

should this be private?

should this assert "instatiated"?

Member flopc::MP_index::getIndex () const

should this be private?

should this be virtual?

Member flopc::MP_index::instantiate ()
should this be private?

Member flopc::MP_index::isInstantiated () const
should this be private?

Member flopc::MP_index::unInstantiate ()
should this be private?

Member flopc::MP_index_exp::MP_index_exp (const SUBSETREF &d)
internal? or explain?

Member flopc::MP_model::detach ()
verify that on "attach", old solver is detached.

Member flopc::MP_model::getCurrentModel ()
explain the default and current model concepts.

Member flopc::MP_model::getDefaultModel ()
explain the default and current model concepts.

Member flopc::MP_model::solution

should these be private with accessors? What if not set yet?

what if not a complete result? What if only one LP in the IP?

Member flopc::MP_model::solve (const MP_model::MP_direction &dir)
should the direction be defaulted?

Member flopc::MP_model::Solver
should this be private?

Member flopc::MP_set::cyclic ()
better explain the use of cyclic.

Member flopc::MP_set::operator() (const MP_index_exp &i) const
is the internal use?

Member flopc::operator! (const MP_boolean &b)
true? haven't used it.

Member flopc::operator!= (const MP_index_exp &e1, const MP_index_exp &e2)
improve this a bit?

Member flopc::operator&& (const MP_boolean &e1, const MP_boolean &e2)
true? haven't used it.

Member flopc::operator< (const MP_index_exp &e1, const MP_index_exp &e2)
improve this a bit?

Member flopc::operator<= (const MP_index_exp &e1, const MP_index_exp &e2)

improve this a bit?

Member flopc::operator== (const MP_index_exp &e1, const MP_index_exp &e2)
improve this a bit?

Member flopc::operator> (const MP_index_exp &e1, const MP_index_exp &e2)
improve this a bit?

Member flopc::operator>= (const MP_index_exp &e1, const MP_index_exp &e2)
improve this a bit?

Member flopc::operator|| (const MP_boolean &e1, const MP_boolean &e2)
true? haven't used it.

Member flopc::product (const MP_domain &i, const Constant &e)
description? Haven't used this.

Member flopc::sum (const MP_domain &i, const Constant &e)
description? Haven't used this.

Class flopc::TerminalExpression
can this be moved to the cpp file?

Group Functions to work with variable status
Why are we futzing around with three bit status? A holdover from the packed arrays of CoinWarmStartBasis? Big swaths of the presolve code manipulates colstat_ and rowstat_ as unsigned char arrays using simple assignment to set values.

Group Methods for problem input and output
Allow for file pointers and positioning

Member OsiSolverInterface::getIntegerTolerance () const
This method should be replaced; it's architecturally wrong. This should be an honest dblParam with a keyword. Underlying solvers that do not support integer variables should return false for set and get on this parameter. Underlying solvers that support integrality should add this to the parameters they support, using whatever tolerance is appropriate. -lh, 091021-

Generated on 10 Mar 2013 by  doxygen 1.6.1