22#include < memory>
33#include < utility>
44
5- #include < nonstd/span.hpp>
65#include < xtensor/xtensor.hpp>
76
87#include " ecole/environment/branching-dynamics.hpp"
@@ -17,29 +16,13 @@ namespace environment {
1716BranchingDynamics::BranchingDynamics (bool pseudo_candidates_) noexcept :
1817 pseudo_candidates (pseudo_candidates_) {}
1918
20- static nonstd::span<SCIP_VAR*> lp_branch_cands (SCIP* scip) {
21- SCIP_VAR** cands = nullptr ;
22- int n_cands = 0 ;
23- scip::call (SCIPgetLPBranchCands, scip, &cands, nullptr , nullptr , &n_cands, nullptr , nullptr );
24- assert (n_cands >= 0 );
25- return {cands, static_cast <std::size_t >(n_cands)};
26- }
27-
28- static nonstd::span<SCIP_VAR*> pseudo_branch_cands (SCIP* scip) {
29- SCIP_VAR** cands = nullptr ;
30- int n_cands = 0 ;
31- scip::call (SCIPgetPseudoBranchCands, scip, &cands, &n_cands, nullptr );
32- assert (n_cands >= 0 );
33- return {cands, static_cast <std::size_t >(n_cands)};
34- }
19+ namespace {
3520
36- static nonstd::optional<xt::xtensor<std::size_t , 1 >>
37- action_set (scip::Model const & model, bool pseudo) {
21+ nonstd::optional<xt::xtensor<std::size_t , 1 >> action_set (scip::Model const & model, bool pseudo) {
3822 if (model.get_stage () != SCIP_STAGE_SOLVING) {
3923 return {};
4024 }
41- auto const scip = model.get_scip_ptr ();
42- auto const branch_cands = pseudo ? pseudo_branch_cands (scip) : lp_branch_cands (scip);
25+ auto const branch_cands = pseudo ? model.pseudo_branch_cands () : model.lp_branch_cands ();
4326 auto branch_cols = xt::xtensor<std::size_t , 1 >::from_shape ({branch_cands.size ()});
4427 std::transform ( //
4528 branch_cands.begin (),
@@ -51,6 +34,8 @@ action_set(scip::Model const& model, bool pseudo) {
5134 return branch_cols;
5235}
5336
37+ } // namespace
38+
5439auto BranchingDynamics::reset_dynamics (scip::Model& model) -> std::tuple<bool, ActionSet> {
5540 model.solve_iter ();
5641 return {model.solve_iter_is_done (), action_set (model, pseudo_candidates)};
@@ -59,10 +44,10 @@ auto BranchingDynamics::reset_dynamics(scip::Model& model) -> std::tuple<bool, A
5944auto BranchingDynamics::step_dynamics (scip::Model& model, std::size_t const & action)
6045 -> std::tuple<bool, ActionSet> {
6146 auto const lp_cols = model.lp_columns ();
62- if (action >= lp_cols.size ) {
47+ if (action >= lp_cols.size () ) {
6348 throw Exception (" Branching index is larger than the number of columns." );
6449 }
65- model.solve_iter_branch (lp_cols[action]. var ( ));
50+ model.solve_iter_branch (SCIPcolGetVar ( lp_cols[action]));
6651
6752 return {model.solve_iter_is_done (), action_set (model, pseudo_candidates)};
6853}
0 commit comments