Antares Simulator
Power System Simulator
h2o_m_donnees_optimisation.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 <vector>
24 
25 #include <antares/solver/hydro/probleme_spx_wrapper.h>
26 
27 #include "spx_definition_arguments.h"
28 
29 #define LINFINI 1.e+80
30 
31 namespace DonneesOptimisationMensuelle
32 {
33 /*--------------------------------------------------------------------------------------*/
34 /* Matrice des contraintes: il y aura une seule instance pour tous les reservoirs */
35 /* Dans ce struct il n'y a que des donnees qui sont lues et surtout pas ecrites */
36 /* Ce struct est instancie une seule fois */
38 {
39  int NombreDeVariables{0};
40  std::vector<double> CoutLineaire;
41  std::vector<double> CoutLineaireBruite; // Ajout de bruit pour forcer l'unicité des solutions
42  std::vector<int> TypeDeVariable;
43 
44  // La matrice des contraintes
45  int NombreDeContraintes{0};
46  std::vector<char> Sens;
47  std::vector<int> IndicesDebutDeLigne;
48  std::vector<int> NombreDeTermesDesLignes;
49  std::vector<double> CoefficientsDeLaMatriceDesContraintes;
50  std::vector<int> IndicesColonnes;
51  int NombreDeTermesAlloues{0};
52 };
53 
54 /* Partie variable renseignee avant le lancement de l'optimisation de chaque reservoir */
56 {
57  /* Donnees variables de la matrice des contraintes */
58  /* On met quand-meme les bornes dans la partie variable pour le cas ou on voudrait avoir
59  un jour des bornes min et max variables dans le temps et en fonction des reservoirs */
60  std::vector<double> Xmin;
61  std::vector<double> Xmax;
62  std::vector<double> SecondMembre;
63  /* Tableau de pointeur a des doubles. Ce tableau est parallele a X, il permet
64  de renseigner directement les structures de description du reseau avec les
65  resultats contenus dans X */
66  std::vector<double*> AdresseOuPlacerLaValeurDesVariablesOptimisees;
67  // Resultats
68  std::vector<double> X;
69  /* En Entree ou en Sortie */
70 
71  // Existence d'une solution vaut :
72  // OUI_SPX s'il y a une solution,
73  // NON_SPX s'il n'y a pas de solution admissible
74  // SPX_ERREUR_INTERNE si :
75  // + probleme a l'execution (saturation memoire par exemple),
76  // et dans ce cas il n'y a pas de solution SPX_MATRICE_DE_BASE_SINGULIERE
77  // + on n'a pas pu construire de matrice de base reguliere, et dans ce cas il n'y a
78  // pas de solution
79  int ExistenceDUneSolution{0};
80 
81  // Vecteurs a passer au Simplexe pour recuperer la base optimale
82  std::vector<int> PositionDeLaVariable;
83  std::vector<int> ComplementDeLaBase;
84  // Vecteur a passer au Simplexe pour recuperer les couts reduits
85  std::vector<double> CoutsReduits;
86  // Vecteur a passer au Simplexe pour recuperer les couts marginaux
87  std::vector<double> CoutsMarginauxDesContraintes;
88 };
89 
90 /* Les correspondances des variables */
92 {
93  std::vector<int> NumeroDeVariableVolume;
94  std::vector<int> NumeroDeVariableTurbine;
95  std::vector<int> NumeroDeVariableOverflow;
96  std::vector<int> NumeroDeVariableDepassementVolumeMax;
97  std::vector<int> NumeroDeVariableDepassementVolumeMin;
98  int NumeroDeLaVariableViolMaxVolumeMin{0};
99  std::vector<int> NumeroDeVariableDEcartPositifAuTurbineCible;
100  std::vector<int> NumeroDeVariableDEcartNegatifAuTurbineCible;
101  int NumeroDeLaVariableXi{0};
102 };
103 
104 /* Structure uniquement exploitee par l'optimisation (donc a ne pas acceder depuis l'exterieur) */
106 {
107  int NombreDeReservoirs{0};
108  CORRESPONDANCE_DES_VARIABLES CorrespondanceDesVariables{};
109 
110  PROBLEME_LINEAIRE_PARTIE_FIXE ProblemeLineairePartieFixe{};
111  PROBLEME_LINEAIRE_PARTIE_VARIABLE ProblemeLineairePartieVariable{};
112 
113  std::vector<PROBLEME_SPX_WRAPPER> ProblemeSpx; /* Il y en a 1 par reservoir */
114 
115  double CoutDeLaSolution{0.};
116  double CoutDeLaSolutionBruite{0.};
117 };
118 } // namespace DonneesOptimisationMensuelle
Definition: h2o_m_donnees_optimisation.h:92
Definition: h2o_m_donnees_optimisation.h:106
Definition: h2o_m_donnees_optimisation.h:38
Definition: h2o_m_donnees_optimisation.h:56