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