Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ANT-992] Add ramping for thermal clusters #1817

Draft
wants to merge 26 commits into
base: develop
Choose a base branch
from
Draft
Changes from 1 commit
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
a64625a
core implementation of the ramping model
bencamus Dec 5, 2023
b9c4f2b
add export/import features for the thermal ramping attributes
bencamus Dec 7, 2023
624f2ce
make the ramping constraints cyclical as the evolution of the product…
bencamus Dec 18, 2023
915e0c7
remove reference to Yuni in the ramping model code
bencamus Dec 18, 2023
f2d469e
removing of a useless header file
bencamus Dec 18, 2023
e78c034
improve readability of ramping model methods by naming their paramete…
bencamus Dec 18, 2023
b9801fe
add subclass to store and check thermal cluster ramping attributes
bencamus Dec 18, 2023
09a2ca9
Small code improvement for ramping
flomnes Dec 18, 2023
5ce4531
Solve build errors with a friend
flomnes Dec 19, 2023
77daa36
add the possibility to enable/disable the ramping model for each cluster
bencamus Dec 20, 2023
8133150
improvement of the implementation of the ON/OFF ramping model features
bencamus Dec 20, 2023
134ad57
merge commit
bencamus Dec 20, 2023
54ef194
add ramping costs to the output operational costs of the cluster
bencamus Jan 15, 2024
d8ca6aa
add dedicated output log for ramping costs
bencamus Jan 16, 2024
d1f983c
implementation of a new version of the ramping equations
bencamus Feb 29, 2024
70ba583
fixing a bug in the definition of the ramping variables bounds + free…
bencamus Mar 6, 2024
7387013
Supression of clusterRampingVariablesIndex and standardisation of the…
sylvmara Mar 7, 2024
ab1b701
Harmonisation of ramp checking
sylvmara Mar 7, 2024
8b6ce0b
merge with Antares master
bencamus Apr 12, 2024
3b17545
merge last version of ramping model with last version of Antares
bencamus Apr 12, 2024
50f7a48
removing ramping files that are useless with the last version of Antares
bencamus Apr 12, 2024
554455d
changing constraint equation related to power output variation of the…
bencamus Apr 16, 2024
3625bd2
Temporarily enable build for CentOS7
flomnes May 3, 2024
44f722d
changing the variable caption from RAMP COST by plant to RAMP COST BY…
bencamus May 15, 2024
e41d0b8
update the ramping constraint 18ter to remove breaking down thermal u…
bencamus Aug 26, 2024
34f2531
Merge remote-tracking branch 'origin/feature/ramping_model_scalian' i…
bencamus Aug 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
make the ramping constraints cyclical as the evolution of the product…
…ion for the first hour is constrained the production of the last hour + remove commented ramping debug logs
bencamus committed Dec 18, 2023
commit 624f2ce5436532ef019be957135c5cbb154c5a60
1 change: 0 additions & 1 deletion src/solver/optimisation/constraints/ConstraintBuilder.cpp
Original file line number Diff line number Diff line change
@@ -58,7 +58,6 @@ ConstraintBuilder& ConstraintBuilder::DispatchableProduction(unsigned int index,
int delta)
{
AddVariable(GetVariableManager(offset, delta).DispatchableProduction(index), coeff);
// logs.info() << "dispatchable production idx " << GetVariableManager(offset, delta).DispatchableProduction(index);
return *this;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove debug comments

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in commit 624f2ce

}

30 changes: 9 additions & 21 deletions src/solver/optimisation/constraints/PowerOutputVariation.cpp
Original file line number Diff line number Diff line change
@@ -8,25 +8,14 @@ void PowerOutputVariation::add(int pays, int cluster, int clusterIndex, int pdt,
double maxUpwardPowerRampingRate = PaliersThermiquesDuPays.maxUpwardPowerRampingRate[clusterIndex];
double pminDUnGroupeDuPalierThermique = PaliersThermiquesDuPays.pminDUnGroupeDuPalierThermique[clusterIndex];
// constraint : P(t) - P(t-1) - l * M^+(t) - P^+ + P^- = 0
if (pdt > 0)
{
builder.updateHourWithinWeek(pdt)
.DispatchableProduction(cluster, 1.0)
.DispatchableProduction(cluster, -1.0, -1, problemeHebdo->NombreDePasDeTempsPourUneOptimisation)
.NumberStartingDispatchableUnits(cluster, -pminDUnGroupeDuPalierThermique)
.ProductionIncreaseAboveMin(cluster, -1.0)
.ProductionDecreaseAboveMin(cluster, 1.0)
.equalTo();
}
else
{
builder.updateHourWithinWeek(pdt)
.DispatchableProduction(cluster, 1.0)
.NumberStartingDispatchableUnits(cluster, -pminDUnGroupeDuPalierThermique)
.ProductionIncreaseAboveMin(cluster, -1.0)
.ProductionDecreaseAboveMin(cluster, 1.0)
.equalTo();
}
builder.updateHourWithinWeek(pdt)
.DispatchableProduction(cluster, 1.0)
.DispatchableProduction(cluster, -1.0, -1, problemeHebdo->NombreDePasDeTempsPourUneOptimisation)
.NumberStartingDispatchableUnits(cluster, -pminDUnGroupeDuPalierThermique)
.ProductionIncreaseAboveMin(cluster, -1.0)
.ProductionDecreaseAboveMin(cluster, 1.0)
.equalTo();

if (builder.NumberOfVariables() > 0)
{
ConstraintNamer namer(problemeHebdo->ProblemeAResoudre->NomDesContraintes);
@@ -40,8 +29,7 @@ void PowerOutputVariation::add(int pays, int cluster, int clusterIndex, int pdt,
}
else
{
int add = (pdt == 0) ? 4 : 5;
problemeHebdo->NbTermesContraintesPourLesRampes += add;
problemeHebdo->NbTermesContraintesPourLesRampes += 5;
problemeHebdo->ProblemeAResoudre->NombreDeContraintes++;
}
}
30 changes: 9 additions & 21 deletions src/solver/optimisation/constraints/RampingDecreaseRate.cpp
Original file line number Diff line number Diff line change
@@ -8,25 +8,14 @@ void RampingDecreaseRate::add(int pays, int cluster, int clusterIndex, int pdt,
double maxDownwardPowerRampingRate = PaliersThermiquesDuPays.maxDownwardPowerRampingRate[clusterIndex];
double pmaxDUnGroupeDuPalierThermique = PaliersThermiquesDuPays.PmaxDUnGroupeDuPalierThermique[clusterIndex];
// constraint : P(t) - P(t-1) + R^- * M(t) + u * M^-(t) + u * M^--(t) > 0
if (pdt > 0)
{
builder.updateHourWithinWeek(pdt)
.DispatchableProduction(cluster, 1.0)
.DispatchableProduction(cluster, -1.0, -1, problemeHebdo->NombreDePasDeTempsPourUneOptimisation)
.NumberOfDispatchableUnits(cluster, maxDownwardPowerRampingRate)
.NumberStoppingDispatchableUnits(cluster, pmaxDUnGroupeDuPalierThermique)
.NumberBreakingDownDispatchableUnits(cluster, pmaxDUnGroupeDuPalierThermique)
.greaterThan();
}
else
{
builder.updateHourWithinWeek(pdt)
.DispatchableProduction(cluster, 1.0)
.NumberOfDispatchableUnits(cluster, maxDownwardPowerRampingRate)
.NumberStoppingDispatchableUnits(cluster, pmaxDUnGroupeDuPalierThermique)
.NumberBreakingDownDispatchableUnits(cluster, pmaxDUnGroupeDuPalierThermique)
.greaterThan();
}
builder.updateHourWithinWeek(pdt)
.DispatchableProduction(cluster, 1.0)
.DispatchableProduction(cluster, -1.0, -1, problemeHebdo->NombreDePasDeTempsPourUneOptimisation)
.NumberOfDispatchableUnits(cluster, maxDownwardPowerRampingRate)
.NumberStoppingDispatchableUnits(cluster, pmaxDUnGroupeDuPalierThermique)
.NumberBreakingDownDispatchableUnits(cluster, pmaxDUnGroupeDuPalierThermique)
.greaterThan();

if (builder.NumberOfVariables() > 0)
{
ConstraintNamer namer(problemeHebdo->ProblemeAResoudre->NomDesContraintes);
@@ -41,8 +30,7 @@ void RampingDecreaseRate::add(int pays, int cluster, int clusterIndex, int pdt,
}
else
{
int add = (pdt == 0) ? 4 : 5;
problemeHebdo->NbTermesContraintesPourLesRampes += add;
problemeHebdo->NbTermesContraintesPourLesRampes += 5;
problemeHebdo->ProblemeAResoudre->NombreDeContraintes++;
}
}
30 changes: 9 additions & 21 deletions src/solver/optimisation/constraints/RampingIncreaseRate.cpp
Original file line number Diff line number Diff line change
@@ -8,26 +8,15 @@ void RampingIncreaseRate::add(int pays, int cluster, int clusterIndex, int pdt,
double maxUpwardPowerRampingRate = PaliersThermiquesDuPays.maxUpwardPowerRampingRate[clusterIndex];
double pminDUnGroupeDuPalierThermique = PaliersThermiquesDuPays.pminDUnGroupeDuPalierThermique[clusterIndex];
// constraint : P(t) - P(t-1) - R^+ * M(t) - l * M^+(t) < 0
// logs.info() << "add up ramping constraint for cluster " << cluster << " pdt " << pdt;

if (pdt > 0)
{
builder.updateHourWithinWeek(pdt)
.DispatchableProduction(cluster, 1.0)
.DispatchableProduction(
cluster, -1.0, -1, problemeHebdo->NombreDePasDeTempsPourUneOptimisation)
.NumberOfDispatchableUnits(cluster, -maxUpwardPowerRampingRate)
.NumberStartingDispatchableUnits(cluster, -pminDUnGroupeDuPalierThermique)
.lessThan();
}
else
{
builder.updateHourWithinWeek(pdt)
.DispatchableProduction(cluster, 1.0)
.NumberOfDispatchableUnits(cluster, -maxUpwardPowerRampingRate)
.NumberStartingDispatchableUnits(cluster, -pminDUnGroupeDuPalierThermique)
.lessThan();
}
builder.updateHourWithinWeek(pdt)
.DispatchableProduction(cluster, 1.0)
.DispatchableProduction(
cluster, -1.0, -1, problemeHebdo->NombreDePasDeTempsPourUneOptimisation)
.NumberOfDispatchableUnits(cluster, -maxUpwardPowerRampingRate)
.NumberStartingDispatchableUnits(cluster, -pminDUnGroupeDuPalierThermique)
.lessThan();

if (builder.NumberOfVariables() > 0)
{
ConstraintNamer namer(problemeHebdo->ProblemeAResoudre->NomDesContraintes);
@@ -40,8 +29,7 @@ void RampingIncreaseRate::add(int pays, int cluster, int clusterIndex, int pdt,
}
else
{
int add = (pdt == 0) ? 3 : 4;
problemeHebdo->NbTermesContraintesPourLesRampes += add;
problemeHebdo->NbTermesContraintesPourLesRampes += 4;
problemeHebdo->ProblemeAResoudre->NombreDeContraintes++;
}
}