Skip to content

Commit

Permalink
dirty
Browse files Browse the repository at this point in the history
  • Loading branch information
a-zakir committed Nov 16, 2023
1 parent d0697c4 commit b6e4720
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 42 deletions.
57 changes: 35 additions & 22 deletions src/solver/optimisation/opt_appel_solveur_lineaire.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,15 +97,15 @@ struct SimplexResult
mpsWriterFactory mps_writer_factory;
};

static SimplexResult OPT_TryToCallSimplex(
const OptimizationOptions& options,
PROBLEME_HEBDO* problemeHebdo,
Optimization::PROBLEME_SIMPLEXE_NOMME& Probleme,
const int NumIntervalle,
const int optimizationNumber,
const OptPeriodStringGenerator& optPeriodStringGenerator,
bool PremierPassage,
IResultWriter& writer)
static SimplexResult OPT_TryToCallSimplex(const OptimizationOptions& options,
PROBLEME_HEBDO* problemeHebdo,
Optimization::PROBLEME_SIMPLEXE_NOMME& Probleme,
const int NumIntervalle,
const int optimizationNumber,
const OptPeriodStringGenerator& optPeriodStringGenerator,
bool PremierPassage,
IResultWriter& writer,
OrtoolsLogHandler& ortools_logger)
{
const auto& ProblemeAResoudre = problemeHebdo->ProblemeAResoudre;
auto ProbSpx
Expand Down Expand Up @@ -242,12 +242,12 @@ static SimplexResult OPT_TryToCallSimplex(
if (options.useOrtools)
{
const bool keepBasis = (optimizationNumber == PREMIERE_OPTIMISATION);
std::ofstream log_writer; // one per thread
// std::ofstream log_writer; // one per thread

std::vector<std::ostream*> log_streams;
// std::vector<std::ostream*> log_streams;
if (Probleme.SolverLogs())
{
setOrtoolsSolverLogs(solver, log_writer, log_streams);
setOrtoolsSolverLogs(solver, ortools_logger);
}
solver = ORTOOLS_Simplexe(&Probleme, solver, keepBasis);
if (solver != nullptr)
Expand Down Expand Up @@ -316,16 +316,30 @@ bool OPT_AppelDuSimplexe(const OptimizationOptions& options,
problemeHebdo->solverLogs);

bool PremierPassage = true;

struct SimplexResult simplexResult =
OPT_TryToCallSimplex(options, problemeHebdo, Probleme, NumIntervalle, optimizationNumber,
optPeriodStringGenerator, PremierPassage, writer);
// tmp
OrtoolsLogHandler ortools_logger;
struct SimplexResult simplexResult = OPT_TryToCallSimplex(options,
problemeHebdo,
Probleme,
NumIntervalle,
optimizationNumber,
optPeriodStringGenerator,
PremierPassage,
writer,
ortools_logger);

if (!simplexResult.success)
{
PremierPassage = false;
simplexResult = OPT_TryToCallSimplex(options, problemeHebdo, Probleme, NumIntervalle, optimizationNumber,
optPeriodStringGenerator, PremierPassage, writer);
simplexResult = OPT_TryToCallSimplex(options,
problemeHebdo,
Probleme,
NumIntervalle,
optimizationNumber,
optPeriodStringGenerator,
PremierPassage,
writer,
ortools_logger);
}

long long solveTime = simplexResult.solveTime;
Expand Down Expand Up @@ -380,13 +394,12 @@ bool OPT_AppelDuSimplexe(const OptimizationOptions& options,

Probleme.SetUseNamedProblems(true);

auto MPproblem = std::shared_ptr<MPSolver>(ProblemSimplexeNommeConverter(options.solverName, &Probleme).Convert());
std::ofstream log_writer; // one per thread
auto MPproblem = std::shared_ptr<MPSolver>(
ProblemSimplexeNommeConverter(options.solverName, &Probleme).Convert());

std::vector<std::ostream*> log_streams;
if (Probleme.SolverLogs())
{
setOrtoolsSolverLogs(MPproblem.get(), log_writer, log_streams);
setOrtoolsSolverLogs(MPproblem.get(), ortools_logger);
}
auto analyzer = makeUnfeasiblePbAnalyzer();
analyzer->run(MPproblem.get());
Expand Down
25 changes: 11 additions & 14 deletions src/solver/utils/ortools_utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,23 +32,20 @@ namespace Antares
{
namespace Optimization
{
void setOrtoolsSolverLogs(MPSolver* solver,
std::ofstream& log_writer, // one per thread

std::vector<std::ostream*>& log_streams)
void setOrtoolsSolverLogs(MPSolver* solver, OrtoolsLogHandler& ortools_logger)
{
// TODO won't work in ci, needs ortools update
// see https://github.com/rte-france/or-tools/pull/112
std::filesystem::path log_file = logs.logfile().c_str();
auto log_directory = log_file.parent_path();
auto myid = std::this_thread::get_id();
std::stringstream ss;
ss << myid;
auto log_file_per_thread = log_directory / (std::string("thread_") + ss.str() + ".log");
// TODO
log_writer.open(log_file_per_thread, std::ofstream::out | std::ofstream::app);
log_streams.push_back(&log_writer);
solver->EnableOutput(&log_streams);
// std::filesystem::path log_file = logs.logfile().c_str();
// auto log_directory = log_file.parent_path();
// auto myid = std::this_thread::get_id();
// std::stringstream ss;
// ss << myid;
// auto log_file_per_thread = log_directory / (std::string("thread_") + ss.str() + ".log");
// // TODO
// log_writer.open(log_file_per_thread, std::ofstream::out | std::ofstream::app);
// log_streams.push_back(&log_writer);
solver->EnableOutput(&ortools_logger);
}

ProblemSimplexeNommeConverter::ProblemSimplexeNommeConverter(
Expand Down
18 changes: 12 additions & 6 deletions src/solver/utils/ortools_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,16 @@

using namespace operations_research;

class OrtoolsLogHandler : public LogHandlerInterface
{
public:
// tmp test with std::cout
explicit OrtoolsLogHandler() = default;
void message(const char* msg) override
{
std::cout << msg << std::endl;
}
};
void ORTOOLS_EcrireJeuDeDonneesLineaireAuFormatMPS(MPSolver* solver,
Antares::Solver::IResultWriter& writer,
const std::string& filename);
Expand Down Expand Up @@ -48,12 +58,8 @@ namespace Antares
{
namespace Optimization
{
void setOrtoolsSolverLogs(MPSolver* solver,
std::ofstream& log_writer, // one per thread

std::vector<std::ostream*>& log_streams)
;
class Nomenclature
void setOrtoolsSolverLogs(MPSolver* solver, OrtoolsLogHandler &ortools_logger);
class Nomenclature
{
public:
Nomenclature() = delete;
Expand Down

0 comments on commit b6e4720

Please sign in to comment.