Ich versuche, die folgende Funktion mit Python scipy.optimize zu maximieren. Nach vielen Versuchen scheint es jedoch nicht zu funktionieren. Die Funktion und mein Code sind unten eingefügt. Danke fürs Helfen!Optimierung mit Python (scipy.optimize)
Problem
Maximize [sum (x_i/y_i)**gamma]**(1/gamma)
subject to the constraint sum x_i = 1; x_i is in the interval (0,1).
x
ist ein Vektor der Wahl Variablen; y
ist ein Vektor von Parametern; gamma
ist ein Parameter. Die x
s müssen zu eins addiert werden. Und jeder x
muss im Intervall (0,1) sein.
-Code
def objective_function(x, y):
sum_contributions = 0
gamma = 0.2
for count in xrange(len(x)):
sum_contributions += (x[count]/y[count]) ** gamma
value = math.pow(sum_contributions, 1/gamma)
return -value
cons = ({'type': 'eq', 'fun': lambda x: np.array([sum(x) - 1])})
y = [0.5, 0.3, 0.2]
initial_x = [0.2, 0.3, 0.5]
opt = minimize(objective_function, initial_x, args=(y,), method='SLSQP',
constraints=cons,bounds=[(0, 1)] * len(x))
Es könnte hilfreich sein, wenn Sie über spezifischere waren, was viele versuchen, "brachte das Ziel zu beleuchten deiner Frage. – Erik
Ihr Code funktioniert für mich. Was ist das Problem, das du bekommst? Ich bekomme optimale 'x_opt: array ([0.29465573, 0.33480638, 0.37053789])'. Alles, was ich ändern musste, war 'bounds' sollte' len (initial_x) 'oder' len (y) 'enthalten, da' x' in deinem Code nicht definiert ist. – askewchan
@askewchan, Könnte ein numerisches Stabilitätsproblem sein. Auf meinem Mac bekomme ich 'nan''nan''nan',' 'Iterationslimit überschritten'' –