У меня есть задача оптимизации, в которой мне нужно решить для вектора X:SciPy оптимизация возвращает innitial догадки решения
E = O - X * H
O и H является как известен. Решите для X такое, что минимизировать дисперсию Е.
код, который я написал следующим образом:
H = np.matrix(df.ix[:,1:5]) # 61 by 4 matrix
O = np.matrix(df[fund]) # 1 by 61 matrix
#X = np.array([1,0,0,0]) # 1 by 4 matrix
def fitness(X, H=H, O=O):
A = X*np.transpose(H) # 1 by 61 matrix
E = O - A
target = np.var(E, ddof=1)
return target
cons = ({'type':'eq','fun': lambda X: sum(X)-1})
bnds = [(0, 1) for i in range(4)]
res = optimize.minimize(fitness, np.array([0,1,0,0]), method='SLSQP', bounds=bnds, constraints=cons)
print res.x
код держать возвращаясь в тот же innitial догадку в виде раствора. Я также попробовал метод «BFGS», который возвращает неправильный ответ, нарушающий граничные ограничения. Интересно, что я сделал что-то неправильно со сценарием или методы, которые я использовал, не были подходящими?
44 Вероятность того, что проблема тесно связана с svd-вычислением на матрице H – bubble
Я использовал решение Excel для матрицы X. Когда я подключил X в скрипте, функция фитнеса даст мне именно вывод Excel. –
Вы всегда должны проверить, что 'res.success' истинно, так что вы знаете, что решатель конвергирован (что, вероятно, не так, если оно возвращает начальную точку). –