14#ifndef OR_TOOLS_BOP_BOP_PORTFOLIO_H_
15#define OR_TOOLS_BOP_BOP_PORTFOLIO_H_
22#include "ortools/bop/bop_parameters.pb.h"
26#include "ortools/sat/boolean_problem.pb.h"
67 const BopSolverOptimizerSet& optimizer_set,
68 const std::string&
name);
81 void AddOptimizer(
const sat::LinearBooleanProblem& problem,
83 const BopOptimizerMethod& optimizer_method);
84 void CreateOptimizers(
const sat::LinearBooleanProblem& problem,
86 const BopSolverOptimizerSet& optimizer_set);
88 std::unique_ptr<MTRandom> random_;
89 int64_t state_update_stamp_;
91 std::unique_ptr<OptimizerSelector> selector_;
94 BopParameters parameters_;
97 int number_of_consecutive_failing_optimizers_;
154 std::string
PrintStats(OptimizerIndex optimizer_index)
const;
163 void NewSolutionFound(int64_t gain);
166 void UpdateDeterministicTime(
double time_spent);
172 RunInfo(OptimizerIndex i,
const std::string& n)
173 : optimizer_index(i),
179 time_spent_since_last_solution(0),
184 bool RunnableAndSelectable()
const {
return runnable && selectable; }
186 OptimizerIndex optimizer_index;
192 double time_spent_since_last_solution;
198 std::vector<RunInfo> run_infos_;
A simple class to enforce both an elapsed time limit and a deterministic time limit in the same threa...
const std::string & name() const
void UpdateScore(int64_t gain, double time_spent)
std::string PrintStats(OptimizerIndex optimizer_index) const
int NumCallsForOptimizer(OptimizerIndex optimizer_index) const
OptimizerSelector(const absl::StrongVector< OptimizerIndex, BopOptimizerBase * > &optimizers)
OptimizerIndex SelectOptimizer()
void TemporarilyMarkOptimizerAsUnselectable(OptimizerIndex optimizer_index)
void SetOptimizerRunnability(OptimizerIndex optimizer_index, bool runnable)
~PortfolioOptimizer() override
bool ShouldBeRun(const ProblemState &problem_state) const override
Status Optimize(const BopParameters ¶meters, const ProblemState &problem_state, LearnedInfo *learned_info, TimeLimit *time_limit) override
PortfolioOptimizer(const ProblemState &problem_state, const BopParameters ¶meters, const BopSolverOptimizerSet &optimizer_set, const std::string &name)
SharedTimeLimit * time_limit
const OptimizerIndex kInvalidOptimizerIndex(-1)
DEFINE_INT_TYPE(OptimizerIndex, int)
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...