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) -> Image () -> Linearity () > LINEAR)) {
00034
00035 CouenneObject *infeasObj = (*i) -> properObject (cg, this, base, jnlst_);
00036
00037 if (!(infeasObj -> Reference ()))
00038 continue;
00039
00040
00041 objects_.push_back (infeasObj);
00042
00043 std::set <int> deplist;
00044
00045
00046
00047 if ((*i) -> Image () -> DepList (deplist, STOP_AT_AUX) == 0)
00048 continue;
00049
00050
00051 for (std::set <int>::iterator j = deplist.begin (); j != deplist.end (); ++j) {
00052
00053 std::set <int> &obj = dependence_ [*j];
00054 int ind = (*i) -> Index ();
00055 if (obj.find (ind) == obj.end ())
00056 obj.insert (ind);
00057 }
00058
00059 } else objects_.push_back (new CouenneObject ());
00060
00061 }
00062 }