Applying a change of variables inside fmincon

2 vues (au cours des 30 derniers jours)
Michele Muller
Michele Muller le 18 Oct 2019
Commenté : Michele Muller le 30 Oct 2019
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?

Réponse acceptée

Matt J
Matt J le 18 Oct 2019
Modifié(e) : Matt J le 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 commentaires
Michele Muller
Michele Muller le 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 le 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.

Connectez-vous pour commenter.

Plus de réponses (1)

Matt J
Matt J le 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 commentaires
Michele Muller
Michele Muller le 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 le 18 Oct 2019
Modifié(e) : Matt J le 18 Oct 2019
You need to put a sufficiently small weight on the penalty that the solution is not greatly perturbed.

Connectez-vous pour commenter.

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by