Skip to content

Commit

Permalink
rename PADM
Browse files Browse the repository at this point in the history
  • Loading branch information
hlefebvr committed Sep 19, 2024
1 parent df49b90 commit 38aa73b
Show file tree
Hide file tree
Showing 12 changed files with 212 additions and 215 deletions.
9 changes: 3 additions & 6 deletions examples/bilevel-optimization/padm.example.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#include <idol/modeling/bilevel-optimization/LowerLevelDescription.h>
#include <idol/modeling/models/KKT.h>
#include <idol/optimizers/mixed-integer-optimization/wrappers/Gurobi/Gurobi.h>
#include "idol/optimizers/mixed-integer-optimization/padm/AlternatingDirectionMethod.h"
#include "idol/optimizers/mixed-integer-optimization/padm/PADM.h"
#include "idol/optimizers/mixed-integer-optimization/padm/SubProblem.h"

int main(int t_argc, const char** t_argv) {
Expand Down Expand Up @@ -47,12 +47,9 @@ int main(int t_argc, const char** t_argv) {
}

single_level.use(
AlternatingDirectionMethod(decomposition)
PADM(decomposition)
.with_penalization(penalize)
.with_default_sub_problem_spec(
AlternatingDirection::SubProblem()
.with_optimizer(Gurobi())
)
.with_default_sub_problem_spec(ADM::SubProblem().with_optimizer(Gurobi()))
);

single_level.optimize();
Expand Down
8 changes: 4 additions & 4 deletions lib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -250,10 +250,10 @@ add_library(idol STATIC
src/optimizers/robust-optimization/convexification/Convexification.cpp
include/idol/modeling/models/KKT.h
src/modeling/models/KKT.cpp
include/idol/optimizers/mixed-integer-optimization/padm/AlternatingDirectionMethod.cpp
include/idol/optimizers/mixed-integer-optimization/padm/AlternatingDirectionMethod.h
include/idol/optimizers/mixed-integer-optimization/padm/Optimizers_AlternatingDirectionMethod.cpp
include/idol/optimizers/mixed-integer-optimization/padm/Optimizers_AlternatingDirectionMethod.h
include/idol/optimizers/mixed-integer-optimization/padm/PADM.cpp
include/idol/optimizers/mixed-integer-optimization/padm/PADM.h
include/idol/optimizers/mixed-integer-optimization/padm/Optimizers_PADM.cpp
include/idol/optimizers/mixed-integer-optimization/padm/Optimizers_PADM.h
include/idol/optimizers/mixed-integer-optimization/padm/Formulation.cpp
include/idol/optimizers/mixed-integer-optimization/padm/Formulation.h
include/idol/optimizers/mixed-integer-optimization/padm/SubProblem.cpp
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@

#include <utility>

idol::AlternatingDirection::Formulation::Formulation(const Model& t_src_model,
Annotation<Var, unsigned int> t_decomposition,
std::optional<Annotation<Ctr, bool>> t_penalized_constraints)
idol::ADM::Formulation::Formulation(const Model& t_src_model,
Annotation<Var, unsigned int> t_decomposition,
std::optional<Annotation<Ctr, bool>> t_penalized_constraints)
: m_decomposition(std::move(t_decomposition)),
m_penalized_constraints(std::move(t_penalized_constraints)) {

Expand All @@ -26,16 +26,16 @@ idol::AlternatingDirection::Formulation::Formulation(const Model& t_src_model,

}

unsigned int idol::AlternatingDirection::Formulation::compute_n_sub_problems(const idol::Model &t_src_model) const {
unsigned int idol::ADM::Formulation::compute_n_sub_problems(const idol::Model &t_src_model) const {
unsigned int result = 0;
for (const auto& var : t_src_model.vars()) {
result = std::max(result, var.get(m_decomposition));
}
return result + 1;
}

void idol::AlternatingDirection::Formulation::initialize_sub_problems(const idol::Model &t_src_model,
unsigned int n_sub_problems) {
void idol::ADM::Formulation::initialize_sub_problems(const idol::Model &t_src_model,
unsigned int n_sub_problems) {

auto& env = t_src_model.env();
m_sub_problems.reserve(n_sub_problems);
Expand All @@ -46,20 +46,20 @@ void idol::AlternatingDirection::Formulation::initialize_sub_problems(const idol

}

void idol::AlternatingDirection::Formulation::initialize_patterns(const idol::Model &t_src_model,
unsigned int n_sub_problems) {
void idol::ADM::Formulation::initialize_patterns(const idol::Model &t_src_model,
unsigned int n_sub_problems) {

m_objective_patterns.resize(n_sub_problems);
m_constraint_patterns.resize(n_sub_problems);

}

void idol::AlternatingDirection::Formulation::initialize_slacks(const idol::Model &t_src_model,
unsigned int n_sub_problems) {
void idol::ADM::Formulation::initialize_slacks(const idol::Model &t_src_model,
unsigned int n_sub_problems) {
m_l1_vars.resize(n_sub_problems);
}

void idol::AlternatingDirection::Formulation::dispatch_vars(const idol::Model &t_src_model) {
void idol::ADM::Formulation::dispatch_vars(const idol::Model &t_src_model) {

for (const auto& var : t_src_model.vars()) {

Expand All @@ -74,7 +74,7 @@ void idol::AlternatingDirection::Formulation::dispatch_vars(const idol::Model &t

}

void idol::AlternatingDirection::Formulation::dispatch_ctrs(const idol::Model &t_src_model) {
void idol::ADM::Formulation::dispatch_ctrs(const idol::Model &t_src_model) {

const auto n_sub_problems = m_sub_problems.size();

Expand All @@ -86,7 +86,7 @@ void idol::AlternatingDirection::Formulation::dispatch_ctrs(const idol::Model &t

}

void idol::AlternatingDirection::Formulation::dispatch_ctr(const idol::Model &t_src_model, const idol::Ctr &t_ctr, unsigned int t_sub_problem_id) {
void idol::ADM::Formulation::dispatch_ctr(const idol::Model &t_src_model, const idol::Ctr &t_ctr, unsigned int t_sub_problem_id) {

const auto& row = t_src_model.get_ctr_row(t_ctr);
const auto type = t_src_model.get_ctr_type(t_ctr);
Expand Down Expand Up @@ -131,7 +131,7 @@ void idol::AlternatingDirection::Formulation::dispatch_ctr(const idol::Model &t_
}

void
idol::AlternatingDirection::Formulation::dispatch_obj(const Model &t_src_model) {
idol::ADM::Formulation::dispatch_obj(const Model &t_src_model) {

const unsigned int n_sub_problems = m_sub_problems.size();

Expand All @@ -141,10 +141,10 @@ idol::AlternatingDirection::Formulation::dispatch_obj(const Model &t_src_model)

}

std::pair<idol::Expr<idol::Var, idol::Var>, bool> idol::AlternatingDirection::Formulation::dispatch(const idol::Model &t_src_model,
const idol::LinExpr<idol::Var> &t_lin_expr,
const idol::QuadExpr<idol::Var, idol::Var> &t_quad_expr,
unsigned int t_sub_problem_id) {
std::pair<idol::Expr<idol::Var, idol::Var>, bool> idol::ADM::Formulation::dispatch(const idol::Model &t_src_model,
const idol::LinExpr<idol::Var> &t_lin_expr,
const idol::QuadExpr<idol::Var, idol::Var> &t_quad_expr,
unsigned int t_sub_problem_id) {

bool is_pure = true; // true if the row only has variables from the same sub-problem

Expand Down Expand Up @@ -197,7 +197,7 @@ std::pair<idol::Expr<idol::Var, idol::Var>, bool> idol::AlternatingDirection::Fo
}

void
idol::AlternatingDirection::Formulation::dispatch_obj(const Model &t_src_model, unsigned int t_sub_problem_id) {
idol::ADM::Formulation::dispatch_obj(const Model &t_src_model, unsigned int t_sub_problem_id) {

const auto& obj = t_src_model.get_obj_expr();
auto [pattern, is_pure] = dispatch(t_src_model, obj.linear(), obj.quadratic(), t_sub_problem_id);
Expand All @@ -216,8 +216,8 @@ idol::AlternatingDirection::Formulation::dispatch_obj(const Model &t_src_model,

}

void idol::AlternatingDirection::Formulation::fix_sub_problem(unsigned int t_sub_problem_id,
const std::vector<Solution::Primal> &t_primals) {
void idol::ADM::Formulation::fix_sub_problem(unsigned int t_sub_problem_id,
const std::vector<Solution::Primal> &t_primals) {

// Constraints
for (const auto& [ctr, pattern] : m_constraint_patterns[t_sub_problem_id]) {
Expand Down Expand Up @@ -254,8 +254,8 @@ void idol::AlternatingDirection::Formulation::fix_sub_problem(unsigned int t_sub

}

double idol::AlternatingDirection::Formulation::fix(const idol::Constant &t_constant,
const std::vector<Solution::Primal> &t_primals) {
double idol::ADM::Formulation::fix(const idol::Constant &t_constant,
const std::vector<Solution::Primal> &t_primals) {
double result = t_constant.numerical();

for (const auto& [param, coefficient] : t_constant.linear()) {
Expand All @@ -278,16 +278,16 @@ double idol::AlternatingDirection::Formulation::fix(const idol::Constant &t_cons
return result;
}

idol::Model &idol::AlternatingDirection::Formulation::sub_problem(const idol::Var &t_var) {
idol::Model &idol::ADM::Formulation::sub_problem(const idol::Var &t_var) {
return m_sub_problems[t_var.get(m_decomposition)];
}

const idol::Model &idol::AlternatingDirection::Formulation::sub_problem(const idol::Var &t_var) const {
const idol::Model &idol::ADM::Formulation::sub_problem(const idol::Var &t_var) const {
return m_sub_problems[t_var.get(m_decomposition)];
}

void
idol::AlternatingDirection::Formulation::update_penalty_parameters(const std::vector<Solution::Primal> &t_primals) {
idol::ADM::Formulation::update_penalty_parameters(const std::vector<Solution::Primal> &t_primals) {

for (unsigned int i = 0, n_sub_problems = m_sub_problems.size() ; i < n_sub_problems ; ++i) {
auto& model = m_sub_problems[i];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@

#include "idol/modeling/models/Model.h"

namespace idol::AlternatingDirection {
namespace idol::ADM {
class Formulation;
}

class idol::AlternatingDirection::Formulation {
class idol::ADM::Formulation {
public:
Formulation(const Model& t_src_model,
Annotation<Var, unsigned int> t_decomposition,
Expand Down
Loading

0 comments on commit 38aa73b

Please sign in to comment.