Antares Simulator
Power System Simulator
h2o2_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_H2O2_J_STRUCTURE_INTERNE__
22 #define __SOLVER_H2O2_J_STRUCTURE_INTERNE__
23 
24 #include <antares/mersenne-twister/mersenne-twister.h>
25 #include <antares/study/study.h>
26 
27 #include "../daily/h2o_j_donnees_optimisation.h"
28 #include "spx_definition_arguments.h"
29 
30 #define LINFINI 1.e+80
31 
32 /*--------------------------------------------------------------------------------------*/
33 /* Matrice des contraintes: il y aura une seule instance pour tous les reservoirs */
34 /* Dans ce struct il n'y a que des donnees qui sont lues et surtout pas ecrites */
35 /* Ce struct est instancie une seule fois */
36 typedef struct
37 {
38  int NombreDeVariables;
39  std::vector<double> CoutLineaire;
40  std::vector<int> TypeDeVariable; /* Indicateur du type de variable, il ne doit prendre que les
41  suivantes (voir le fichier spx_constantes_externes.h mais ne jamais
42  utiliser les valeurs explicites des constantes): VARIABLE_FIXE ,
43  VARIABLE_BORNEE_DES_DEUX_COTES ,
44  VARIABLE_BORNEE_INFERIEUREMENT ,
45  VARIABLE_BORNEE_SUPERIEUREMENT ,
46  VARIABLE_NON_BORNEE
47  */
48  /* La matrice des contraintes */
49  int NombreDeContraintes;
50  std::vector<char> Sens;
51  std::vector<int> IndicesDebutDeLigne;
52  std::vector<int> NombreDeTermesDesLignes;
53  std::vector<double> CoefficientsDeLaMatriceDesContraintes;
54  std::vector<int> IndicesColonnes;
55  int NombreDeTermesAlloues;
57 
58 /* Partie variable renseignee avant le lancement de l'optimisation de chaque reservoir */
59 typedef struct
60 {
61  /* Donnees variables de la matrice des contraintes */
62  /* On met quand-meme les bornes dans la partie variable pour le cas ou on voudrait avoir
63  un jour des bornes min et max variables dans le temps et en fonction des reservoirs */
64  std::vector<double> Xmin;
65  std::vector<double> Xmax;
66  std::vector<double> SecondMembre;
67  /* Tableau de pointeur a des doubles. Ce tableau est parallele a X, il permet
68  de renseigner directement les structures de description du reseau avec les
69  resultats contenus dans X */
70  std::vector<double*> AdresseOuPlacerLaValeurDesVariablesOptimisees;
71  /* Resultat */
72  std::vector<double> X;
73  /* En Entree ou en Sortie */
74  int ExistenceDUneSolution; /* En sortie, vaut :
75  OUI_SPX s'il y a une solution,
76  NON_SPX s'il n'y a pas de solution
77  admissible SPX_ERREUR_INTERNE si probleme a l'execution
78  (saturation memoire par exemple), et dans ce cas il n'y a pas de
79  solution SPX_MATRICE_DE_BASE_SINGULIERE si on n'a pas pu
80  construire de matrice de base reguliere, et dans ce cas il n'y a
81  pas de solution
82  */
83 
84  std::vector<int>
85  PositionDeLaVariable; /* Vecteur a passer au Simplexe pour recuperer la base optimale */
86  std::vector<int>
87  ComplementDeLaBase; /* Vecteur a passer au Simplexe pour recuperer la base optimale */
88  std::vector<double>
89  CoutsReduits; /* Vecteur a passer au Simplexe pour recuperer les couts reduits */
90  std::vector<double> CoutsMarginauxDesContraintes; /* Vecteur a passer au Simplexe pour recuperer
91  les couts marginaux */
93 
94 /* Les correspondances des variables */
95 typedef struct
96 {
97  std::vector<int> NumeroVar_Turbine; /* Turbines */
98 
99  std::vector<int> NumeroVar_niveauxFinJours; // Niveaux fin jours
100  int NumeroVar_waste; // Waste
101  std::vector<int> NumeroVar_overflow; // Deversements (ecarts journaliers entre niveaux et les
102  // 100 % du reservoir)
103  std::vector<int> NumeroVar_deviations; // Deviations (ecarts journaliers entre turbin?s et
104  // cr?dits cibles brutes)
105  std::vector<int> NumeroVar_violations; // Violations (ecarts journaliers entre niveaux et
106  // courbes guides sup et inf)
107  int NumeroVar_deviationMax; // Deviation max sur le mois
108  int NumeroVar_violationMax; // Violation max sur le mois
110 
111 /* Structure uniquement exploitee par l'optimisation (donc a ne pas acceder depuis l'exterieur) */
112 typedef struct
113 {
114  int NombreDeProblemes;
115  std::vector<int> NbJoursDUnProbleme;
116 
117  std::vector<CORRESPONDANCE_DES_VARIABLES_PB_ETENDU> CorrespondanceDesVariables;
118 
119  std::vector<PROBLEME_LINEAIRE_ETENDU_PARTIE_FIXE> ProblemeLineaireEtenduPartieFixe;
120  std::vector<PROBLEME_LINEAIRE_ETENDU_PARTIE_VARIABLE> ProblemeLineaireEtenduPartieVariable;
121 
122  std::vector<PROBLEME_SPX_WRAPPER>
123  ProblemeSpx; /* Il y en a 1 par reservoir. Un probleme couvre 1 mois */
125 
127 {
128 public:
129  Hydro_problem_costs(const Data::Parameters& parameters);
130 
131  inline double get_end_days_levels_cost() const
132  {
133  return end_days_levels + noiseGenerator() * Constants::noiseAmplitude;
134  }
135 
136  inline double get_overflow_cost() const
137  {
138  return overflow + noiseGenerator() * Constants::noiseAmplitude;
139  }
140 
141  inline double get_deviations_cost() const
142  {
143  return deviations + noiseGenerator() * Constants::noiseAmplitude;
144  }
145 
146  inline double get_violations_cost() const
147  {
148  return violations + noiseGenerator() * Constants::noiseAmplitude;
149  }
150 
151  inline double get_waste_cost() const
152  {
153  return waste + noiseGenerator() * Constants::noiseAmplitude;
154  }
155 
156  inline double get_deviationMax_cost() const
157  {
158  return deviationMax + noiseGenerator() * Constants::noiseAmplitude;
159  }
160 
161  inline double get_violationMax_cost() const
162  {
163  return violationMax + noiseGenerator() * Constants::noiseAmplitude;
164  }
165 
166 private:
167  double end_days_levels;
168  double overflow;
169  double deviations;
170  double violations;
171  double waste;
172  double deviationMax;
173  double violationMax;
174 
175  mutable Antares::MersenneTwister noiseGenerator;
176 };
177 
178 #endif
General data for a study.
Definition: parameters.h:51
MersenneTwister Pseudo random number generator.
Definition: mersenne-twister.h:41
Definition: h2o2_j_donnees_optimisation.h:127
Definition: h2o2_j_donnees_optimisation.h:96
Definition: h2o2_j_donnees_optimisation.h:113
Definition: h2o2_j_donnees_optimisation.h:37
Definition: h2o2_j_donnees_optimisation.h:60