使用scipy minimum函数最大化

2024-04-19 01:44:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想优化我的函数Strategy2(alpha, beta),它对一些数据执行下注策略,从钱包值20000开始,并返回一个新的钱包值。你知道吗

所以我需要找到使返回值最大化的最佳alpha&;beta值。你知道吗

一个快速的google表明scipy是一条路要走,但我正在努力实现它。你知道吗

在尝试这种优化方法之前,我采取的方法是先修复alpha,然后找到最佳beta,然后用同样的方法修复beta并找到最佳alpha。你知道吗

该方法给出了Strategy2(23,3)的最佳值,该值返回24650。你知道吗

下面是我尝试实现模块scipy中的最小化方法:

import numpy as np
from scipy.optimize import minimize
bnds = ((None, None), (None, None))
param = [0, 0]
f = lambda param: Strategy2(param[0], param[1])
param_init = 0, 100
param = minimize(f, param_init, method='SLSQP', bounds=bnds).x
print(param)

正如你所看到的,我真的不知道我在做什么,事实上这只是返回

[  0. 100.]

最终钱包价值10705。明显小于24650。所以有些东西显然不起作用。你知道吗

我怎样才能得到它使Strategy2(alpha, beta)最大化?理想情况下,我希望alpha从0到100变化,beta从1到15变化。你知道吗

提前谢谢。你知道吗

编辑:我对上述代码的推理是,我只是试图修改以下工作代码:

import numpy as np
from scipy.optimize import lsq_linear, minimize
bnds = ((None, None), (None, None))
fun = lambda param: np.linalg.norm(-np.exp(param[0]) + param[1])
param_init = -4, 4
param = minimize(fun, param_init, method='SLSQP', bounds=bnds).x

正确地最小化上述功能。你知道吗

如果有更好的方法使我的功能最大化,请告诉我。你知道吗


Tags: 方法importalphanumpynoneparaminitas
1条回答
网友
1楼 · 发布于 2024-04-19 01:44:58

如果您的Strategy2(alpha, beta)返回钱包值,那么您的目标函数f应该被反转。最小化f应该等同于最大化Strategy2(alpha, beta),这在代码中不是这样的。我建议使用:

bnds = ((None, None), (None, None))
param = [0, 0]
f = lambda param: 1 / Strategy2(param[0], param[1])
param_init = 0, 100
param = minimize(f, param_init, method='SLSQP', bounds=bnds).x
print(param)

在这种情况下,如果f最小化,则Strategy2()最大化。 我还建议使用一些界限来限制搜索空间(有利于提高速度和效率)。你知道吗

相关问题 更多 >