scipy.optimize.shgo никогда не заканчивается, не придерживается ограничений

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]. Почему он это делает? Кажется, что для проверки значений на всех границах функции, даже если они не подчиняются ограничениям. Похоже, это приводит к почти бесконечному количеству итераций по мере увеличения количества активов в портфеле.

0 ответов

Другие вопросы по тегам