scipy ограничить не-x0 аргумент - PullRequest
0 голосов
/ 24 августа 2018

Допустим, у меня есть следующая функция:

import scipy
def fitness(w, assets, rf=0., dt='2016-12-30'):
    mu = float(ptf_mean(assets,w,dt))
    sigma  = float(ptf_var(assets,w,dt)) 

    sigma_sum = sigma.sum()

    util = -(mu - rf) / (sigma)   
    return util 

И:

b_ = [(0.,1.) for i in range(2)]
c_ = ({'type':'eq', 'fun': lambda w: sum(w)-1. }) 
optimized = scipy.optimize.minimize(fitness, np.matrix([1.,0.]), (assets, rf, dt), 
            method='SLSQP', constraints=c_,bounds=b_) 

Теперь, допустим, я хочу ограничиться sigma_sum.Как я мог сделать это?Все примеры ограничений, которые я видел в документах, меняются только x0 или w в моем примере.

Я опускаю определение assets, rf и dt, поскольку они на самом деле не связанык проблеме, но предположим, что код скомпилирован.

Спасибо!

1 Ответ

0 голосов
/ 25 августа 2018

sigma_sum является функцией w (и параметров).Ограничить это означает ограничить w так, чтобы sigma_sum удовлетворял некоторому условию.Это предполагает наличие вызываемого элемента, который возвращает значение, включающее sigma_sum, например:

c2_ = ({'type':'eq', 'fun': lambda w: sigma_sum(w) - 42})

, где sigma_sum определяется как

def sigma_sum(w, assets, rf=0., dt='2016-12-30'):
    mu = float(ptf_mean(assets,w,dt))
    sigma  = float(ptf_var(assets,w,dt)) 
    return sigma.sum()

Чтобы избежать дублирования кода, вы бывозможно, вы захотите использовать этот sigma_sum в вашей функции, которая вычисляет цель.

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