Multi-objective optimisation using results from external simulation

5 Ansichten (letzte 30 Tage)
Liam Mallamo
Liam Mallamo am 11 Sep. 2019
Bearbeitet: Matt J am 12 Sep. 2019
I'm working on a project to optimise the Volt-VAr [Q(V)] control curves used in solar inverters for voltage control. I've modelled a range of electrical distribution circuits in DIgSILENT PowerFactory, and have a large CSV dataset of node voltages as well as active and reactive power flows. I want to use multi-objective optimisation techniques in MATLAB to generate an optimised curve, that keeps all voltages within a set range and minimises active power curtailment.
The input parameters are a set of 6 curve setpoints, and I have two optimisation functions (1. Voltage between upper and lower limit, 2. Minimise active power loss). I can automate the simulation via Python quite easily. My goal is essentially to run my current output through the algorithm, and have it generate a new set of input parameters, which I then feed into the simulation, continuing until an optimal input curve is reached.
A similar project to mine is found here, where the authors used MATLAB for multi-objective optimisation with an evolutionary algorithm: https://www.researchgate.net/publication/330123088_Optimal_Smart_Inverters_Volt-VAR_Curve_Selection_with_a_Multi-Objective_Volt-VAR_Optimization_using_Evolutionary_Algorithm_Approach
All multi-objective optimisation implementations that I've been able to find have used a mathematical system model within MATLAB, whereas my model is the external simulation. Can I use the Global Optimisation Toolbox to process results from my simulation, and optimise the simulation input parameters to achieve my optimisation functions? If so, are there any examples similar to what I'm trying to achieve?
  1 Kommentar
Matt J
Matt J am 12 Sep. 2019
Bearbeitet: Matt J am 12 Sep. 2019
and I have two optimisation functions (1. Voltage between upper and lower limit, 2. Minimise active power loss)
The first one doesn't sound like an objective function to me. It shoulds like a constraint. If you are simply trying to minimize power loss subject to bounds on the voltage, you should use one of Matlab's single objective solvers rather than a multi-objective solver. A multi-objective solver will work much harder and try to compute the Pareto frontier.

Melden Sie sich an, um zu kommentieren.

Antworten (2)

Matt J
Matt J am 11 Sep. 2019
Bearbeitet: Matt J am 11 Sep. 2019
MATLAB optimization solvers require that you provide a function which take a guess of your unknowns as input and return the quantity you're trying to minimize as output. They do not know or care what code that function uses to obtains its results, whether that be by evaluating an explicit mathematical formula or by running a simulation.
  4 Kommentare
Liam Mallamo
Liam Mallamo am 11 Sep. 2019
It does indeed. My current PowerFactory simulations are entirely automated via the Python API. My sim results are all automatically output to CSV, and so ideally I'll pipe them straight into MATLAB, run the optimisation, and then send the results back to PowerFactory to run another sim, which I can do via Python. The only part that I still have to work out is the actual optimisation in MATLAB.
Matt J
Matt J am 11 Sep. 2019
Bearbeitet: Matt J am 12 Sep. 2019
I don't have a mathematical function to define this relationship.
And as I've said, you do not need one. You just need to be able to write any kind of function that generates the fitness value for a given x. To clarify, your objective function code should look like this:
function fvals=objectiveFcn(x)
[V,P]=runSimulation(x); %get results of simulation
fvals=[V-230;5-P];
end

Melden Sie sich an, um zu kommentieren.


Fabio Freschi
Fabio Freschi am 11 Sep. 2019
Look at this video
it seems the author is doing a similar data exchange between DigSILENT and Matlab

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by