Skip to content

Commit

Permalink
part 1: introduce constraints data objects
Browse files Browse the repository at this point in the history
  • Loading branch information
a-zakir committed Sep 11, 2023
1 parent 5a047c0 commit b40aec7
Show file tree
Hide file tree
Showing 17 changed files with 154 additions and 83 deletions.
9 changes: 4 additions & 5 deletions src/solver/optimisation/FinalStockEquivalent.cpp
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
#include "FinalStockEquivalent.h"

void FinalStockEquivalent::add(int pays)
void FinalStockEquivalent::add(int pays, FinalStockEquivalentData& data)
{
const auto pdt = problemeHebdo->NombreDePasDeTempsPourUneOptimisation - 1;
if (problemeHebdo->CaracteristiquesHydrauliques[pays].AccurateWaterValue
&& problemeHebdo->CaracteristiquesHydrauliques[pays].DirectLevelAccess)
const auto pdt = data.pdt;
if (data.AccurateWaterValue && data.DirectLevelAccess)
{ /* equivalence constraint : StockFinal- Niveau[T]= 0*/

problemeHebdo->NumeroDeContrainteEquivalenceStockFinal[pays]
data.NumeroDeContrainteEquivalenceStockFinal[pays]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;
ConstraintNamer namer(problemeHebdo->ProblemeAResoudre->NomDesContraintes,
problemeHebdo->NamedProblems);
Expand Down
10 changes: 9 additions & 1 deletion src/solver/optimisation/FinalStockEquivalent.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
#pragma once
#include "constraint_builder.h"

struct FinalStockEquivalentData
{
const int pdt;
const bool AccurateWaterValue;
const bool DirectLevelAccess;
std::vector<int>& NumeroDeContrainteEquivalenceStockFinal;
};

class FinalStockEquivalent : private Constraint
{
public:
using Constraint::Constraint;
void add(int pays);
void add(int pays, FinalStockEquivalentData& data);
};
8 changes: 4 additions & 4 deletions src/solver/optimisation/FinalStockExpression.cpp
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
#include "FinalStockExpression.h"

void FinalStockExpression::add(int pays)
void FinalStockExpression::add(int pays, FinalStockExpressionData& data)
{
const auto pdt = problemeHebdo->NombreDePasDeTempsPourUneOptimisation - 1;
const auto pdt = data.pdt;

if (problemeHebdo->CaracteristiquesHydrauliques[pays].AccurateWaterValue)
if (data.AccurateWaterValue)
/* expression constraint : - StockFinal +sum (stocklayers) = 0*/
{
builder.updateHourWithinWeek(pdt).include(Variable::FinalStorage(pays), -1.0);
for (int layerindex = 0; layerindex < 100; layerindex++)
{
builder.include(Variable::LayerStorage(pays, layerindex), 1.0);
}
problemeHebdo->NumeroDeContrainteExpressionStockFinal[pays]
data.NumeroDeContrainteExpressionStockFinal[pays]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;

ConstraintNamer namer(problemeHebdo->ProblemeAResoudre->NomDesContraintes,
Expand Down
8 changes: 7 additions & 1 deletion src/solver/optimisation/FinalStockExpression.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,15 @@

#include "constraint_builder.h"

struct FinalStockExpressionData
{
const int pdt;
const bool AccurateWaterValue;
std::vector<int>& NumeroDeContrainteExpressionStockFinal;
};
class FinalStockExpression : private Constraint
{
public:
using Constraint::Constraint;
void add(int pays);
void add(int pays, FinalStockExpressionData& data);
};
22 changes: 8 additions & 14 deletions src/solver/optimisation/HydroPower.cpp
Original file line number Diff line number Diff line change
@@ -1,26 +1,20 @@
#include "HydroPower.h"
struct HydroPowerData
{
};

void HydroPower::add(int pays)
void HydroPower::add(int pays, HydroPowerData& data)
{
bool presenceHydro
= problemeHebdo->CaracteristiquesHydrauliques[pays].PresenceDHydrauliqueModulable;
bool TurbEntreBornes = problemeHebdo->CaracteristiquesHydrauliques[pays].TurbinageEntreBornes;
bool presenceHydro = data.presenceHydro;
bool TurbEntreBornes = data.TurbEntreBornes;

const int NombreDePasDeTempsPourUneOptimisation
= problemeHebdo->NombreDePasDeTempsPourUneOptimisation;
if (presenceHydro && !TurbEntreBornes)
{
if (bool presencePompage
= problemeHebdo->CaracteristiquesHydrauliques[pays].PresenceDePompageModulable)
if (data.presencePompage)
{
problemeHebdo->NumeroDeContrainteEnergieHydraulique[pays]
data.NumeroDeContrainteEnergieHydraulique[pays]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;

const double pumpingRatio
= problemeHebdo->CaracteristiquesHydrauliques[pays].PumpingRatio;
const double pumpingRatio = data.pumpingRatio;
for (int pdt = 0; pdt < NombreDePasDeTempsPourUneOptimisation; pdt++)
{
builder.updateHourWithinWeek(pdt);
Expand All @@ -36,7 +30,7 @@ void HydroPower::add(int pays)
builder.include(Variable::HydProd(pays), 1.0);
}
}
problemeHebdo->NumeroDeContrainteEnergieHydraulique[pays]
data.NumeroDeContrainteEnergieHydraulique[pays]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;

builder.equalTo();
Expand All @@ -50,5 +44,5 @@ void HydroPower::add(int pays)
builder.build();
}
else
problemeHebdo->NumeroDeContrainteEnergieHydraulique[pays] = -1;
data.NumeroDeContrainteEnergieHydraulique[pays] = -1;
}
11 changes: 10 additions & 1 deletion src/solver/optimisation/HydroPower.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
#pragma once
#include "constraint_builder.h"
struct HydroPowerData
{
const bool presenceHydro;
const int TurbEntreBornes;
const bool presencePompage;
const int NombreDePasDeTempsPourUneOptimisation;
std::vector<int>& NumeroDeContrainteEnergieHydraulique;
const double pumpingRatio;
};

class HydroPower : private Constraint
{
public:
using Constraint::Constraint;
void add(int pays);
void add(int pays, HydroPowerData& data);
};
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

void HydroPowerSmoothingUsingVariationMaxDown::add(int pays, int pdt)
{
if (!problemeHebdo->CaracteristiquesHydrauliques[pays].PresenceDHydrauliqueModulable)
{
return;
}
// if (!problemeHebdo->CaracteristiquesHydrauliques[pays].PresenceDHydrauliqueModulable)
// {
// return;
// }

ConstraintNamer namer(problemeHebdo->ProblemeAResoudre->NomDesContraintes,
problemeHebdo->NamedProblems);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

void HydroPowerSmoothingUsingVariationMaxUp::add(int pays, int pdt)
{
if (!problemeHebdo->CaracteristiquesHydrauliques[pays].PresenceDHydrauliqueModulable)
{
return;
}
// if (!problemeHebdo->CaracteristiquesHydrauliques[pays].PresenceDHydrauliqueModulable)
// {
// return;
// }

ConstraintNamer namer(problemeHebdo->ProblemeAResoudre->NomDesContraintes,
problemeHebdo->NamedProblems);
Expand Down
17 changes: 6 additions & 11 deletions src/solver/optimisation/HydroPowerSmoothingUsingVariationSum.cpp
Original file line number Diff line number Diff line change
@@ -1,20 +1,15 @@
#include "HydroPowerSmoothingUsingVariationSum.h"

void HydroPowerSmoothingUsingVariationSum::add(int pays)
void HydroPowerSmoothingUsingVariationSum::add(int pays,
const int nombreDePasDeTempsPourUneOptimisation)
{
if (!problemeHebdo->CaracteristiquesHydrauliques[pays].PresenceDHydrauliqueModulable)
{
return;
}
// if (!problemeHebdo->CaracteristiquesHydrauliques[pays].PresenceDHydrauliqueModulable)
// {
// return;
// }

const int nombreDePasDeTempsPourUneOptimisation
= problemeHebdo->NombreDePasDeTempsPourUneOptimisation;
for (int pdt = 0; pdt < nombreDePasDeTempsPourUneOptimisation; pdt++)
{
const auto& CorrespondanceVarNativesVarOptim
= problemeHebdo->CorrespondanceVarNativesVarOptim[pdt];
int nombreDeTermes = 0;

int pdt1 = pdt + 1;
if (pdt1 >= nombreDePasDeTempsPourUneOptimisation)
pdt1 = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ class HydroPowerSmoothingUsingVariationSum : private Constraint
{
public:
using Constraint::Constraint;
void add(int pays);
void add(int pays , const int nombreDePasDeTempsPourUneOptimisation);
};
17 changes: 7 additions & 10 deletions src/solver/optimisation/MaxHydroPower.cpp
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
#include "MaxHydroPower.h"

void MaxHydroPower::add(int pays)
void MaxHydroPower::add(int pays, MaxHydroPowerData& data)
{
bool presenceHydro
= problemeHebdo->CaracteristiquesHydrauliques[pays].PresenceDHydrauliqueModulable;
bool TurbEntreBornes = problemeHebdo->CaracteristiquesHydrauliques[pays].TurbinageEntreBornes;
if (presenceHydro
&& (TurbEntreBornes
|| problemeHebdo->CaracteristiquesHydrauliques[pays].PresenceDePompageModulable))
bool presenceHydro = data.presenceHydro;
bool TurbEntreBornes = data.TurbEntreBornes;
if (presenceHydro && (TurbEntreBornes || data.PresenceDePompageModulable))
{
problemeHebdo->NumeroDeContrainteMaxEnergieHydraulique[pays]
data.NumeroDeContrainteMaxEnergieHydraulique[pays]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;

const int NombreDePasDeTempsPourUneOptimisation
Expand All @@ -20,7 +17,7 @@ void MaxHydroPower::add(int pays)
builder.updateHourWithinWeek(pdt);
builder.include(Variable::HydProd(pays), 1.0);
}
problemeHebdo->NumeroDeContrainteMaxEnergieHydraulique[pays]
data.NumeroDeContrainteMaxEnergieHydraulique[pays]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;

ConstraintNamer namer(problemeHebdo->ProblemeAResoudre->NomDesContraintes,
Expand All @@ -32,5 +29,5 @@ void MaxHydroPower::add(int pays)
builder.lessThan().build();
}
else
problemeHebdo->NumeroDeContrainteMaxEnergieHydraulique[pays] = -1;
data.NumeroDeContrainteMaxEnergieHydraulique[pays] = -1;
}
10 changes: 9 additions & 1 deletion src/solver/optimisation/MaxHydroPower.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
#pragma once
#include "constraint_builder.h"

struct MaxHydroPowerData
{
const bool presenceHydro;
const bool TurbEntreBornes;
const bool PresenceDePompageModulable;
const int NombreDePasDeTempsPourUneOptimisation;
std::vector<int>& NumeroDeContrainteMaxEnergieHydraulique;
};
class MaxHydroPower : private Constraint
{
public:
using Constraint::Constraint;
void add(int pays);
void add(int pays, MaxHydroPowerData& data);
};
10 changes: 5 additions & 5 deletions src/solver/optimisation/MaxPumping.cpp
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#include "MaxPumping.h"

void MaxPumping::add(int pays)
void MaxPumping::add(int pays, MaxPumpingData& data)
{
if (problemeHebdo->CaracteristiquesHydrauliques[pays].PresenceDePompageModulable)
if (data.PresenceDePompageModulable)
{
problemeHebdo->NumeroDeContrainteMaxPompage[pays]
data.NumeroDeContrainteMaxPompage[pays]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;

const int NombreDePasDeTempsPourUneOptimisation
Expand All @@ -15,7 +15,7 @@ void MaxPumping::add(int pays)
builder.updateHourWithinWeek(pdt);
builder.include(Variable::Pumping(pays), 1.0);
}
problemeHebdo->NumeroDeContrainteMaxPompage[pays]
data.NumeroDeContrainteMaxPompage[pays]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;
ConstraintNamer namer(problemeHebdo->ProblemeAResoudre->NomDesContraintes,
problemeHebdo->NamedProblems);
Expand All @@ -25,5 +25,5 @@ void MaxPumping::add(int pays)
builder.lessThan().build();
}
else
problemeHebdo->NumeroDeContrainteMaxPompage[pays] = -1;
data.NumeroDeContrainteMaxPompage[pays] = -1;
}
7 changes: 6 additions & 1 deletion src/solver/optimisation/MaxPumping.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
#pragma once
#include "constraint_builder.h"
struct MaxPumpingData
{
const bool PresenceDePompageModulable;
std::vector<int>& NumeroDeContrainteMaxPompage;
};

class MaxPumping : private Constraint
{
public:
using Constraint::Constraint;
void add(int pays);
void add(int pays, MaxPumpingData& data);
};
19 changes: 8 additions & 11 deletions src/solver/optimisation/MinHydroPower.cpp
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
#include "MinHydroPower.h"

void MinHydroPower::add(int pays)
void MinHydroPower::add(int pays, MinHydroPowerData& data)
{
bool presenceHydro
= problemeHebdo->CaracteristiquesHydrauliques[pays].PresenceDHydrauliqueModulable;
bool TurbEntreBornes = problemeHebdo->CaracteristiquesHydrauliques[pays].TurbinageEntreBornes;
if (presenceHydro
&& (TurbEntreBornes
|| problemeHebdo->CaracteristiquesHydrauliques[pays].PresenceDePompageModulable))
bool presenceHydro = data.presenceHydro;
bool TurbEntreBornes = data.TurbEntreBornes;
if (presenceHydro && (TurbEntreBornes || data.PresenceDePompageModulable))
{
problemeHebdo->NumeroDeContrainteMinEnergieHydraulique[pays]
data.NumeroDeContrainteMinEnergieHydraulique[pays]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;

const int NombreDePasDeTempsPourUneOptimisation
= problemeHebdo->NombreDePasDeTempsPourUneOptimisation;
= data.NombreDePasDeTempsPourUneOptimisation;

ConstraintNamer namer(problemeHebdo->ProblemeAResoudre->NomDesContraintes,
problemeHebdo->NamedProblems);
Expand All @@ -26,10 +23,10 @@ void MinHydroPower::add(int pays)
builder.include(Variable::HydProd(pays), 1.0);
}

problemeHebdo->NumeroDeContrainteMinEnergieHydraulique[pays]
data.NumeroDeContrainteMinEnergieHydraulique[pays]
= problemeHebdo->ProblemeAResoudre->NombreDeContraintes;
builder.greaterThan().build();
}
else
problemeHebdo->NumeroDeContrainteMinEnergieHydraulique[pays] = -1;
data.NumeroDeContrainteMinEnergieHydraulique[pays] = -1;
}
11 changes: 10 additions & 1 deletion src/solver/optimisation/MinHydroPower.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
#pragma once
#include "constraint_builder.h"

struct MinHydroPowerData
{
const bool presenceHydro;
const bool TurbEntreBornes;
const bool PresenceDePompageModulable;
const int NombreDePasDeTempsPourUneOptimisation;
std::vector<int>& NumeroDeContrainteMinEnergieHydraulique;
};

class MinHydroPower : private Constraint
{
public:
using Constraint::Constraint;
void add(int pays);
void add(int pays, MinHydroPowerData& data);
};
Loading

0 comments on commit b40aec7

Please sign in to comment.