Попытка решить функцию максимизации - PullRequest
0 голосов
/ 30 июня 2018

У меня есть проблема максимизации, которую я хотел бы решить:

enter image description here

Для этого я с нетерпением жду возможности использовать функцию minimize из библиотеки scipy.

Прежде чем перейти к тому, что я пробовал, я определю каждую из переменных:

mu=[[-0.241035],
    [ 0.03557551],
    [-0.00410642],
    [-0.43985304],
    [-0.24741543]]

landa= 42.74650697 # is a scalar

E =[[0.000167,0.000032,0.000082,0.000055,0.000055],
[0.000032,0.000131,0.000019,0.000043,0.000032],
[0.000082,0.000019,0.000273,0.000110,0.000086],
[0.000055,0.000043,0.000110,0.000229,0.000131],
[0.000055,0.000032,0.000086,0.000131,0.000165]]

В funct0 Я устанавливаю функцию максимизации, которая появляется на прикрепленном изображении, и определяю матрицу весов.

def funct0(x):
    x0,x1,x2,x3,x4=x
    weights= np.array([x0,x1,x2,x3,x4])
    return -1*(np.matmul(weights.T , mu) - np.matmul(np.matmul (landa*weights.T, E ),weights) /2)

В funct1 я установил границы и ограничение, потому что хочу, чтобы переменные в весах x0,x1,x2,x3,x4 суммировались до 1.

def funct1():
    x0=np.array([1,1,1,1,1])
    cons = ({'type': 'eq', 'fun': lambda x:  sum(x) - 1})
    res=minimize(funct0, x0, bounds=[[0,None] for i in range(len(x0))],options={"disp": False}, constraints=cons)
    return res.x

 print(funct1())

При выполнении этого скрипта он выводит

[  0   1   0   0  0]

Я не уверен, что максимизация верна, потому что она присваивает все переменной x1, тогда как остальным x0 x2 x3 x4 присваивается 0 значений.

Было бы разумно, если бы функция, установленная в funct0, была линейной функцией w и mu, потому что при этом она присваивает все значения x1, что соответствует ее наибольшему значению в mu

Я думал, что мой вывод будет более "диверсифицированным" назначением значений среди w переменных в матрице, учитывая нелинейность функции.

Возможно, я неправильно настраивал функцию в funct0? Возможно, я использую неправильную оптимизацию?

Ваша помощь высоко ценится.

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