Applying a change of variables inside fmincon

1 visualizzazione (ultimi 30 giorni)
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?

Risposta accettata

Matt J
Matt J il 18 Ott 2019
Modificato: Matt J il 18 Ott 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 Commenti
Michele Muller
Michele Muller il 18 Ott 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 il 30 Ott 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.

Accedi per commentare.

Più risposte (1)

Matt J
Matt J il 18 Ott 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 Commenti
Michele Muller
Michele Muller il 18 Ott 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 il 18 Ott 2019
Modificato: Matt J il 18 Ott 2019
You need to put a sufficiently small weight on the penalty that the solution is not greatly perturbed.

Accedi per commentare.

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by