Qualche trucco per risolvere questo problema di ottimizzazione?

Sep 25 2020

Sono relativamente nuovo nella risoluzione dei problemi di ottimizzazione utilizzando Mathematica. Ho un problema di ottimizzazione ma Mathematica non sembra essere in grado di risolverlo. Ho provato tutti i modi per riscriverlo in modo equivalente. Quella menzionata in questa domanda sembra essere la forma più semplice di tutto ciò che sono riuscito a trovare.

Esistono trucchi che possono essere utilizzati per risolvere questo problema?

Minimize[{(c n2)/m2^2+m2/n2,1 < n2 <= n, 1 < m2 <= m}, {n2,m2}]

Risposte

3 Cesareo Sep 28 2020 at 15:54

Puoi risolverlo utilizzando i moltiplicatori di Lagrange, introducendo alcune variabili di slack (e1, e2, e3, e4) per gestire le disuguaglianze, supponendo prima di semplificare c> 0, (c ^ 2) come segue:

f = c^2 x/y^2 + y/x;
L = f + l1 (x - 1 - e1^2) + l2 (n - x - e2^2) + l3 (y - 1 - e3^2) + l4 (m - y - e4^2)
grad = Grad[L, {x, y, l1, l2, l3, l4, e1, e2, e3, e4}];
sols = Solve[grad == 0, {x, y, l1, l2, l3, l4, e1, e2, e3, e4}];
res = {f, x, y, l1, l2, l3, l4, e1^2, e2^2, e3^2, e4^2} /. sols;
res0 = Union[res];
MatrixForm[res0]

Ora in res0 abbiamo i valori f nei diversi punti stazionari così come i valori per e1 ^ 2, e2 ^ 2, e3 ^ 2, e4 ^ 2 che dovrebbero essere non negativi per essere fattibili. Qui quando ek = 0 significa che il vincolo k è attivo. Possiamo procedere allo stesso modo nel caso di -c ^ 2.

Possiamo ridurre ulteriormente questo set a

res1 = {res0[[2]], res0[[5]], res0[[6]], res0[[8]], res0[[9]], res0[[11]], res0[[13]], res0[[14]]};
MatrixForm[res1] 

NOTA

Dai risultati ottenuti possiamo osservare che gli estremi sono sempre al confine.