Find constraints on polynomial coefficients optimization
9 views (last 30 days)
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
Accepted Answer
Bruno Luong
on 12 Jul 2019
Edited: Bruno Luong
on 12 Jul 2019
Why can't you implement
ts := max(min(-a2/(2*a1),T),0);
Then add the 6 constraints into your minimization pb:
two non-linear (and not differentiable):
lb <= theta(ts) <= ub
four non equality linear contstraints;
lb <= theta(0) <= ub
lb <= theta(T) <= ub
5 Comments
More Answers (2)
Matt J
on 11 Jul 2019
Edited: Matt J
on 11 Jul 2019
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
Matt J
on 11 Jul 2019
Edited: Matt J
on 11 Jul 2019
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
0 Comments
See Also
Categories
Find more on Surrogate Optimization 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!