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