python - 使用 scipy 最大化函数
问题描述
我想优化我的函数Strategy2(alpha, beta)
,它对一些数据执行下注策略,从钱包值20,000开始,并返回一个新的钱包值。
所以我需要找到最大化返回值的最佳alpha
&beta
值。
一个快速的谷歌建议 scipy 是要走的路,但我正在努力实现它。
在尝试这种优化方法之前,我采用了固定 alpha 的方法,然后找到最佳 beta,然后对固定 beta 做同样的事情并找到最佳 alpha。
该方法给出了一个最佳值,Strategy2(23,3)
其中返回24,650。
这是我尝试实现模块 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.]
最终钱包值为 10,705。这显然小于24,650。所以有些东西显然不起作用。
我怎样才能得到它,所以我最大化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
正确地最小化上述功能。
如果有更好的方法来最大化我的功能,请告诉我。
解决方案
如果您Strategy2(alpha, beta)
返回钱包值,那么您的目标函数f
应该被反转。Minimizingf
应该等同于 maximizing 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()
最大化。我还建议使用一些界限来限制您的搜索空间(有利于速度和效率)。
推荐阅读
- r - 可变长度不同(为 'chemdate' 找到)
- c# - 无法在构造函数中执行按钮单击
- excel - Why do I get a 1004 error when adding a key using SortFields.Add2?
- c# - Tryparse 不会仅将日期时间转换为日期
- sql - 消息:语法错误,意外的 '(',期望标识符 (T_STRING) 或变量 (T_VARIABLE) 或 '{' 或 '$'
- python - 查找表示为列表的边
- laravel - 我是多对多关系,获取数据透视表的ID
- kubernetes - kubernetes kubectl 中的生成器是什么?
- sql - 如何在 Oracle sql 中检索所有父行和子行人口?
- mysql - 如何在 Laravel 中获得相同 id 值的总和?