Using Multistart with constrainted fmincon

13 visualizzazioni (ultimi 30 giorni)
Hey,
i want to optimize a constrainted function using fmincon. To find the global optimum, i found out that the use of MultiStart is helpful. My function looks like this
Here is my code for the use of fmincon
k = [5,7];
p = [1:4];
a = [pi/11, pi/7, pi/6, pi/3]; %Initial guesses
weights=(1./k.^4);
weights=weights/sum(weights);
fun = @(a) sqrt(sum( weights(:).*( 1 + 2*sum( (-1).^p.*cos(k(:).*a(p)) ,2) ).^2) );
A = [1, -1,0,0;0, 1, -1, 0; 0,0,1,-1]; % a1 < a2 < a3 ..
B = [0,0,0];
Aeq = [];
Beq = [];
lb = [0,0,0,0];
ub = [pi/4,pi/4,pi/4,pi/4];
function [c,ceq] = modindex(a,p) % saved as a seperate script
c = [];
ceq = 4/pi.*( 1 + 2*sum( (-1).^p.*cos(a(p)) ,2 ))-0.6;
end
nlcon = @(a) modindex(a,p); % this is a constraint, implemented as a function
x = fmincon(fun, a, A, B, Aeq, Beq, lb, ub,nlcon)
For the use of fmincon this code works, but now i want to run it with MultiStart. My question is how to respect all of my constraints?
My first try was this
problem = createOptimProblem('fmincon', 'objective', fun, 'x0', [pi/11, pi/7, pi/6, pi/3],'A', [1, -1,0,0;0, 1, -1, 0; 0,0,1,-1],...
'b',[0,0,0], 'Aeq', [], 'beq', [], 'lb', [0,0,0,0], 'ub', [pi/4,pi/4,pi/4,pi/4], 'nonlcon', @(a) modindex(a,p));
ms = MultiStart( 'UseParallel', 'allways', 'StartPointstoRun', 'bounds');
[x,f] = run(ms, problem, 10)
This doesnt work, "No field A exists for PROBLEM structure."
What does my code must look like, that all of the constraints are respected?
Kind regards

Risposta accettata

Matt J
Matt J il 25 Mag 2021
problem = createOptimProblem('fmincon', 'objective', fun, 'x0', [pi/11, pi/7, pi/6, pi/3],'Aineq', [1, -1,0,0;0, 1, -1, 0; 0,0,1,-1],...
'bineq',[0,0,0], 'Aeq', [], 'beq', [], 'lb', [0,0,0,0], 'ub', [pi/4,pi/4,pi/4,pi/4], 'nonlcon', @(a) modindex(a,p));
  21 Commenti
Matt J
Matt J il 29 Mag 2021
Modificato: Matt J il 29 Mag 2021
We can prove mathematically that the smallest value m can have is about 0.527393087579050.
First, because the sequence of are monotonic in [0,],
Therefore,
So, you cannot consider any m lower than this value.
Also, this is a tight lower bound, achieved for example by choosing and all other .
Meikel Vollmers
Meikel Vollmers il 31 Mag 2021
Yeah, got it, youre right. Thats a mistake made in the paper i read. Matt, youre the best, thanks a lot!
I will replace the upper bound with pi/2 instead of pi/4. That will also guarantee the quater and halfwave symmetrie of my pulses.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Global or Multiple Starting Point Search in Help Center e File Exchange

Prodotti


Release

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by