scipy.optimize.shgo никогда не заканчивается, не придерживается ограничений - PullRequest
0 голосов
/ 14 мая 2019
import pandas as pd
import numpy as np
from scipy.optimize import shgo

def my_function(w, *args):
    P = X @ w
    print(np.mean(P))
    print(w)

    return -np.mean(P)

file_path = "stock returns data of e.g. 10 companies.xlsx"

df = pd.ExcelFile(file_path).parse('Sheet1', header=6, index_col=0)
X = df.to_numpy()

cons = {'type': 'eq', 'fun': lambda w: 1 - np.sum(w)}
w0 = []
for i in range(df.shape[1]):
    w0.append(1 / df.shape[1])

b = (0, 1)
bnds = []
for i in range(df.shape[1]):
    bnds.append(b)

optimal = shgo(my_function, bounds=bnds, args=X, constraints=cons)

Чтобы увидеть, что происходит, скрипт печатает значение и веса в каждой итерации.Он не придерживается ограничения, что весам необходимо добавить до 1, поскольку он пытается значения, такие как [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] и [1, 1,1, 1, 1, 1, 1, 1, 1, 1].Почему он это делает?Кажется, что для проверки значений на всех границах функции, даже если они не подчиняются ограничениям.По-видимому, это приводит к почти бесконечному количеству итераций по мере увеличения количества активов в портфеле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...