From c4bb6ea2b4812de35d32423f4453088dfe706974 Mon Sep 17 00:00:00 2001 From: Guillaume PIERRE Date: Thu, 10 Oct 2024 17:41:23 +0200 Subject: [PATCH] Simplify calls to solver (after modeler 3.1) : move code where it belongs more --- .../opt_appel_solveur_lineaire.cpp | 45 +------------------ .../antares/solver/utils/named_problem.h | 7 ++- src/solver/utils/named_problem.cpp | 41 ++++++++++++++--- 3 files changed, 38 insertions(+), 55 deletions(-) diff --git a/src/solver/optimisation/opt_appel_solveur_lineaire.cpp b/src/solver/optimisation/opt_appel_solveur_lineaire.cpp index 7d2e4d8fdab..76751321cd2 100644 --- a/src/solver/optimisation/opt_appel_solveur_lineaire.cpp +++ b/src/solver/optimisation/opt_appel_solveur_lineaire.cpp @@ -164,48 +164,8 @@ static SimplexResult OPT_TryToCallSimplex(const OptimizationOptions& options, } } - Probleme.NombreMaxDIterations = -1; - Probleme.DureeMaxDuCalcul = -1.; - - Probleme.CoutLineaire = ProblemeAResoudre->CoutLineaire.data(); - Probleme.X = ProblemeAResoudre->X.data(); - Probleme.Xmin = ProblemeAResoudre->Xmin.data(); - Probleme.Xmax = ProblemeAResoudre->Xmax.data(); - Probleme.NombreDeVariables = ProblemeAResoudre->NombreDeVariables; - Probleme.TypeDeVariable = ProblemeAResoudre->TypeDeVariable.data(); - - Probleme.NombreDeContraintes = ProblemeAResoudre->NombreDeContraintes; - Probleme.IndicesDebutDeLigne = ProblemeAResoudre->IndicesDebutDeLigne.data(); - Probleme.NombreDeTermesDesLignes = ProblemeAResoudre->NombreDeTermesDesLignes.data(); - Probleme.IndicesColonnes = ProblemeAResoudre->IndicesColonnes.data(); - Probleme.CoefficientsDeLaMatriceDesContraintes = ProblemeAResoudre - ->CoefficientsDeLaMatriceDesContraintes - .data(); - Probleme.Sens = ProblemeAResoudre->Sens.data(); - Probleme.SecondMembre = ProblemeAResoudre->SecondMembre.data(); - - Probleme.ChoixDeLAlgorithme = SPX_DUAL; - - Probleme.TypeDePricing = PRICING_STEEPEST_EDGE; - Probleme.FaireDuScaling = (PremierPassage ? OUI_SPX : NON_SPX); - Probleme.StrategieAntiDegenerescence = AGRESSIF; - - Probleme.PositionDeLaVariable = ProblemeAResoudre->PositionDeLaVariable.data(); - Probleme.NbVarDeBaseComplementaires = 0; - Probleme.ComplementDeLaBase = ProblemeAResoudre->ComplementDeLaBase.data(); - - Probleme.LibererMemoireALaFin = NON_SPX; - - Probleme.UtiliserCoutMax = NON_SPX; - Probleme.CoutMax = 0.0; - - Probleme.CoutsMarginauxDesContraintes = ProblemeAResoudre->CoutsMarginauxDesContraintes.data(); - Probleme.CoutsReduits = ProblemeAResoudre->CoutsReduits.data(); - - Probleme.NombreDeContraintesCoupes = 0; - auto ortoolsProblem = std::make_unique(Probleme.isMIP(), options.ortoolsSolver); auto legacyOrtoolsFiller = std::make_unique(&Probleme); std::vector fillersCollection = {legacyOrtoolsFiller.get()}; @@ -290,10 +250,7 @@ bool OPT_AppelDuSimplexe(const OptimizationOptions& options, IResultWriter& writer) { const auto& ProblemeAResoudre = problemeHebdo->ProblemeAResoudre; - Optimization::PROBLEME_SIMPLEXE_NOMME Probleme(ProblemeAResoudre->NomDesVariables, - ProblemeAResoudre->NomDesContraintes, - ProblemeAResoudre->VariablesEntieres, - ProblemeAResoudre->basisStatus, + Optimization::PROBLEME_SIMPLEXE_NOMME Probleme(ProblemeAResoudre.get(), problemeHebdo->NamedProblems, options.solverLogs); diff --git a/src/solver/utils/include/antares/solver/utils/named_problem.h b/src/solver/utils/include/antares/solver/utils/named_problem.h index 2df99e77495..1c0e6eb41db 100644 --- a/src/solver/utils/include/antares/solver/utils/named_problem.h +++ b/src/solver/utils/include/antares/solver/utils/named_problem.h @@ -28,6 +28,8 @@ #include "spx_definition_arguments.h" #include "spx_fonctions.h" +#include "antares/solver/simulation/sim_structure_probleme_economique.h" + namespace Antares { namespace Optimization @@ -37,10 +39,7 @@ class BasisStatus; struct PROBLEME_SIMPLEXE_NOMME: public PROBLEME_SIMPLEXE { public: - PROBLEME_SIMPLEXE_NOMME(const std::vector& NomDesVariables, - const std::vector& NomDesContraintes, - const std::vector& VariablesEntieres, - BasisStatus& basisStatus, + PROBLEME_SIMPLEXE_NOMME(PROBLEME_ANTARES_A_RESOUDRE* ProblemeAResoudre, bool UseNamedProblems, bool SolverLogs); diff --git a/src/solver/utils/named_problem.cpp b/src/solver/utils/named_problem.cpp index cd23fa6e103..848b650bec2 100644 --- a/src/solver/utils/named_problem.cpp +++ b/src/solver/utils/named_problem.cpp @@ -26,19 +26,46 @@ namespace Antares::Optimization { -PROBLEME_SIMPLEXE_NOMME::PROBLEME_SIMPLEXE_NOMME(const std::vector& NomDesVariables, - const std::vector& NomDesContraintes, - const std::vector& VariablesEntieres, - BasisStatus& basisStatus, +PROBLEME_SIMPLEXE_NOMME::PROBLEME_SIMPLEXE_NOMME(PROBLEME_ANTARES_A_RESOUDRE* problemeAResoudre, bool UseNamedProblems, bool SolverLogs): - NomDesVariables(NomDesVariables), - NomDesContraintes(NomDesContraintes), + NomDesVariables(problemeAResoudre->NomDesVariables), + NomDesContraintes(problemeAResoudre->NomDesContraintes), + VariablesEntieres(problemeAResoudre->VariablesEntieres), useNamedProblems_(UseNamedProblems), - VariablesEntieres(VariablesEntieres), basisStatus(basisStatus) { AffichageDesTraces = SolverLogs ? OUI_SPX : NON_SPX; + NombreMaxDIterations = -1; + DureeMaxDuCalcul = -1.; + CoutLineaire = problemeAResoudre->CoutLineaire.data(); + X = problemeAResoudre->X.data(); + Xmin = problemeAResoudre->Xmin.data(); + Xmax = problemeAResoudre->Xmax.data(); + NombreDeVariables = problemeAResoudre->NombreDeVariables; + TypeDeVariable = problemeAResoudre->TypeDeVariable.data(); + + NombreDeContraintes = problemeAResoudre->NombreDeContraintes; + IndicesDebutDeLigne = problemeAResoudre->IndicesDebutDeLigne.data(); + NombreDeTermesDesLignes = problemeAResoudre->NombreDeTermesDesLignes.data(); + IndicesColonnes = problemeAResoudre->IndicesColonnes.data(); + CoefficientsDeLaMatriceDesContraintes = problemeAResoudre + ->CoefficientsDeLaMatriceDesContraintes + .data(); + Sens = problemeAResoudre->Sens.data(); + SecondMembre = problemeAResoudre->SecondMembre.data(); + ChoixDeLAlgorithme = SPX_DUAL; + TypeDePricing = PRICING_STEEPEST_EDGE; + StrategieAntiDegenerescence = AGRESSIF; + PositionDeLaVariable = problemeAResoudre->PositionDeLaVariable.data(); + NbVarDeBaseComplementaires = 0; + ComplementDeLaBase = problemeAResoudre->ComplementDeLaBase.data(); + LibererMemoireALaFin = NON_SPX; + UtiliserCoutMax = NON_SPX; + CoutMax = 0.0; + CoutsMarginauxDesContraintes = problemeAResoudre->CoutsMarginauxDesContraintes.data(); + CoutsReduits = problemeAResoudre->CoutsReduits.data(); + NombreDeContraintesCoupes = 0; } bool PROBLEME_SIMPLEXE_NOMME::isMIP() const