/** @{ @ingroup SURF_lmm */
-/** Default functions associated to the chosen protocol. When using the lagrangian approach. */
-
-XBT_PUBLIC double func_reno_f(const Variable& var, double x);
-XBT_PUBLIC double func_reno_fp(const Variable& var, double x);
-XBT_PUBLIC double func_reno_fpi(const Variable& var, double x);
-
-XBT_PUBLIC double func_reno2_f(const Variable& var, double x);
-XBT_PUBLIC double func_reno2_fp(const Variable& var, double x);
-XBT_PUBLIC double func_reno2_fpi(const Variable& var, double x);
-
-XBT_PUBLIC double func_vegas_f(const Variable& var, double x);
-XBT_PUBLIC double func_vegas_fp(const Variable& var, double x);
-XBT_PUBLIC double func_vegas_fpi(const Variable& var, double x);
-
/**
* @brief LMM element
* Elements can be seen as glue between constraint objects and variable objects.
* any given time (essentially for tracing)*/
s4u::Link::SharingPolicy sharing_policy_;
- int id_int_;
+ int rank_; // Only used in debug messages to identify the constraint
double lambda_;
double new_lambda_;
ConstraintLight* cnst_light_;
private:
- static int Global_debug_id_;
+ static int next_rank_; // To give a separate rank_ to each contraint
int concurrency_limit_; /* The maximum number of variables that may be enabled at any time (stage variables if
* necessary) */
void* id_;
double value_;
short int concurrency_share_; /* The maximum number of elements that variable will add to a constraint */
resource::Action* id_;
- int id_int_;
+ int rank_; // Only used in debug messages to identify the variable
unsigned visited_; /* used by System::update_modified_set() */
/* \begin{For Lagrange only} */
double mu_;
/* \end{For Lagrange only} */
private:
- static int Global_debug_id_;
+ static int next_rank_; // To give a separate rank_ to each variable
};
inline void Element::make_active()
void bottleneck_solve();
};
-class XBT_PUBLIC Lagrange : public System {
-public:
- explicit Lagrange(bool selective_update) : System(selective_update) {}
- void solve() final { lagrange_solve(); }
-
- static void set_default_protocol_function(double (*func_f)(const Variable& var, double x),
- double (*func_fp)(const Variable& var, double x),
- double (*func_fpi)(const Variable& var, double x));
-
-private:
- void lagrange_solve();
-
- bool check_feasible(bool warn);
- double dual_objective();
-
- static double (*func_f)(const Variable& var, double x); /* (f) */
- static double (*func_fp)(const Variable& var, double x); /* (f') */
- static double (*func_fpi)(const Variable& var, double x); /* (f')^{-1} */
-
- /*
- * Local prototypes to implement the Lagrangian optimization with optimal step, also called dichotomy.
- */
- // computes the value of the dichotomy using a initial values, init, with a specific variable or constraint
- static double dichotomy(double init, const Constraint& cnst, double min_error);
- // computes the value of the differential of constraint cnst applied to lambda
- static double partial_diff_lambda(double lambda, const Constraint& cnst);
-
- static double new_value(const Variable& var);
- static double new_mu(const Variable& var);
-};
-
XBT_PUBLIC System* make_new_maxmin_system(bool selective_update);
XBT_PUBLIC System* make_new_fair_bottleneck_system(bool selective_update);
-XBT_PUBLIC System* make_new_lagrange_system(bool selective_update);
/** @} */
}