27 UPDATE_VARIABLES = -3,
37 using ConstraintActionFn = std::function<void(int)>;
38 using UnknownActionFn = std::function<void(int)>;
41 WaitLoop(
const std::function<
int()>& get_size,
double& final_obj, MPI_Comm comm = MPI_COMM_WORLD)
42 : get_size_(get_size), final_obj_(final_obj), comm_(comm)
70 constraints_states_ = constraints_states;
77 constraints_grad_states_ = constraints_grad_states;
84 solution_state_ = solution_state;
91 unknown_state_ = unknown_state;
98 int nconstraints = get_size_();
99 while (final_obj_ == std::numeric_limits<double>::max()) {
104 if (opt_state == op::SOLUTION_FOUND) {
107 }
else if (opt_state >= nconstraints && opt_state < nconstraints * 2) {
108 constraints_grad_states_(opt_state % nconstraints);
109 }
else if (opt_state >= 0 && opt_state < nconstraints) {
110 constraints_states_(opt_state);
113 case op::State::UPDATE_VARIABLES:
116 case op::State::OBJ_GRAD:
119 case op::State::OBJ_EVAL:
123 unknown_state_(opt_state);
131 std::function<int()> get_size_;
137 ConstraintActionFn constraints_states_;
138 ConstraintActionFn constraints_grad_states_;
140 UnknownActionFn unknown_state_;
WaitLoop & onObjectiveEval(const ActionFn &obj_eval)
Set action to perform in Objective Eval state.
std::enable_if_t<!(detail::has_data< T >::value &&detail::has_size< T >::value), int > Broadcast(T &buf, int root=0, MPI_Comm comm=MPI_COMM_WORLD)
Broadcast a single element to all ranks on the communicator.
WaitLoop & onObjectiveGrad(const ActionFn &obj_grad)
Set action to perform in Objective Grad state.
WaitLoop & onUnknown(const UnknownActionFn &unknown_state)
Set action to perform in Unknown state.
WaitLoop & onUpdate(const ActionFn &update)
Set action to perform in Update state.
std::function< void()> ActionFn
Action type we'll use over and over again.
WaitLoop & onConstraintsEval(const ConstraintActionFn &constraints_states)
Set action to perform in Constraint Eval state.
WaitLoop & onConstraintsGrad(const ConstraintActionFn &constraints_grad_states)
Set action to perform in Constraint Grad state.
WaitLoop & onSolution(const ActionFn &solution_state)
Set action to perform in Solution state.