Dynamische Preisgestaltung und Energiemanagement multivirtueller Kraftwerke im Master-Slave-Spiel basierend auf einem Metamodell-Optimierungsalgorithmus (Matlab-Code)

Inhaltsverzeichnis

1 Hauptinhalt

Master-Slave-Spielmodell

Flussdiagramm des Gleichgewichtsalgorithmus basierend auf dem Metamodell

2 Teile Code

3 Programmergebnisse

4 Download-Links


Hauptinhalt

Dieses Programm reproduziert das Modell „Master-Slave Game Dynamic Pricing and Energy Management of Multi-Virtual Power Plants Based on Meta-Model Optimization Algorithm“, erstellt ein Master-Multi-Slave-Spielmodell zwischen Betreibern und mehreren virtuellen Kraftwerken und untersucht das dynamisches Preisverhalten der Betreiber und die Energie virtueller Kraftwerke. Das Managementmodell ist ein zweischichtiges Modell. Zunächst wird im unteren Schichtmodell ein gemeinsames Dispatch-Modell mehrerer virtueller Kraftwerke mit jeweils den niedrigsten Betriebskosten erstellt Virtuelles Kraftwerk als Optimierungsziel, während die obere Schicht das Führungsmodell ist, das hauptsächlich Marktbetreiber optimiert. Der Strompreis, einschließlich der Optimierung von Stromverkaufspreis und Stromeinkaufspreis, stellt somit ein Master-Slave-Spielmodell dar. In Während des Lösungsprozesses verwendet die obere Schicht den Partikelschwarmalgorithmus, während die untere Schicht den CPLEX-Löser zum Lösen aufruft. Da das Modell als Ganzes groß ist, wird der Metamodellalgorithmus verwendet, um die Lösung zu beschleunigen. Das Programm verwendet matlab + cplex, um das Problem zu lösen, mit klaren Anmerkungen, zuverlässigem Betrieb und bequemem Lernen und Nachschlagen!

  • Master-Slave-Spielmodell

Hinweis: Betrachten Sie die Eigentümer von DSO und VPP als Teilnehmer am Spiel. Unter diesen fungiert der DSO als führender Anbieter. Er fasst den von jedem VPP gemeldeten gekauften und verkauften Strom zusammen, kombiniert den netzgebundenen Strompreis und den Netzstrompreis, berücksichtigt das Preisreaktionsverhalten des VPP und formuliert die Transaktionsstrompreise für jeden VPP mit dem Ziel ist es, sein eigenes Einkommen zu maximieren; jedes VPP fungiert als Follower, erhält den vom VNB festgelegten Transaktionsstrompreis, ordnet die Bemühungen interner DERs rational und formuliert das Stromvolumen für Transaktionen mit Betreibern mit dem Ziel, die Betriebskosten zu minimieren. Das sequentielle Spiel zwischen Anführer und Anhänger bildet ein Stackelberg-Spiel, und jeder VPP trifft gleichzeitig Entscheidungen, wodurch ein nicht kooperatives Spiel entsteht.

  • Flussdiagramm des Gleichgewichtsalgorithmus basierend auf dem Metamodell

Ein Highlight in diesem Artikel ist die Verwendung von Metamodellen zur Verbesserung der Rechengeschwindigkeit des Systems. Dies liefert uns eine gute Idee für Innovationen. Sie können auf neue Methoden in der mathematischen Optimierungstheorie achten und diese auf selbst erstellte Modelle anwenden, um eine wichtige Innovation zu werden Punkte.

Teilladung

%% Gesamtparametereinstellungen des Algorithmus
Zahl=5;
%% Generieren Sie eine Anzahl anfänglicher Stichprobenpunkte basierend auf Latin Super Sampling (LHS).
lambda_Wb=[0,40*Einsen(1,7),0,75*Einsen(1,4),1,20*Einsen(1,3),0,75*Einsen(1,4),1,20*Einsen(1,4),0,40* Einsen(1,2)];
% % lambda_Ws = 0.4*ones(1,24);
lambda_Ws=[0*Einsen(1,7),0,35*Einsen(1,4),0,5*Einsen(1,3),0,35*Einsen(1,4),0,5*Einsen(1,4),0* Einsen(1,2)];
%Generieren Sie Stichprobenpunkte durch LHS
für t=1:24
    temp=lhsdesign(Number,1); %Erzeugen Sie die Sampling-Zwischenhilfsmatrix für jede Periode, die das superlateinische Sampling-Ergebnis der eindimensionalen Zahlenschicht ist
    lambda_DAs(:,t)=temp.*(lambda_Wb(t)-lambda_Ws(t))+lambda_Ws(t); %Generieren Sie den vom Betreiber festgelegten Stromverkaufspreis
    lambda_DAb(:,t)=lambda_DAs(:,t)+rand(Number,1).*(lambda_Wb(t)-lambda_DAs(:,t)); %Generieren Sie den vom Betreiber festgelegten Stromkaufpreis (den Stromkaufpreis). Der Preis sollte größer sein als Der Verkaufspreis für Strom wird so geschrieben)
Ende
disp('Super Latin Sampling (LHS) generiert Anzahl der anfänglichen Abtastpunkte, Ende!')
%% Rufen Sie das Spielmodell der unteren Ebene über die generierten Beispielpunkte auf und berechnen Sie die Transaktionsleistung jedes VPP, um einen Beispieldatensatz zu bilden
für i=1:Zahl
    [P_VPP_s1,P_VPP_b1,~]=Fun_VPP1(lambda_DAb(i,:),lambda_DAs(i,:));
    [P_VPP_s2,P_VPP_b2,~]=Fun_VPP2(lambda_DAb(i,:),lambda_DAs(i,:));
    [P_VPP_s3,P_VPP_b3,~]=Fun_VPP3(lambda_DAb(i,:),lambda_DAs(i,:));
    P_VPP_s(i,:)=[P_VPP_s1,P_VPP_s2,P_VPP_s3];
    P_VPP_b(i,:)=[P_VPP_b1,P_VPP_b2,P_VPP_b3];
Ende
disp('Zusammensetzung des Beispieldatensatzes, Ende!')
%% Ändern Sie das Kriging-Modell und berechnen Sie den Zielfunktionswert, der jeder Gruppe von Stichprobenpunkten entspricht
für i=1:Zahl
    [C_DSO(i,1)]=Fun_DSO(lambda_DAs(i,:),lambda_DAb(i,:),P_VPP_b(i,:),P_VPP_s(i,:));
Ende
disp('Berechnen Sie den Zielfunktionswert, der jeder Gruppe von Stichprobenpunkten entspricht, Ende!')
%% Teilen Sie Schlüsselbereiche auf und berechnen Sie den optimalen Wert jedes Bereichs
l=1; %Die Nummer des geteilten Bereichs, initialisiert auf 1 (je kleiner die Zahl, desto größer die Wahrscheinlichkeit, dass der Bereich die optimale Lösung enthält)
S=C_DSO; %Legen Sie S als Zielfunktionswertsatz der oberen Ebene fest, der allen Strompreisproben entspricht
für i=1:Zahl
    lambda_DA(i,:)=[lambda_DAs(i,:),lambda_DAb(i,:)]; % Setzen Sie den Verkaufsstrompreis in lambda_DA zur Speicherung
Ende
X=lambda_DA; %Legen Sie X als Menge aller Strompreis-Stichprobenpunkte fest
SL=lambda_DA; %Hilfsvariablen zur Generierung der oberen und unteren Grenzwerte des Strompreises im nachfolgenden Berechnungsradius r
k_max=5; %Legen Sie die maximale Anzahl der Iterationen des Ausgleichsalgorithmus fest
[Max_C_DSO,ind]=max(C_DSO); %Finden Sie den größten Zielfunktionswert der oberen Ebene in Bereich 1 und die entsprechende Strompreis-Abtastpunktsatznummer
y(1).S=[Max_C_DSO]; %Weisen Sie den aktuell gefundenen oberen Zielfunktionswert S von y(l) zu.
y(l).X=lambda_DA(ind,:); %Weisen Sie X von y(1) der aktuell gefundenen optimalen Strompreisstichprobe zu
S(ind)=[]; % Löschen Sie den optimalen Lösungswert von Bereich 1 zu diesem Zeitpunkt aus der Menge von S
SL(ind,:)=[];
lambda_DA0=lambda_DA(ind,:); %Legen Sie den Wert des zentralen Strompreises im Bereich l fest
während 1
    if isempty(S) % Bestimmen Sie, ob S eine nicht leere Menge ist (dh der Schlüsselbereich ist geteilt).
        brechen;
    Ende
    eval(['y',num2str(l),'.S=[];']);
    eval(['y',num2str(l),'.X=[];']);
    k=1; %Legen Sie die anfängliche Anzahl der Iterationen fest
    während k<=k_max
        if isempty(S) % Bestimmen Sie, ob S eine nicht leere Menge ist (dh der Schlüsselbereich ist geteilt).
            brechen;
        anders
            lambda_DA_max=max(sqrt(sum(SL.^2,2))); % Berechnen Sie den oberen Grenzwert des Strompreises
            lambda_DA_min=min(sqrt(sum(SL.^2,2))); % Berechnen Sie den unteren Grenzwert des Strompreises
            r=norm(lambda_DA_max-lambda_DA_min)/3*(k_max-k+1)/k_max; % ist der berechnete Radius
            ind=Fun_R(lambda_DA0,SL,r); %Finden Sie die Nummer des Punktes kleiner oder gleich r vom Mittelpunkt aus
            if isempty(ind) % Bestätigen Sie, dass die gefundene Punktmenge nicht leer ist
                brechen;
            anders
                eval(['y',num2str(l),'.S=[y',num2str(l),'.S;S(ind)];' 39;]);
                eval(['y',num2str(l),'.X=[y',num2str(l),'.X;SL(ind,:)]; ']);
                S(ind)=[]; % Löschen Sie den Wert, dessen Abstand kleiner als r ist, aus der Menge von S
                SL(ind,:)=[]; % Löschen Sie den Wert, dessen Abstand kleiner als r ist, aus der Menge von SL
                k=k+1; %Die Anzahl der Iterationen des Ausgleichsalgorithmus plus eins
            Ende
        Ende
    Ende

Verfahrensergebnis

4 Download-Links

Die Kontaktdaten finden Sie weiter unten

Je suppose que tu aimes

Origine blog.csdn.net/zhangxd212489/article/details/134056126
conseillé
Classement