Skip to content

Commit

Permalink
Use updated antares-solver API (output path changes) [ANT-2561]
Browse files Browse the repository at this point in the history
  • Loading branch information
flomnes committed Dec 20, 2024
1 parent f9c72b0 commit 2817f49
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 15 deletions.
50 changes: 44 additions & 6 deletions src/cpp/lpnamer/main/ProblemGeneration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,19 @@ ProblemGeneration::ProblemGeneration(ProblemGenerationOptions& options)
}
}

std::filesystem::path ProblemGeneration::performAntaresSimulation() {
static std::string lowerCase(std::string data) {
std::transform(data.begin(), data.end(), data.begin(),
[](unsigned char c) { return std::tolower(c); });
return data;
}

void ProblemGeneration::performAntaresSimulation(
const std::filesystem::path& output) {
Antares::Solver::Optimization::OptimizationOptions optOptions;

optOptions.ortoolsSolver = lowerCase(solver_name_);
auto results =
Antares::API::PerformSimulation(options_.StudyPath(), optOptions);
Antares::API::PerformSimulation(options_.StudyPath(), output, optOptions);
// Add parallel

// Handle errors
Expand All @@ -74,7 +83,32 @@ std::filesystem::path ProblemGeneration::performAntaresSimulation() {
}

lps_ = std::move(results.antares_problems);
return {results.simulationPath};
}

static std::string getCurrentTimestamp() {
// Get the current time point
auto now = std::chrono::system_clock::now();

// Convert to time_t for formatting
std::time_t now_time_t = std::chrono::system_clock::to_time_t(now);

// Convert to tm structure
std::tm now_tm;
#ifdef _WIN32
localtime_s(&now_tm, &now_time_t); // Windows-specific
#else
localtime_r(&now_time_t, &now_tm); // POSIX-specific
#endif

// Format the timestamp
std::ostringstream oss;
oss << std::put_time(&now_tm, "%Y%m%d-%H%Meco");
return oss.str();
}

// Useful only for "API" mode
std::filesystem::path generateOutputName(const std::filesystem::path& study) {
return study / "output" / getCurrentTimestamp();
}

std::filesystem::path ProblemGeneration::updateProblems() {
Expand All @@ -83,8 +117,6 @@ std::filesystem::path ProblemGeneration::updateProblems() {
const auto archive_path = options_.ArchivePath();
std::filesystem::path study_dir;

set_solver(study_dir, logger.get());

if (mode_ == SimulationInputMode::ARCHIVE) {
xpansion_output_dir =
options_.deduceXpansionDirIfEmpty(xpansion_output_dir, archive_path);
Expand All @@ -94,8 +126,8 @@ std::filesystem::path ProblemGeneration::updateProblems() {
}

if (mode_ == SimulationInputMode::ANTARES_API) {
simulation_dir_ = performAntaresSimulation();
study_dir = options_.StudyPath();
simulation_dir_ = generateOutputName(study_dir);
}

if (mode_ == SimulationInputMode::FILE) {
Expand All @@ -119,6 +151,12 @@ std::filesystem::path ProblemGeneration::updateProblems() {
auto logger = ProblemGenerationLog::BuildLogger(log_file_path, std::cout,
"Problem Generation"s);

set_solver(study_dir, logger.get());

if (mode_ == SimulationInputMode::ANTARES_API) {
performAntaresSimulation(simulation_dir_);
}

auto master_formulation = options_.MasterFormulation();
auto additionalConstraintFilename_l =
options_.AdditionalConstraintsFilename();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@
#include <antares/solver/lps/LpsFromAntares.h>

#include <filesystem>
#include <string>
#include <optional>
#include <string>

// clang-format off
#include "antares-xpansion/lpnamer/input_reader/MpsTxtWriter.h"
#include "antares-xpansion/lpnamer/model/Problem.h"
#include "antares-xpansion/lpnamer/model/SimulationInputMode.h"
Expand All @@ -18,6 +19,7 @@
#include "antares-xpansion/lpnamer/helper/ProblemGenerationLogger.h"
#include "ProblemGenerationOptions.h"
#include "antares-xpansion/multisolver_interface/SolverAbstract.h"
// clang-format on

class ProblemGeneration {
public:
Expand Down Expand Up @@ -49,11 +51,13 @@ class ProblemGeneration {
const std::vector<ProblemData>& mpsList, std::filesystem::path& lpDir_,
std::shared_ptr<ArchiveReader> reader,
const Antares::Solver::LpsFromAntares& lps);
virtual void set_solver(std::filesystem::path study_dir, ProblemGenerationLog::ProblemGenerationLogger* logger);
virtual void set_solver(
std::filesystem::path study_dir,
ProblemGenerationLog::ProblemGenerationLogger* logger);

Antares::Solver::LpsFromAntares lps_;
std::optional<SimulationInputMode> mode_;
virtual std::filesystem::path performAntaresSimulation();
virtual void performAntaresSimulation(const std::filesystem::path& output);
std::filesystem::path simulation_dir_;
std::string solver_name_;
};
8 changes: 2 additions & 6 deletions tests/cpp/lp_namer/ProblemGenerationExeOptionsTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,10 @@ class ProblemGenerationSpyAndMock : public ProblemGeneration {
}

private:
std::filesystem::path performAntaresSimulation() override {
return options_.StudyPath() / "simulation";
}
void performAntaresSimulation(const std::filesystem::path&) override {}
void set_solver(
std::filesystem::path study_dir,
ProblemGenerationLog::ProblemGenerationLogger* logger) override {

}
ProblemGenerationLog::ProblemGenerationLogger* logger) override {}

public:
std::filesystem::path xpansion_output_dir_;
Expand Down

0 comments on commit 2817f49

Please sign in to comment.