2016-04-02 2 views
0

У меня есть задача оптимизации, в которой мне нужно решить для вектора 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», который возвращает неправильный ответ, нарушающий граничные ограничения. Интересно, что я сделал что-то неправильно со сценарием или методы, которые я использовал, не были подходящими?

+0

44 Вероятность того, что проблема тесно связана с svd-вычислением на матрице H – bubble

+0

Я использовал решение Excel для матрицы X. Когда я подключил X в скрипте, функция фитнеса даст мне именно вывод Excel. –

+0

Вы всегда должны проверить, что 'res.success' истинно, так что вы знаете, что решатель конвергирован (что, вероятно, не так, если оно возвращает начальную точку). –

ответ

0

Я не уверен, что изменило ситуацию, но, похоже, метод «TNC» дал мне то, что я ищу.

Смежные вопросы