Antares Simulator
Power System Simulator
Loading...
Searching...
No Matches
h2o_m_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_H2O_M_STRUCTURE_INTERNE__
22#define __SOLVER_H2O_M_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#endif
35
36#include <vector>
37
38#define LINFINI 1.e+80
39
40/*--------------------------------------------------------------------------------------*/
41/* Matrice des contraintes: il y aura une seule instance pour tous les reservoirs */
42/* Dans ce struct il n'y a que des donnees qui sont lues et surtout pas ecrites */
43/* Ce struct est instancie une seule fois */
44typedef struct
45{
46 int NombreDeVariables;
47 std::vector<double> CoutLineaire;
48 std::vector<double> CoutLineaireBruite; /* Ajout de bruit pour forcer l'unicité des solutions */
49 std::vector<int> TypeDeVariable; /* Indicateur du type de variable, il ne doit prendre que les
50 suivantes (voir le fichier spx_constantes_externes.h mais ne jamais
51 utiliser les valeurs explicites des constantes): VARIABLE_FIXE ,
52 VARIABLE_BORNEE_DES_DEUX_COTES ,
53 VARIABLE_BORNEE_INFERIEUREMENT ,
54 VARIABLE_BORNEE_SUPERIEUREMENT ,
55 VARIABLE_NON_BORNEE
56 */
57 /* La matrice des contraintes */
58 int NombreDeContraintes;
59 std::vector<char> Sens;
60 std::vector<int> IndicesDebutDeLigne;
61 std::vector<int> NombreDeTermesDesLignes;
62 std::vector<double> CoefficientsDeLaMatriceDesContraintes;
63 std::vector<int> IndicesColonnes;
64 int NombreDeTermesAlloues;
66
67/* Partie variable renseignee avant le lancement de l'optimisation de chaque reservoir */
68typedef struct
69{
70 /* Donnees variables de la matrice des contraintes */
71 /* On met quand-meme les bornes dans la partie variable pour le cas ou on voudrait avoir
72 un jour des bornes min et max variables dans le temps et en fonction des reservoirs */
73 std::vector<double> Xmin;
74 std::vector<double> Xmax;
75 std::vector<double> SecondMembre;
76 /* Tableau de pointeur a des doubles. Ce tableau est parallele a X, il permet
77 de renseigner directement les structures de description du reseau avec les
78 resultats contenus dans X */
79 std::vector<double*> AdresseOuPlacerLaValeurDesVariablesOptimisees;
80 /* Resultat */
81 std::vector<double> X;
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
86 admissible SPX_ERREUR_INTERNE si probleme a l'execution
87 (saturation memoire par exemple), et dans ce cas il n'y a pas de
88 solution SPX_MATRICE_DE_BASE_SINGULIERE si on n'a pas pu
89 construire de matrice de base reguliere, et dans ce cas il n'y a
90 pas de solution
91 */
92
93 std::vector<int>
94 PositionDeLaVariable; /* Vecteur a passer au Simplexe pour recuperer la base optimale */
95 std::vector<int>
96 ComplementDeLaBase; /* Vecteur a passer au Simplexe pour recuperer la base optimale */
97 std::vector<double>
98 CoutsReduits; /* Vecteur a passer au Simplexe pour recuperer les couts reduits */
99 std::vector<double> CoutsMarginauxDesContraintes; /* Vecteur a passer au Simplexe pour recuperer
100 les couts marginaux */
102
103/* Les correspondances des variables */
104typedef struct
105{
106 std::vector<int> NumeroDeVariableVolume; /* Volumes */
107 std::vector<int> NumeroDeVariableTurbine; /* Turbines */
108 std::vector<int> NumeroDeVariableDepassementVolumeMax; /* Depassement du volume max */
109 std::vector<int> NumeroDeVariableDepassementVolumeMin; /* Depassement du volume min */
110 int NumeroDeLaVariableViolMaxVolumeMin; // Depassement max du volume min
111 std::vector<int>
112 NumeroDeVariableDEcartPositifAuTurbineCible; /* Ecart positif au volume cible */
113 std::vector<int>
114 NumeroDeVariableDEcartNegatifAuTurbineCible; /* Ecart negatif au volume cible */
115 int NumeroDeLaVariableXi; /* Variable decrivant l'ecart max au turbine cible */
117
118/* Structure uniquement exploitee par l'optimisation (donc a ne pas acceder depuis l'exterieur) */
119typedef struct
120{
121 int NombreDeReservoirs;
122 char LesCoutsOntEteInitialises; /* Vaut OUI ou NON */
123
124 CORRESPONDANCE_DES_VARIABLES CorrespondanceDesVariables;
125
126 PROBLEME_LINEAIRE_PARTIE_FIXE ProblemeLineairePartieFixe;
127 PROBLEME_LINEAIRE_PARTIE_VARIABLE ProblemeLineairePartieVariable;
128
129 std::vector<PROBLEME_SPX*> ProblemeSpx; /* Il y en a 1 par reservoir */
130
131 double CoutDeLaSolution;
132 double CoutDeLaSolutionBruite;
133
135
136#endif
Definition h2o_j_donnees_optimisation.h:118
Definition h2o_j_donnees_optimisation.h:127
Definition h2o_j_donnees_optimisation.h:52
Definition h2o_j_donnees_optimisation.h:75