Antares Simulator
Power System Simulator
opt_structure_probleme_a_resoudre.h
1 /*
2 ** Copyright 2007-2025, RTE (https://www.rte-france.com)
3 ** See AUTHORS.txt
4 ** SPDX-License-Identifier: MPL-2.0
5 ** This file is part of Antares-Simulator,
6 ** Adequacy and Performance assessment for interconnected energy networks.
7 **
8 ** Antares_Simulator is free software: you can redistribute it and/or modify
9 ** it under the terms of the Mozilla Public Licence 2.0 as published by
10 ** the Mozilla Foundation, either version 2 of the License, or
11 ** (at your option) any later version.
12 **
13 ** Antares_Simulator is distributed in the hope that it will be useful,
14 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 ** Mozilla Public Licence 2.0 for more details.
17 **
18 ** You should have received a copy of the Mozilla Public Licence 2.0
19 ** along with Antares_Simulator. If not, see <https://opensource.org/license/mpl-2-0/>.
20 */
21 #pragma once
22 
23 #include <algorithm>
24 #include <string>
25 #include <vector>
26 
27 #include <antares/solver/utils/basis_status.h>
28 
29 #include "ortools/linear_solver/linear_solver.h"
30 
31 /*--------------------------------------------------------------------------------------*/
32 
33 /* Le probleme a resoudre */
35 {
36 public:
37  /* La matrice des contraintes */
38  int NombreDeVariables;
39  int NombreDeContraintes; /* Il est egal a :
40  ( NombreDePays contraintes de bilan
41  + NombreDePays contraintes de reserve
42  + NombreDeContraintesCouplantes
43  )* NombreDePasDeTempsDUneJournee
44  + NombreDePays contraintes de turbine */
45  std::string Sens;
46  std::vector<int> IndicesDebutDeLigne;
47  std::vector<int> NombreDeTermesDesLignes;
48  std::vector<double> CoefficientsDeLaMatriceDesContraintes;
49  std::vector<int> IndicesColonnes;
50  int IncrementDAllocationMatriceDesContraintes;
51  int NombreDeTermesDansLaMatriceDesContraintes;
52  /* Donnees variables de la matrice des contraintes */
53  std::vector<double> CoutQuadratique;
54  std::vector<double> CoutLineaire;
55  std::vector<int> TypeDeVariable; /* Indicateur du type de variable, il ne doit prendre que les
56  suivantes (voir le fichier spx_constantes_externes.h mais ne jamais
57  utiliser les valeurs explicites des constantes): VARIABLE_FIXE ,
58  VARIABLE_BORNEE_DES_DEUX_COTES ,
59  VARIABLE_BORNEE_INFERIEUREMENT ,
60  VARIABLE_BORNEE_SUPERIEUREMENT ,
61  VARIABLE_NON_BORNEE
62  */
63  std::vector<double> Xmin;
64  std::vector<double> Xmax;
65  std::vector<double> SecondMembre;
66  /* Tableau de pointeur a des doubles. Ce tableau est parallele a X, il permet
67  de renseigner directement les structures de description du reseau avec les
68  resultats contenus dans X */
69  std::vector<double*> AdresseOuPlacerLaValeurDesVariablesOptimisees;
70  /* Resultat */
71  std::vector<double> X;
72  /* Tableau de pointeur a des doubles. Ce tableau est parallele a CoutsMarginauxDesContraintes,
73  il permet de renseigner directement les structures de description du reseau avec les
74  resultats sur les couts marginaux */
75  std::vector<double*> AdresseOuPlacerLaValeurDesCoutsMarginaux;
76  std::vector<double> CoutsMarginauxDesContraintes;
77  /* Tableau de pointeur a des doubles. Ce tableau est parallele a CoutsMarginauxDesContraintes,
78  il permet de renseigner directement les structures de description du reseau avec les
79  resultats sur les couts reduits */
80  std::vector<double*> AdresseOuPlacerLaValeurDesCoutsReduits;
81  std::vector<double> CoutsReduits;
82  /* En Entree ou en Sortie */
83  int ExistenceDUneSolution; /* En sortie, vaut :
84  OUI_SPX s'il y a une solution,
85  NON_SPX s'il n'y a pas de solution admissible
86  SPX_ERREUR_INTERNE si probleme a l'execution (saturation memoire
87  par exemple), et dans ce cas il n'y a pas de solution
88  SPX_MATRICE_DE_BASE_SINGULIERE si on n'a pas pu construire de
89  matrice de base reguliere, et dans ce cas il n'y a pas de solution
90  */
91 
92  std::vector<std::unique_ptr<operations_research::MPSolver>> ProblemesSpx;
93 
94  std::vector<int>
95  PositionDeLaVariable; /* Vecteur a passer au Simplexe pour recuperer la base optimale */
96  std::vector<int>
97  ComplementDeLaBase; /* Vecteur a passer au Simplexe pour recuperer la base optimale */
98 
99  /* Vecteurs de travail pour contruire la matrice des contraintes lineaires */
100  std::vector<double> Pi;
101  std::vector<int> Colonne;
102 
103  /* Nommage des variables & contraintes */
104  std::vector<std::string> NomDesVariables;
105  std::vector<std::string> NomDesContraintes;
106 
107  std::vector<bool> VariablesEntieres; // true = int, false = continuous
108 
109  // PIMPL is used to break dependency to OR-Tools' linear_solver.h (big header)
111 
112  void clearBasis()
113  {
114  basisStatus.clear();
115  }
116 
117  bool isMIP() const
118  {
119  return std::any_of(VariablesEntieres.cbegin(),
120  VariablesEntieres.cend(),
121  [](bool x) { return x; });
122  }
123 };
Definition: basis_status.h:40
Definition: opt_structure_probleme_a_resoudre.h:35