Using Multistart with constrainted fmincon

9 visualizaciones (últimos 30 días)
Meikel Vollmers
Meikel Vollmers el 25 de Mayo de 2021
Comentada: Meikel Vollmers el 31 de Mayo de 2021
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

Respuesta aceptada

Matt J
Matt J el 25 de Mayo de 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 comentarios
Matt J
Matt J el 29 de Mayo de 2021
Editada: Matt J el 29 de Mayo de 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 el 31 de Mayo de 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.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Surrogate Optimization en Help Center y File Exchange.

Productos


Versión

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by