Antares Simulator
Power System Simulator
h2o_j_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 #ifndef __SOLVER_H2O_J_STRUCTURE_INTERNE__
22 #define __SOLVER_H2O_J_STRUCTURE_INTERNE__
23 
24 #include <string>
25 #include <vector>
26 
27 #include <antares/solver/hydro/probleme_spx_wrapper.h>
28 
29 #include "spx_definition_arguments.h"
30 
31 #define LINFINI 1.e+80
32 
33 namespace DoneesOptimisationJournaliere
34 {
35 /*--------------------------------------------------------------------------------------*/
36 /* Matrice des contraintes: il y aura une seule instance pour tous les reservoirs */
37 /* Dans ce struct il n'y a que des donnees qui sont lues et surtout pas ecrites */
38 /* Ce struct est instancie une seule fois */
40 {
41  int NombreDeVariables{0};
42  std::vector<double> CoutLineaire;
43  std::vector<int> TypeDeVariable; /* Indicateur du type de variable, il ne doit prendre que les
44  suivantes (voir le fichier spx_constantes_externes.h mais ne jamais
45  utiliser les valeurs explicites des constantes): VARIABLE_FIXE ,
46  VARIABLE_BORNEE_DES_DEUX_COTES ,
47  VARIABLE_BORNEE_INFERIEUREMENT ,
48  VARIABLE_BORNEE_SUPERIEUREMENT ,
49  VARIABLE_NON_BORNEE
50  */
51  /* La matrice des contraintes */
52  int NombreDeContraintes{0};
53  std::vector<char> Sens;
54  std::vector<int> IndicesDebutDeLigne;
55  std::vector<int> NombreDeTermesDesLignes;
56  std::vector<double> CoefficientsDeLaMatriceDesContraintes;
57  std::vector<int> IndicesColonnes;
58  int NombreDeTermesAlloues{0};
59 };
60 
61 /* Partie variable renseignee avant le lancement de l'optimisation de chaque reservoir */
63 {
64  /* Donnees variables de la matrice des contraintes */
65  /* On met quand-meme les bornes dans la partie variable pour le cas ou on voudrait avoir
66  un jour des bornes min et max variables dans le temps et en fonction des reservoirs */
67  std::vector<double> Xmin;
68  std::vector<double> Xmax;
69  std::vector<double> SecondMembre;
70  /* Tableau de pointeur a des doubles. Ce tableau est parallele a X, il permet
71  de renseigner directement les structures de description du reseau avec les
72  resultats contenus dans X */
73  std::vector<double*> AdresseOuPlacerLaValeurDesVariablesOptimisees;
74  /* Resultat */
75  std::vector<double> X;
76  /* En Entree ou en Sortie */
77  int ExistenceDUneSolution{NON_SPX}; /* En sortie, vaut :
78  OUI_SPX s'il y a une solution,
79  NON_SPX s'il n'y a pas de solution
80  admissible SPX_ERREUR_INTERNE si probleme a l'execution
81  (saturation memoire par exemple), et dans ce cas il n'y a pas de
82  solution SPX_MATRICE_DE_BASE_SINGULIERE si on n'a pas pu
83  construire de matrice de base reguliere, et dans ce cas il n'y a
84  pas de solution
85  */
86 
87  std::vector<int>
88  PositionDeLaVariable; /* Vecteur a passer au Simplexe pour recuperer la base optimale */
89  std::vector<int>
90  ComplementDeLaBase; /* Vecteur a passer au Simplexe pour recuperer la base optimale */
91  std::vector<double>
92  CoutsReduits; /* Vecteur a passer au Simplexe pour recuperer les couts reduits */
93  std::vector<double> CoutsMarginauxDesContraintes; /* Vecteur a passer au Simplexe pour recuperer
94  les couts marginaux */
95 };
96 
97 /* Les correspondances fixes des contraintes */
99 {
100  int NumeroDeContrainteDEnergieMensuelle{0}; /* Somme des turbines = somme des cibles */
101  std::vector<int> NumeroDeContrainteSurXi; /* turbine[t] + xi[t] >= cible[t] */
102  std::vector<int> NumeroDeContrainteSurXiSym; /* cible[t] + xi[t] >= turbine[t] */
103  std::vector<int> NumeroDeContrainteSurXiPlus; /* turbine[t] + xi_plus >= cible[t] */
104  std::vector<int> NumeroDeContrainteSurXiMoins; /* cible[t] + xi_moins >= turbine[t] */
105 };
106 
107 /* Les correspondances des variables */
109 {
110  std::vector<int> NumeroDeVariableTurbine; /* Turbines */
111  // int NumeroDeLaVariableMu{0}; /* Variable de deversement (total sur la periode)
112  // */
113  std::vector<int> NumeroDeLaVariableXi; /* Variable decrivant l'ecart max au turbine cible quand
114  le turbine est inferieur au turbine cible */
115 
116  int NumeroDeLaVariableXiPlus{0}; /* Ecart global positif */
117  int NumeroDeLaVariableXiMoins{0}; /* Ecart global négatif */
118 };
119 
120 /* Structure uniquement exploitee par l'optimisation (donc a ne pas acceder depuis l'exterieur) */
122 {
123  int NombreDeProblemes{0};
124  std::vector<int> NbJoursDUnProbleme;
125 
126  std::vector<CORRESPONDANCE_DES_VARIABLES> CorrespondanceDesVariables;
127  std::vector<CORRESPONDANCE_DES_CONTRAINTES> CorrespondanceDesContraintes;
128 
129  std::vector<PROBLEME_LINEAIRE_PARTIE_FIXE> ProblemeLineairePartieFixe;
130  std::vector<PROBLEME_LINEAIRE_PARTIE_VARIABLE> ProblemeLineairePartieVariable;
131 
132  /* Il y en a 1 par reservoir. Un probleme couvre 1 mois */
133  std::vector<PROBLEME_SPX_WRAPPER> ProblemeSpx;
134 };
135 } // namespace DoneesOptimisationJournaliere
136 #endif
Definition: h2o_j_donnees_optimisation.h:99
Definition: h2o_j_donnees_optimisation.h:109
Definition: h2o_j_donnees_optimisation.h:122
Definition: h2o_j_donnees_optimisation.h:40
Definition: h2o_j_donnees_optimisation.h:63