|
Autor |
Pumpspeicherwerk Modellierung |
|
legacys01
Ehemals Aktiv  Dabei seit: 26.11.2016 Mitteilungen: 21
 | Themenstart: 2017-07-14
|
Hallo zusammen,
ich benötige euere Hilfe bei einem Optimierungsproblem.
es geht um einen Pumpenspeicherwerk, das Strom erzeugt(Turbine-->Einspeisung ins Netz) bzw. verbraucht (Pumpe-->Bezug aus dem Netz) je nach Strompreis in der Börse.
das PSW besteht aus 2 Becken mit unterschiedlicher Höhe und Speichervolumen. im Oberen Becken gibt es einen Zufluss mit bekannter zuflussmenge.
Tr: Energieerzeugung der Turbine pro Stunde
Pp: Energieverbrauch der Pumpe pro Stunde
G:Gewinn
zufluss: m³/h (bekannt in stündlicher Auflösung)
FZob: Füllzustand des Oberbeckens
FZob0:Initiale Füllzustand des Oberbeckens
FZub: Füllzustand des Unterbeckens
FZub0:Initiale Füllzustand des Unterbeckens
w: Wirkungsgrad der Pumpturbine
inflow_Price_data.mat lädt den stündlichen Zufluss und die preise hoch.
Ziel:
optimal Fahren der Turbine und Pumpe um möglichst große Profit zu machen?
Zielfunktion: G= Tr*Preis-Pp*preis
Restriktionen:
1) equality in form : Aeq.x=beq
FZob=FZob0-Tr+w*Pp+Zufluss
Fzub=FZub0+Tr-w*Pp
2) Systemgrenzen
ub=[Tr_max_leistung;Pp_max_leistung;FZob_max;FZub_max]
ul=[Tr_min_leistung;Pp_min_leistung;FZob_min;FZub_min]
anbei Mein sehr bescheidenen Code, was leider nicht wie erwartet funktioniert. ich hoffe, dass ihr mir dabei helfen könnt.
operations.m
\sourceon nameDerSprache
%% Initialwerte definieren
N=length(inFlow);
%% Restriktionen definieren
constraints;
%% zu maximierende Funktion definieren
P=c.*[price;-price;zeros(N,1);zeros(N,1);0;0];
%% optimierung
[x1,fval1,exitflag,output,lambda]=linprog(P,[],[],Aeq,Beq,Lb,Ub);
%% visualisierung
plotResults(x1,price,N);
%plotResults(x1,price,N);
\sourceoff
constraints.m
\sourceon nameDerSprache
%% Konstanten
% Pumpeturbine Wirkungsgrad
w=0.95;
% Umrechnungsfaktor m³-->MWh
c=998*(9.81)*(180.5)*(0.95)/(3600*1000000); % (kg/m³).(m/s²).m /(3600.1000000)
%% Systemgrenze Bounds
% [Turbine;Pumpe;Menge_max oberbecken;Menge_max_unterbecken;
Ub=[40*ones(N,1);40*ones(N,1);408000*ones(N,1);488000*ones(N,1);300000;400000];
Lb=[zeros(N,1);zeros(N,1);15885*ones(N,1);95885*ones(N,1);50000;100000];
%% Restriktion Aeq.x=Beq
t=ones(N,1);
z=zeros(N,1);
q=zeros(N,N);
Tr=-spdiags([t -t],[0 N],N,N);
Pp=w*spdiags([t -t],[0 N],N,N);
Fzob=spdiags([t -t],[0 -1],N,N);
Fzobx=q*Fzob;
Fzub=spdiags([t -t],[0 -1],N,N);
Fzubx=q*Fzub;
Fzob0=z;Fzob0(1,1)=1;
Fzub0=z;Fzub0(1,1)=1;
% 2 Gleihungen
Aeq=[Tr Pp Fzob Fzubx Fzob0 z;-Tr -Pp Fzobx Fzub z Fzub0];
Beq=[inFlow;z];
\sourceoff
plotResults.m
\sourceon nameDerSprache
function plotResults(x,price,N)
%% neue figure erzeugen
figure('Position',[100,100,1020,800]);
%% obere plot price
subplot(2,1,1);
plot(price)
% Add labels
xlabel('Zeit (h)');
ylabel('Preis (€/MWh)');
title('Strompreis');
grid minor;
%% untere plot Erzeugung
subplot(2,1,2);
%v=[x(1:N),x(N+1:2*N),x(2*N+1:3*N),x(3*N+1*4*N),x(4*N+1,end)];
hold on;
plot(x(1:N),'b');
hold on;
plot(x(N+1:2*N),'r');
hold on;
plot(x(2*N+1:3*N),'g');
% hold on;
% plot(x(3*N+1:4*N),'-*c');
% Add labels
ylabel('Turbine und Pumpeerzeugung (MWh)');
xlabel('Zeit (h)');
title('Pumpen und Turbine Erzeugung');
% Add legend
legend('Turbine ','Pumpe',
\sourceoff
vielen Dank im voraus für euere Hilfe und Anregungen
|
Profil
|
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen. Lesen Sie die
Nutzungsbedingungen,
die Distanzierung,
die Datenschutzerklärung und das Impressum.
[Seitenanfang]
|