2016-03-20 10 views
0

Der folgende Code:mit Einschränkungen (scipy.optimize.minimize)

import numpy as np 
from scipy.optimize import minimize 

def eq(p): 
    s1,s2,s3 = p 
    f1 = 1.1**3/s1*1.1**1+s2*1.1**2+s3*1.1**3 
    f2 = 0.9**1/s1*0.9**1+s2*0.9**2+s3*0.9**3 
    return (f1, f2) 

bnds = ((0, None), (0, None), (0, None)) 
cons = ({ 'type' : 'ineq', 'fun': lambda p: p[0]+[p1]+[p2] - 1}) 


minimize(eq, (0.3,0.3,0.3), bounds=bnds, constraints=cons) 

führt den Fehler

TypeError: unsupported operand type(s) for -: 'tuple' and 'tuple' 

I f1 und f2, so dass die s_t > 0 und sum s_t <= 1 minimieren wollen , für t = 1, 2, 3.

+1

'p mit [0] + [p1] + [p2]' Das ist falsch, es ist nicht wahr? – xvan

+0

Dies sollte die Einschränkung modellieren, dass 'sum s_t <= 1 '. Ich merke auch, dass ich 'method = 'SLSQP' angeben muss, um Einschränkungen zuzulassen, aber dann scheitert es mit' error: Fehler beim Konvertieren des 8. Arguments g' von _slsqp.slsqp in C/Fortran array' - Ich habe diesen Fehler in gesehen ein anderes Thema hier auf Stackoverflow, aber ohne eine Antwort .. – norac

Antwort

0

Der zweite Parameter des Typs ndarray sein sollte, versuchen

minimize(eq, np.ndarray([0.3,0.3,0.3]), bounds=bnds, constraints=cons) 
Verwandte Themen