00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <vector>
00012 #include <set>
00013
00014 #include "CouenneObject.hpp"
00015 #include "CouenneProblem.hpp"
00016
00017 using namespace Couenne;
00018
00022
00023 void CouenneProblem::fillDependence (Bonmin::BabSetupBase *base, CouenneCutGenerator *cg) {
00024
00025
00026 for (int i=nVars (); i--;)
00027 dependence_.push_back (std::set <int> ());
00028
00029 for (std::vector <exprVar *>::iterator i = variables_.begin ();
00030 i != variables_.end (); ++i) {
00031
00032 if (((*i) -> Type () == AUX)
00033 && ((*i) -> Multiplicity () > 0)
00034 && ((*i) -> Image () -> Linearity () > LINEAR)) {
00035
00036 CouenneObject *infeasObj = (*i) -> properObject (cg, this, base, jnlst_);
00037
00038 if (!(infeasObj -> Reference ()))
00039 continue;
00040
00041
00042 objects_.push_back (infeasObj);
00043
00044 std::set <int> deplist;
00045
00046
00047
00048 if ((*i) -> Image () -> DepList (deplist, STOP_AT_AUX) == 0)
00049 continue;
00050
00051
00052 for (std::set <int>::iterator j = deplist.begin (); j != deplist.end (); ++j) {
00053
00054 std::set <int> &obj = dependence_ [*j];
00055 int ind = (*i) -> Index ();
00056 if (obj.find (ind) == obj.end ())
00057 obj.insert (ind);
00058 }
00059
00060 } else objects_.push_back (new CouenneObject ());
00061
00062 }
00063 }