Che poi su una perdita del genere qualunque broker ti chiamerebbe lo stop out e tanti saluti.
@Cren: Usa il metodo del rilassamento. Prendi un punto a caso, lo verifichi su tutte le condizioni, prendi la condizione che "sballa" di piu', proietti il punto sull'iperpiano che rappresenta la condizione, ripeti.
Nota: per proiettare il punto sull'iperpiano ti basta spostare il punto lungo il vettore dell'iperpiano fino ad azzerare lo "sballamento".
PPS: Se dopo 100.000 iterazioni o giu' di li' non trovi un punto che soddisfa tutte le condizioni probabilmente sono sbagliate le condizioni. Per aiutarti a debuggare ti conviene metterti in output il numero della riga che si sta "rilassando" ed il punto risultante, perche' di solito avviene che il metodo va in loop infinito sulle condizioni "sospette".
Ad es., con le condizioni che hai scritto, supponiamo di partire:
P = [1, 2, 3]
1 + 2 + 3 = 6 >= 0 OK
-1 - 2 - 3 + 1 = - 5 >= 0 STICAZZI
Spostiamo lungo il vettore [-1, -1, -1] fino a rispettare la condizione:
(P + a*[-1, -1, -1]) * [-1, -1, -1] + 1 = 0
a * |[-1, -1, -1]|^2 = 5
a = 5/3
P' = [1, 2, 3] + 5/3 * [-1, -1, -1] = [-2/3, 1/3, 4/3]
-2/3 + 1/3 + 4/3 = 1 >= 0 OK
2/3 - 1/3 - 4/3 + 1 = 0 >= 0 OK
FINE
PPPS: Se la condizione e' > (strettamente maggiore), invece di fare
(P + a*[-1, -1, -1]) * [-1, -1, -1] + 1 = 0
fai
(P + a*[-1, -1, -1]) * [-1, -1, -1] + 1 = epsilon
con epsilon piccolo a piacere.
Usare questa forma puo' anche aiutare ad accelerare la convergenza del metodo, che a volte puo' essere lentissima anche per problemi semplicissimi (es. nel piano, due rette ad angolo acuto, punto di partenza dell'algoritmo nella regione che rigetta entrambe le condizioni, il punto continua a "rimbalzare" avvicinandosi asintoticamente al punto d'incontro delle due rette, ma ci mette un'eternita', se invece aggiungi una epsilon a ogni "rimbalzo" ci mette molto molto di meno).