Applying a change of variables inside fmincon

1 view (last 30 days)
I want to minimize a very well-behaved objective function over the convex hull of a finite set of points .
I am only interested in finding the point where f is maximized, and do not care about the weights that allow me to write .
Of course, I could simply write this as:
popt = fmincon(@(p) f(x'*p),[],[],ones(1,N),1,zeros(N,1),[]);
y = x'*popt;
However, if the points that span the convex hull are nearly multicollinear, then this compound function (as a function of p) is very flat around the optimum. I suspect that this is slowing down fmincon a lot, and would help it "solve the problem" in the space rather than over . What steps could I take to achieve this?

Accepted Answer

Matt J
Matt J on 18 Oct 2019
Edited: Matt J on 18 Oct 2019
If the dimension R^l is not too large, you could use vert2lcon
to obtain the linear (in)equalities describing the convex hull of the x_i,
A*y<=b
Aeq*y=beq
Then you can do the optimization directly in the space of y.
  5 Comments
Michele Muller
Michele Muller on 18 Oct 2019
Oh, thanks, that might be useful! Maybe if I combine that with a supplied gradient that points in the right direction? Will try and report back!
Michele Muller
Michele Muller on 30 Oct 2019
Sorry, it took a while, but this seemed to help! I still don't exactly know what's going on "under the hood", but it definitely improved speed, with little if no precision decrease.

Sign in to comment.

More Answers (1)

Matt J
Matt J on 18 Oct 2019
You could add a regularizing penalty to better specify the solution p_i in the cases where it is ambiguous. Maybe an L1 penalty to enourage sparseness, or an L2 roughness penalty.
  2 Comments
Michele Muller
Michele Muller on 18 Oct 2019
Is there a way to do this in a "lexicographic" way that doesn't interfere with finding the correct y?
Matt J
Matt J on 18 Oct 2019
Edited: Matt J on 18 Oct 2019
You need to put a sufficiently small weight on the penalty that the solution is not greatly perturbed.

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!