Skip to content

Commit

Permalink
(does not compile) cut into small pieces
Browse files Browse the repository at this point in the history
  • Loading branch information
a-zakir committed Sep 11, 2023
1 parent 7f8054d commit 5a047c0
Show file tree
Hide file tree
Showing 27 changed files with 397 additions and 299 deletions.
31 changes: 13 additions & 18 deletions src/solver/optimisation/AreaBalance.cpp
Original file line number Diff line number Diff line change
@@ -1,38 +1,33 @@
#include "AreaBalance.h"

static void shortTermStorageBalance(
const ::ShortTermStorage::AREA_INPUT& shortTermStorageInput,
ConstraintBuilder& constraintBuilder,
const CORRESPONDANCES_DES_VARIABLES& CorrespondanceVarNativesVarOptim)
static void shortTermStorageBalance(const ::ShortTermStorage::AREA_INPUT& shortTermStorageInput,
ConstraintBuilder& constraintBuilder,
std::vector<int>& InjectionVariable,
std::vector<int>& WithdrawalVariable)
{
for (const auto& storage : shortTermStorageInput)
{
unsigned index = storage.clusterGlobalIndex;
if (const int varInjection
= CorrespondanceVarNativesVarOptim.SIM_ShortTermStorage.InjectionVariable[index];
varInjection >= 0)
if (const int varInjection = InjectionVariable[index]; varInjection >= 0)
{
constraintBuilder.include(Variable::ShortTermStorageInjection(index), 1.0);
}
if (const int varWithdrawal
= CorrespondanceVarNativesVarOptim.SIM_ShortTermStorage.WithdrawalVariable[index];
varWithdrawal >= 0)
if (const int varWithdrawal = WithdrawalVariable[index]; varWithdrawal >= 0)
{
constraintBuilder.include(Variable::ShortTermStorageWithdrawal(index), -1.0);
}
}
}

// Constraint definitions
void AreaBalance::add(int pdt, int pays)
void AreaBalance::add(int pdt,
int pays,
std::vector<int>& NumeroDeContrainteDesBilansPays,
std::vector<int>& InjectionVariable,
std::vector<int>& WithdrawalVariable)
{
/** can be done without this --- keep it for now**/
CORRESPONDANCES_DES_VARIABLES& CorrespondanceVarNativesVarOptim
= problemeHebdo->CorrespondanceVarNativesVarOptim[pdt];
CORRESPONDANCES_DES_CONTRAINTES& CorrespondanceCntNativesCntOptim
= problemeHebdo->CorrespondanceCntNativesCntOptim[pdt];
CorrespondanceCntNativesCntOptim.NumeroDeContrainteDesBilansPays[pays]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;
NumeroDeContrainteDesBilansPays[pays] = problemeHebdo->ProblemeAResoudre->NombreDeContraintes;

/******/
// TODO improve this
Expand Down Expand Up @@ -67,7 +62,7 @@ void AreaBalance::add(int pdt, int pays)
.include(Variable::NegativeUnsuppliedEnergy(pays), 1.0);

shortTermStorageBalance(
problemeHebdo->ShortTermStorage[pays], builder, CorrespondanceVarNativesVarOptim);
problemeHebdo->ShortTermStorage[pays], builder, InjectionVariable, WithdrawalVariable);

builder.equalTo();
builder.build();
Expand Down
6 changes: 5 additions & 1 deletion src/solver/optimisation/AreaBalance.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,9 @@ class AreaBalance : private Constraint
public:
using Constraint::Constraint;

void add(int pdt, int pays);
void add(int pdt,
int pays,
std::vector<int>& NumeroDeContrainteDesBilansPays,
std::vector<int>& InjectionVariable,
std::vector<int>& WithdrawalVariable);
};
13 changes: 4 additions & 9 deletions src/solver/optimisation/AreaHydroLevel.cpp
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
#include "AreaHydroLevel.h"

void AreaHydroLevel::add(int pays, int pdt)
void AreaHydroLevel::add(int pays, int pdt, std::vector<int>& NumeroDeContrainteDesNiveauxPays)
{
const auto& CorrespondanceVarNativesVarOptim
= problemeHebdo->CorrespondanceVarNativesVarOptim[pdt];
CORRESPONDANCES_DES_CONTRAINTES& CorrespondanceCntNativesCntOptim
= problemeHebdo->CorrespondanceCntNativesCntOptim[pdt];
CorrespondanceCntNativesCntOptim.NumeroDeContrainteDesNiveauxPays[pays]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;
NumeroDeContrainteDesNiveauxPays[pays] = problemeHebdo->ProblemeAResoudre->NombreDeContraintes;
if (problemeHebdo->CaracteristiquesHydrauliques[pays].SuiviNiveauHoraire)
{
builder.updateHourWithinWeek(pdt).include(Variable::HydroLevel(pays), 1.0);
Expand All @@ -21,7 +16,7 @@ void AreaHydroLevel::add(int pays, int pdt)
namer.UpdateArea(problemeHebdo->NomsDesPays[pays]);
namer.UpdateTimeStep(problemeHebdo->weekInTheYear * 168 + pdt);
namer.AreaHydroLevel(problemeHebdo->ProblemeAResoudre->NombreDeContraintes);
CorrespondanceCntNativesCntOptim.NumeroDeContrainteDesNiveauxPays[pays]
NumeroDeContrainteDesNiveauxPays[pays]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;
builder.updateHourWithinWeek(pdt)
.include(Variable::HydProd(pays), 1.0)
Expand All @@ -32,5 +27,5 @@ void AreaHydroLevel::add(int pays, int pdt)
.build();
}
else
CorrespondanceCntNativesCntOptim.NumeroDeContrainteDesNiveauxPays[pays] = -1;
NumeroDeContrainteDesNiveauxPays[pays] = -1;
}
2 changes: 1 addition & 1 deletion src/solver/optimisation/AreaHydroLevel.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ class AreaHydroLevel : private Constraint
{
public:
using Constraint::Constraint;
void add(int pays, int pdt);
void add(int pays, int pdt, std::vector<int>& NumeroDeContrainteDesNiveauxPays);
};
34 changes: 15 additions & 19 deletions src/solver/optimisation/BindingConstraintDay.cpp
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
#include "BindingConstraintDay.h"

void BindingConstraintDay::add(int cntCouplante)
void BindingConstraintDay::add(int cntCouplante, BindingConstraintDayData& data)
{
const CONTRAINTES_COUPLANTES& MatriceDesContraintesCouplantes
= problemeHebdo->MatriceDesContraintesCouplantes[cntCouplante];
if (MatriceDesContraintesCouplantes.TypeDeContrainteCouplante != CONTRAINTE_JOURNALIERE)
if (data.TypeDeContrainteCouplante != CONTRAINTE_JOURNALIERE)
return;

const int nbInterco
= MatriceDesContraintesCouplantes.NombreDInterconnexionsDansLaContrainteCouplante;
const int nbClusters
= MatriceDesContraintesCouplantes.NombreDePaliersDispatchDansLaContrainteCouplante;
const int nbInterco = data.NombreDInterconnexionsDansLaContrainteCouplante;
const int nbClusters = data.NombreDePaliersDispatchDansLaContrainteCouplante;

const int NombreDePasDeTempsPourUneOptimisation
= problemeHebdo->NombreDePasDeTempsPourUneOptimisation; // TODO
Expand All @@ -19,14 +15,14 @@ void BindingConstraintDay::add(int cntCouplante)
while (pdtDebut < NombreDePasDeTempsPourUneOptimisation)
{
int jour = problemeHebdo->NumeroDeJourDuPasDeTemps[pdtDebut];
CORRESPONDANCES_DES_CONTRAINTES_JOURNALIERES& CorrespondanceCntNativesCntOptimJournalieres
= problemeHebdo->CorrespondanceCntNativesCntOptimJournalieres[jour];
auto& CorrespondanceCntNativesCntOptimJournalieres
= data.CorrespondanceCntNativesCntOptimJournalieres[jour];

for (int index = 0; index < nbInterco; index++)
{
int interco = MatriceDesContraintesCouplantes.NumeroDeLInterconnexion[index];
double poids = MatriceDesContraintesCouplantes.PoidsDeLInterconnexion[index];
int offset = MatriceDesContraintesCouplantes.OffsetTemporelSurLInterco[index];
int interco = data.NumeroDeLInterconnexion[index];
double poids = data.PoidsDeLInterconnexion[index];
int offset = data.OffsetTemporelSurLInterco[index];

for (int pdt = pdtDebut; pdt < pdtDebut + NombreDePasDeTempsDUneJournee; pdt++)
{
Expand All @@ -47,14 +43,14 @@ void BindingConstraintDay::add(int cntCouplante)

for (int index = 0; index < nbClusters; index++)
{
int pays = MatriceDesContraintesCouplantes.PaysDuPalierDispatch[index];
int pays = data.PaysDuPalierDispatch[index];
const PALIERS_THERMIQUES& PaliersThermiquesDuPays
= problemeHebdo->PaliersThermiquesDuPays[pays];
const int palier
= PaliersThermiquesDuPays.NumeroDuPalierDansLEnsembleDesPaliersThermiques
[MatriceDesContraintesCouplantes.NumeroDuPalierDispatch[index]];
double poids = MatriceDesContraintesCouplantes.PoidsDuPalierDispatch[index];
int offset = MatriceDesContraintesCouplantes.OffsetTemporelSurLePalierDispatch[index];
[data.NumeroDuPalierDispatch[index]];
double poids = data.PoidsDuPalierDispatch[index];
int offset = data.OffsetTemporelSurLePalierDispatch[index];

for (int pdt = pdtDebut; pdt < pdtDebut + NombreDePasDeTempsDUneJournee; pdt++)
{
Expand Down Expand Up @@ -84,14 +80,14 @@ void BindingConstraintDay::add(int cntCouplante)
std::vector<double*>& AdresseOuPlacerLaValeurDesCoutsMarginaux
= problemeHebdo->ProblemeAResoudre->AdresseOuPlacerLaValeurDesCoutsMarginaux;

char op = MatriceDesContraintesCouplantes.SensDeLaContrainteCouplante;
char op = data.SensDeLaContrainteCouplante;
builder.operatorRHS(op);
{
ConstraintNamer namer(problemeHebdo->ProblemeAResoudre->NomDesContraintes,
problemeHebdo->NamedProblems);
namer.UpdateTimeStep(jour);
namer.BindingConstraintDay(problemeHebdo->ProblemeAResoudre->NombreDeContraintes,
MatriceDesContraintesCouplantes.NomDeLaContrainteCouplante);
data.NomDeLaContrainteCouplante);
}
builder.build();
pdtDebut += problemeHebdo->NombreDePasDeTempsDUneJournee;
Expand Down
8 changes: 7 additions & 1 deletion src/solver/optimisation/BindingConstraintDay.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
#pragma once
#include "constraint_builder.h"

struct BindingConstraintDayData : public BindingConstraintData
{
// std::vector<std::vector<int>&>& CorrespondanceCntNativesCntOptimJournalieres;
std::vector<CORRESPONDANCES_DES_CONTRAINTES_JOURNALIERES>&
CorrespondanceCntNativesCntOptimJournalieres;
};
class BindingConstraintDay : private Constraint
{
public:
using Constraint::Constraint;
void add(int cntCouplante);
void add(int cntCouplante, BindingConstraintDayData& data);
};
37 changes: 16 additions & 21 deletions src/solver/optimisation/BindingConstraintHour.cpp
Original file line number Diff line number Diff line change
@@ -1,26 +1,21 @@
#include "BindingConstraintHour.h"

void BindingConstraintHour::add(int pdt, int cntCouplante)
void BindingConstraintHour::add(int pdt, int cntCouplante, BindingConstraintHourData& data)
{
const CONTRAINTES_COUPLANTES& MatriceDesContraintesCouplantes
= problemeHebdo->MatriceDesContraintesCouplantes[cntCouplante];
CORRESPONDANCES_DES_CONTRAINTES& CorrespondanceCntNativesCntOptim
= problemeHebdo->CorrespondanceCntNativesCntOptim[pdt];
CorrespondanceCntNativesCntOptim.NumeroDeContrainteDesContraintesCouplantes[cntCouplante]
data.NumeroDeContrainteDesContraintesCouplantes[cntCouplante]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;

if (MatriceDesContraintesCouplantes.TypeDeContrainteCouplante != CONTRAINTE_HORAIRE)
if (data.TypeDeContrainteCouplante != CONTRAINTE_HORAIRE)
return;

builder.updateHourWithinWeek(pdt);
// Links
const int nbInterco
= MatriceDesContraintesCouplantes.NombreDInterconnexionsDansLaContrainteCouplante;
const int nbInterco = data.NombreDInterconnexionsDansLaContrainteCouplante;
for (int index = 0; index < nbInterco; index++)
{
const int interco = MatriceDesContraintesCouplantes.NumeroDeLInterconnexion[index];
const double poids = MatriceDesContraintesCouplantes.PoidsDeLInterconnexion[index];
const int offset = MatriceDesContraintesCouplantes.OffsetTemporelSurLInterco[index];
const int interco = data.NumeroDeLInterconnexion[index];
const double poids = data.PoidsDeLInterconnexion[index];
const int offset = data.OffsetTemporelSurLInterco[index];
int pdt1;
if (offset >= 0)
{
Expand All @@ -37,17 +32,17 @@ void BindingConstraintHour::add(int pdt, int cntCouplante)
}

// Thermal clusters
const int nbClusters
= MatriceDesContraintesCouplantes.NombreDePaliersDispatchDansLaContrainteCouplante;
const int nbClusters = data.NombreDePaliersDispatchDansLaContrainteCouplante;
for (int index = 0; index < nbClusters; index++)
{
const int pays = MatriceDesContraintesCouplantes.PaysDuPalierDispatch[index];
const int pays = data.PaysDuPalierDispatch[index];
const PALIERS_THERMIQUES& PaliersThermiquesDuPays
= problemeHebdo->PaliersThermiquesDuPays[pays];
const int palier = PaliersThermiquesDuPays.NumeroDuPalierDansLEnsembleDesPaliersThermiques
[MatriceDesContraintesCouplantes.NumeroDuPalierDispatch[index]];
const double poids = MatriceDesContraintesCouplantes.PoidsDuPalierDispatch[index];
const int offset = MatriceDesContraintesCouplantes.OffsetTemporelSurLePalierDispatch[index];
const int palier
= PaliersThermiquesDuPays
.NumeroDuPalierDansLEnsembleDesPaliersThermiques[data.NumeroDuPalierDispatch[index]];
const double poids = data.PoidsDuPalierDispatch[index];
const int offset = data.OffsetTemporelSurLePalierDispatch[index];
int pdt1;

if (offset >= 0)
Expand All @@ -67,14 +62,14 @@ void BindingConstraintHour::add(int pdt, int cntCouplante)
problemeHebdo->NombreDePasDeTemps);
}

char op = MatriceDesContraintesCouplantes.SensDeLaContrainteCouplante;
char op = data.SensDeLaContrainteCouplante;
builder.operatorRHS(op);
{
ConstraintNamer namer(problemeHebdo->ProblemeAResoudre->NomDesContraintes,
problemeHebdo->NamedProblems);
namer.UpdateTimeStep(problemeHebdo->weekInTheYear * 168 + pdt);
namer.BindingConstraintHour(problemeHebdo->ProblemeAResoudre->NombreDeContraintes,
MatriceDesContraintesCouplantes.NomDeLaContrainteCouplante);
data.NomDeLaContrainteCouplante);
}
builder.build();
}
6 changes: 5 additions & 1 deletion src/solver/optimisation/BindingConstraintHour.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
#pragma once
#include "constraint_builder.h"
struct BindingConstraintHourData : public BindingConstraintData
{
std::vector<int>& NumeroDeContrainteDesContraintesCouplantes;
}

class BindingConstraintHour : private Constraint
{
public:
using Constraint::Constraint;
void add(int pdt, int cntCouplante);
void add(int pdt, int cntCouplante, BindingConstraintHourData& data);
};
69 changes: 32 additions & 37 deletions src/solver/optimisation/BindingConstraintWeek.cpp
Original file line number Diff line number Diff line change
@@ -1,25 +1,21 @@
#include "BindingConstraintWeek.h"

void BindingConstraintWeek::add(int cntCouplante)
void BindingConstraintWeek::add(int cntCouplante, BindingConstraintWeekData& data)
{
const CONTRAINTES_COUPLANTES& MatriceDesContraintesCouplantes
= problemeHebdo->MatriceDesContraintesCouplantes[cntCouplante];
int semaine = problemeHebdo->weekInTheYear;
CORRESPONDANCES_DES_CONTRAINTES_HEBDOMADAIRES& CorrespondanceCntNativesCntOptimHebdomadaires
= problemeHebdo->CorrespondanceCntNativesCntOptimHebdomadaires;
if (MatriceDesContraintesCouplantes.TypeDeContrainteCouplante != CONTRAINTE_HEBDOMADAIRE)
auto& NumeroDeContrainteDesContraintesCouplantes
= data.NumeroDeContrainteDesContraintesCouplantes;
if (data.TypeDeContrainteCouplante != CONTRAINTE_HEBDOMADAIRE)
return;

const int nbInterco
= MatriceDesContraintesCouplantes.NombreDInterconnexionsDansLaContrainteCouplante;
const int nbClusters
= MatriceDesContraintesCouplantes.NombreDePaliersDispatchDansLaContrainteCouplante;
const int nbInterco = data.NombreDInterconnexionsDansLaContrainteCouplante;
const int nbClusters = data.NombreDePaliersDispatchDansLaContrainteCouplante;

for (int index = 0; index < nbInterco; index++)
{
int interco = MatriceDesContraintesCouplantes.NumeroDeLInterconnexion[index];
double poids = MatriceDesContraintesCouplantes.PoidsDeLInterconnexion[index];
int offset = MatriceDesContraintesCouplantes.OffsetTemporelSurLInterco[index];
int interco = data.NumeroDeLInterconnexion[index];
double poids = data.PoidsDeLInterconnexion[index];
int offset = data.OffsetTemporelSurLInterco[index];
for (int pdt = 0; pdt < problemeHebdo->NombreDePasDeTempsPourUneOptimisation; pdt++)
{
builder.updateHourWithinWeek(pdt);
Expand All @@ -40,16 +36,16 @@ void BindingConstraintWeek::add(int cntCouplante)

for (int index = 0; index < nbClusters; index++)
{
int pays = MatriceDesContraintesCouplantes.PaysDuPalierDispatch[index];
const PALIERS_THERMIQUES& PaliersThermiquesDuPays
= problemeHebdo->PaliersThermiquesDuPays[pays];
const int palier
= PaliersThermiquesDuPays.NumeroDuPalierDansLEnsembleDesPaliersThermiques
[MatriceDesContraintesCouplantes.NumeroDuPalierDispatch[index]];
double poids = MatriceDesContraintesCouplantes.PoidsDuPalierDispatch[index];
int offset = MatriceDesContraintesCouplantes.OffsetTemporelSurLePalierDispatch[index];
for (int pdt = 0; pdt < problemeHebdo->NombreDePasDeTempsPourUneOptimisation; pdt++)
{
int pays = data.PaysDuPalierDispatch[index];
const PALIERS_THERMIQUES& PaliersThermiquesDuPays
= problemeHebdo->PaliersThermiquesDuPays[pays];
const int palier
= PaliersThermiquesDuPays
.NumeroDuPalierDansLEnsembleDesPaliersThermiques[data.NumeroDuPalierDispatch[index]];
double poids = data.PoidsDuPalierDispatch[index];
int offset = data.OffsetTemporelSurLePalierDispatch[index];
for (int pdt = 0; pdt < problemeHebdo->NombreDePasDeTempsPourUneOptimisation; pdt++)
{
int pdt1;

builder.updateHourWithinWeek(pdt); // useless?
Expand All @@ -68,22 +64,21 @@ void BindingConstraintWeek::add(int cntCouplante)
offset,
false,
problemeHebdo->NombreDePasDeTemps);
}
}
}

char op = MatriceDesContraintesCouplantes.SensDeLaContrainteCouplante;
builder.operatorRHS(op);
char op = data.SensDeLaContrainteCouplante;
builder.operatorRHS(op);

CorrespondanceCntNativesCntOptimHebdomadaires
.NumeroDeContrainteDesContraintesCouplantes[cntCouplante]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;
// Name
{
ConstraintNamer namer(problemeHebdo->ProblemeAResoudre->NomDesContraintes,
problemeHebdo->NamedProblems);
namer.UpdateTimeStep(semaine);
namer.BindingConstraintWeek(problemeHebdo->ProblemeAResoudre->NombreDeContraintes,
MatriceDesContraintesCouplantes.NomDeLaContrainteCouplante);
}
NumeroDeContrainteDesContraintesCouplantes[cntCouplante]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;
// Name
{
ConstraintNamer namer(problemeHebdo->ProblemeAResoudre->NomDesContraintes,
problemeHebdo->NamedProblems);
namer.UpdateTimeStep(semaine);
namer.BindingConstraintWeek(problemeHebdo->ProblemeAResoudre->NombreDeContraintes,
data.NomDeLaContrainteCouplante);
}
builder.build();
}
Loading

0 comments on commit 5a047c0

Please sign in to comment.