Ho bisogno di risolvere
Io penso che sia un problema di secondo grado che dovrebbe essere risolvibile con CVXOPT , ma non riesco a capire come.
Ho bisogno di risolvere
Io penso che sia un problema di secondo grado che dovrebbe essere risolvibile con CVXOPT , ma non riesco a capire come.
Risposte:
Ho scritto una risposta completa (sotto la riga) prima di scoprire CVXPY , che (come CVX per MATLAB) fa tutte le cose difficili per te e ha un esempio molto breve quasi identico al tuo qui . Devi solo sostituire la riga pertinente con
p = program(minimize(norm2(A*x-b)),[equals(sum(x),1),geq(x,0)])
La mia vecchia risposta, facendolo nel modo più difficile con CVXOPT:
Seguendo il suggerimento di Geoff di quadrare la tua funzione oggettiva dà
Naturalmente, tutti i termini sono scalari, quindi puoi trasporre il terzo e rilasciare l'ultimo (poiché non dipende da e quindi non cambierà quale ti fornisce un minimo, anche se dovrai aggiungerlo di nuovo dopo aver risolto per ottenere il valore corretto del tuo obiettivo) per ottenere Questo (compresi i tuoi vincoli) ha la forma di un programma quadratico, come indicato in la documentazione CVXOPT qui , dove esiste anche un codice di esempio per risolvere un simile problema.
Invece del problema che hai risolto, risolvi
Questo problema è un problema di ottimizzazione differenziabile, convesso, non lineare che può essere risolto in CVXOPT, IPOPT o qualsiasi altro risolutore di ottimizzazione convesso.