如何解决目标函数中的 Scipy 优化函数?
我认为这是一个针对 stackoverflow 而不是针对 quant stack exchange 的问题,因为它更多地与编程而非财务相关。在下面的代码中,我想最小化最终的方程。除了当然 X 之外,每个变量都被定义。应该进行最小化才能找到我 X。
price_non_renew = -(pmwh + rp) * svnr
revenue_client = X * svnr
k = X - mn - rp
put = euro_vanilla_black(ul,k,crd/12,r = 0,sigma = 0.20)
revenue_client + put * N + price_non_renew --> 0 #to minimize
euro_vanilla_black
是:
import scipy.stats as si
def euro_vanilla_black(F,K,T,r,sigma,option = 'put'):
d1 = (np.log(F / K) + (+ 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))
d2 = (np.log(F / K) + (- 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))
if option == 'call':
result = F * si.norm.cdf(d1,0.0,1.0) - K * si.norm.cdf(d2,1.0)
if option == 'put':
result = K * si.norm.cdf(-d2,1.0) - F * si.norm.cdf(-d1,1.0)
return np.exp(-r * T) * result
我将目标函数定义为:
def obj_func(X,a,b,c,d,e,f,g,h,n):
pnr = -(a + b) * c
rc = X * c
k = X - d - b
put = n * euro_vanilla_black(e,f/12,r = g,sigma = h)
return rc+ put + pnr
import scipy.optimize as sco
sco.minimize(obj_func,20,args=(20.25,0.51,798.81,0.38,20.38,12,0.20,365))
我明白了:
__main__:3: RuntimeWarning: invalid value encountered in log
__main__:4: RuntimeWarning: invalid value encountered in log
C:\Users\eliot.tabet\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py:903: RuntimeWarning: invalid value encountered in greater
return (a < x) & (x < b)
C:\Users\eliot.tabet\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py:903: RuntimeWarning: invalid value encountered in less
return (a < x) & (x < b)
C:\Users\eliot.tabet\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py:1827: RuntimeWarning: invalid value encountered in greater_equal
cond2 = (x >= np.asarray(_b)) & cond0
__main__:3: RuntimeWarning: invalid value encountered in log
__main__:4: RuntimeWarning: invalid value encountered in log
C:\Users\eliot.tabet\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py:903: RuntimeWarning: invalid value encountered in greater
return (a < x) & (x < b)
C:\Users\eliot.tabet\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py:903: RuntimeWarning: invalid value encountered in less
return (a < x) & (x < b)
C:\Users\eliot.tabet\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py:1827: RuntimeWarning: invalid value encountered in greater_equal
cond2 = (x >= np.asarray(_b)) & cond0
C:\Users\eliot.tabet\Anaconda3\lib\site-packages\scipy\optimize\linesearch.py:429: RuntimeWarning: invalid value encountered in greater
if (phi_a1 > phi0 + c1 * alpha1 * derphi0) or \
C:\Users\eliot.tabet\Anaconda3\lib\site-packages\scipy\optimize\linesearch.py:430: RuntimeWarning: invalid value encountered in greater_equal
((phi_a1 >= phi_a0) and (i > 1)):
__main__:3: RuntimeWarning: invalid value encountered in log
__main__:4: RuntimeWarning: invalid value encountered in log
C:\Users\eliot.tabet\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py:903: RuntimeWarning: invalid value encountered in greater
return (a < x) & (x < b)
C:\Users\eliot.tabet\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py:903: RuntimeWarning: invalid value encountered in less
return (a < x) & (x < b)
C:\Users\eliot.tabet\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py:1827: RuntimeWarning: invalid value encountered in greater_equal
cond2 = (x >= np.asarray(_b)) & cond0
Out[153]:
fun: array([nan])
hess_inv: array([[0.03700799]])
jac: array([nan])
message: 'Desired error not necessarily achieved due to precision loss.'
nfev: 342
nit: 2
njev: 114
status: 2
success: False
x: array([-11155.49767143])
谁能帮帮我吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。