Find constraints on polynomial coefficients optimization
Show older comments
I am trying to find the optimal coefficients of the polynomial of the form:
theta=a1*t^2 +a2*t+a3 (i.e., to find a1,a2,a3) for some cost function.
I'm using patternsearch and I need to formulate the nonlinear/linear constraints on a1,a2,a3.
The problem is that I have constraints on theta (say [lb,ub]) and the range of t (say [0,T]), but not on the coefficients themselves.
So far, I've managed to formulate these constraints:
lb<a3<ub;
lb<a1*T^2+a2*T+a3<ub;
I can't figure out the 3rd constraint on the extrimum on t=-a2/(2*a1). I care only if is in the rectancle [0,T],[lb,ub].
Any idea?
6 Comments
Walter Roberson
on 11 Jul 2019
How would you know if a set of coefficients were optimal?
Matt J
on 11 Jul 2019
AdarG's comment relocated here:
Hi Walter,
patternsearch creates the a1,a2,a3 coefficients and use the polynomial to obtain a value of the cost function and minimize it. I only need to construct the constraints on the coefficients for the optimizator.
Walter Roberson
on 11 Jul 2019
Is it correct that you are trying to find a1 a2 a3 t values that minimize theta under constraints on theta, t, and a3, but no constraints on a1 or a2?
If so then you can always choose theta as the minimum permitted: you have enough freedom to choose a1 and a2 to give any output you want.
AdarG
on 11 Jul 2019
Walter Roberson
on 11 Jul 2019
Those are not real constraints on the variables, only on theta.
AdarG
on 11 Jul 2019
Accepted Answer
More Answers (2)
What's to figure out? You've already articulated that the (nonlinear) constraints on the extremum are,
0<=-a2/(2*a1)<=T
The only thing I might recommend is that converting them to linear constraints,
0<=-a2<=2*T*a1
a1>=0
might make things easier for patternsearch.
6 Comments
AdarG
on 11 Jul 2019
I see. Well, then you might divide the optimization into 3 sub-problems, corresponding to the 3 different regions where the critical t can lie. For each sub-problem, you apply a different set of constraints:
Case I constraints:
lb<=a3<=ub;
lb<= a1*T^2+a2*T+a3 <=ub;
-a2/(2*a1)<=0
Case II constraints:
lb<=a3<=ub;
lb<= a1*T^2+a2*T+a3 <=ub;
-a2/(2*a1)>=T
Case III constraints:
lb<=a3<=ub;
lb<= a1*T^2+a2*T+a3 <=ub;
0<=-a2/(2*a1)<=T
lb<=polyval(a,-a2/(2*a1))<=ub
AdarG
on 12 Jul 2019
Matt J
on 12 Jul 2019
Thanks Matt, but how do I implement it practically? Should I call the optimization routine 3 times?
Yes, you solve each sub-case and take the case with the best optimal value.
If I call only one time, how do I construct the A matrix and b vector?
Each row of the matrix corresponds to one of the linear constraints.
AdarG
on 12 Jul 2019
Matt J
on 12 Jul 2019
You should just set out of bound values to Inf.
x = fseminf(fun,[a1,a2,a3], 2, @(a,s) seminfcon(a,s,T,lb,ub));
function [c,ceq,K_ub,K_lb,s]= seminfcon(a,s,T,lb,ub)
% No finite nonlinear inequality and equality constraints
c = [];
ceq = [];
% Sample set
if isnan(s(1))
% Initial sampling interval
s = [0.01 0; 0.01 0];
end
t1 = 0:s(1):T;
t2 = 0:s(2):T;
% Evaluate the semi-infinite constraint
K_ub = polyval(a,t1)-ub;
K_lb = lb - polyval(a,t2);
end
Categories
Find more on Choose a Solver in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!