Skip to content

Commit

Permalink
Add Highs support as LP solver
Browse files Browse the repository at this point in the history
  • Loading branch information
fontanf committed Mar 4, 2025
1 parent 3dffb2f commit cbc43e2
Show file tree
Hide file tree
Showing 14 changed files with 26 additions and 20 deletions.
3 changes: 2 additions & 1 deletion extern/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,11 @@ FetchContent_MakeAvailable(treesearchsolver)

# Fetch fontanf/columngenerationsolver.
set(COLUMNGENERATIONSOLVER_USE_CLP ON)
set(COLUMNGENERATIONSOLVER_USE_HIGHS ON)
FetchContent_Declare(
columngenerationsolver
GIT_REPOSITORY https://github.com/fontanf/columngenerationsolver.git
GIT_TAG 0a57d7ea85f5e06a4b911a37f3c4e939b0d616d9
GIT_TAG 6f449498593dfe846f6bbb72364394a4a0388b86
#SOURCE_DIR "${PROJECT_SOURCE_DIR}/../columngenerationsolver/"
EXCLUDE_FROM_ALL)
FetchContent_MakeAvailable(columngenerationsolver)
Expand Down
4 changes: 2 additions & 2 deletions include/packingsolver/boxstacks/optimize.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

#include "packingsolver/boxstacks/solution.hpp"

#include "columngenerationsolver/linear_programming_solver.hpp"
#include "columngenerationsolver/commons.hpp"

namespace packingsolver
{
Expand Down Expand Up @@ -84,7 +84,7 @@ struct OptimizeParameters: packingsolver::Parameters<Instance, Solution>
OptimizationMode optimization_mode = OptimizationMode::Anytime;

/** Linear programming solver. */
columngenerationsolver::SolverName solver_name
columngenerationsolver::SolverName linear_programming_solver_name
= columngenerationsolver::SolverName::CLP;

/** Use tree search algorithm. */
Expand Down
4 changes: 2 additions & 2 deletions include/packingsolver/irregular/optimize.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

#include "packingsolver/irregular/solution.hpp"

#include "columngenerationsolver/linear_programming_solver.hpp"
#include "columngenerationsolver/commons.hpp"

namespace packingsolver
{
Expand All @@ -21,7 +21,7 @@ struct OptimizeParameters: packingsolver::Parameters<Instance, Solution>
OptimizationMode optimization_mode = OptimizationMode::Anytime;

/** Linear programming solver. */
columngenerationsolver::SolverName solver_name
columngenerationsolver::SolverName linear_programming_solver_name
= columngenerationsolver::SolverName::CLP;

/** Use tree search algorithm. */
Expand Down
4 changes: 2 additions & 2 deletions include/packingsolver/onedimensional/optimize.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

#include "packingsolver/onedimensional/solution.hpp"

#include "columngenerationsolver/linear_programming_solver.hpp"
#include "columngenerationsolver/commons.hpp"

namespace packingsolver
{
Expand All @@ -21,7 +21,7 @@ struct OptimizeParameters: packingsolver::Parameters<Instance, Solution>
OptimizationMode optimization_mode = OptimizationMode::Anytime;

/** Linear programming solver. */
columngenerationsolver::SolverName solver_name
columngenerationsolver::SolverName linear_programming_solver_name
= columngenerationsolver::SolverName::CLP;

/** Use tree search algorithm. */
Expand Down
4 changes: 2 additions & 2 deletions include/packingsolver/rectangle/optimize.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

#include "packingsolver/rectangle/solution.hpp"

#include "columngenerationsolver/linear_programming_solver.hpp"
#include "columngenerationsolver/commons.hpp"

namespace packingsolver
{
Expand All @@ -24,7 +24,7 @@ struct OptimizeParameters: packingsolver::Parameters<Instance, Solution>
Solution* fixed_items = nullptr;

/** Linear programming solver. */
columngenerationsolver::SolverName solver_name
columngenerationsolver::SolverName linear_programming_solver_name
= columngenerationsolver::SolverName::CLP;

/** Use tree search algorithm. */
Expand Down
4 changes: 2 additions & 2 deletions include/packingsolver/rectangleguillotine/optimize.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

#include "packingsolver/rectangleguillotine/solution.hpp"

#include "columngenerationsolver/linear_programming_solver.hpp"
#include "columngenerationsolver/commons.hpp"

namespace packingsolver
{
Expand All @@ -21,7 +21,7 @@ struct OptimizeParameters: packingsolver::Parameters<Instance, Solution>
OptimizationMode optimization_mode = OptimizationMode::Anytime;

/** Linear programming solver. */
columngenerationsolver::SolverName solver_name
columngenerationsolver::SolverName linear_programming_solver_name
= columngenerationsolver::SolverName::CLP;

/** Use tree search algorithm. */
Expand Down
4 changes: 2 additions & 2 deletions src/boxstacks/optimize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ packingsolver::boxstacks::Output packingsolver::boxstacks::optimize(
sor_parameters.verbosity_level = 0;
sor_parameters.timer = parameters.timer;
sor_parameters.logger = logger;
sor_parameters.onedimensional_parameters.solver_name = parameters.solver_name;
sor_parameters.onedimensional_parameters.linear_programming_solver_name = parameters.linear_programming_solver_name;
//sor_parameters.info.set_verbosity_level(2);
sor_parameters.new_solution_callback = [
&algorithm_formatter](
Expand Down Expand Up @@ -236,7 +236,7 @@ packingsolver::boxstacks::Output packingsolver::boxstacks::optimize(
= (parameters.optimization_mode == OptimizationMode::NotAnytimeSequential)?
OptimizationMode::NotAnytimeSequential:
OptimizationMode::NotAnytime;
kp_parameters.solver_name = parameters.solver_name;
kp_parameters.linear_programming_solver_name = parameters.linear_programming_solver_name;
kp_parameters.not_anytime_tree_search_queue_size
= parameters.sequential_value_correction_subproblem_queue_size;
//kp_parameters.sequential_onedimensional_rectangle_parameters.rectangle_queue_size = parameters.sequential_value_correction_queue_size;
Expand Down
2 changes: 1 addition & 1 deletion src/irregular/optimize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ void optimize_column_generation(
}
};
cgslds_parameters.column_generation_parameters.solver_name
= parameters.solver_name;
= parameters.linear_programming_solver_name;
columngenerationsolver::limited_discrepancy_search(cgs_model, cgslds_parameters);
}

Expand Down
2 changes: 1 addition & 1 deletion src/onedimensional/optimize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@ void optimize_column_generation(
}
};
cgslds_parameters.column_generation_parameters.solver_name
= parameters.solver_name;
= parameters.linear_programming_solver_name;
columngenerationsolver::limited_discrepancy_search(cgs_model, cgslds_parameters);
}

Expand Down
2 changes: 1 addition & 1 deletion src/rectangle/optimize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ void optimize_column_generation(
}
};
cgslds_parameters.column_generation_parameters.solver_name
= parameters.solver_name;
= parameters.linear_programming_solver_name;
columngenerationsolver::limited_discrepancy_search(cgs_model, cgslds_parameters);
}

Expand Down
2 changes: 1 addition & 1 deletion src/rectangleguillotine/column_generation_2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1532,7 +1532,7 @@ void column_generation_2_vertical(
}
};
cgslds_parameters.column_generation_parameters.solver_name
= parameters.solver_name;
= parameters.linear_programming_solver_name;
columngenerationsolver::limited_discrepancy_search(cgs_model, cgslds_parameters);
}

Expand Down
4 changes: 2 additions & 2 deletions src/rectangleguillotine/column_generation_2.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@

#include "packingsolver/rectangleguillotine/solution.hpp"

#include "columngenerationsolver/linear_programming_solver.hpp"
#include "columngenerationsolver/commons.hpp"

namespace packingsolver
{
Expand All @@ -76,7 +76,7 @@ struct ColumnGeneration2Parameters: packingsolver::Parameters<Instance, Solution
bool automatic_stop = false;

/** Linear programming solver. */
columngenerationsolver::SolverName solver_name
columngenerationsolver::SolverName linear_programming_solver_name
= columngenerationsolver::SolverName::CLP;
};

Expand Down
3 changes: 3 additions & 0 deletions src/rectangleguillotine/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ int main(int argc, char *argv[])
("verbosity-level,v", po::value<int>(), "Verbosity level")
("log2stderr,w", "Write log in stderr")

("linear-programming-solver,", po::value<columngenerationsolver::SolverName>(), "set linear programming solver")
("optimization-mode,", po::value<OptimizationMode>(), "set optimization mode")
("use-tree-search,", po::value<bool>(), "enable tree search algorithm")
("use-column-generation-2,", po::value<bool>(), "enable column generation 2 algorithm")
Expand Down Expand Up @@ -218,6 +219,8 @@ int main(int argc, char *argv[])

OptimizeParameters parameters;
read_args(parameters, vm);
if (vm.count("linear-programming-solver"))
parameters.linear_programming_solver_name = vm["linear-programming-solver"].as<columngenerationsolver::SolverName>();
if (vm.count("optimization-mode"))
parameters.optimization_mode = vm["optimization-mode"].as<OptimizationMode>();

Expand Down
4 changes: 3 additions & 1 deletion src/rectangleguillotine/optimize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,8 @@ void optimize_column_generation_2(
ColumnGeneration2Parameters cg_parameters;
cg_parameters.verbosity_level = 0;
cg_parameters.timer = parameters.timer;
cg_parameters.linear_programming_solver_name
= parameters.linear_programming_solver_name;
if (parameters.optimization_mode == OptimizationMode::Anytime)
cg_parameters.timer.add_end_boolean(&algorithm_formatter.end_boolean());
if (parameters.optimization_mode != OptimizationMode::Anytime)
Expand Down Expand Up @@ -374,7 +376,7 @@ void optimize_column_generation(
}
};
cgslds_parameters.column_generation_parameters.solver_name
= parameters.solver_name;
= parameters.linear_programming_solver_name;
columngenerationsolver::limited_discrepancy_search(cgs_model, cgslds_parameters);
}

Expand Down

0 comments on commit cbc43e2

Please sign in to comment.