目前,我正在使用scipy库中的盆地跳跃法来找到优化我的目标函数的最优x(其中x由4个因子组成)。当我让它运行几次时,每次运行都会给我不同的结果。有没有办法使结果更一致(即在多次迭代中函数的最小化参数相同)?
cons = [
{
'type': 'eq',
'fun': lambda x: x[0] + x[1] + x[2] - 1
},
{
'type': 'ineq',
'fun': lambda x: (w_0 / prob_death(T)[T-1]) - x[3]
},
{
'type': 'ineq',
'fun': lambda x: x[3] - 10000
}
]
bounds = ( (0, 1), (0, 1), (0, 1), (0, 1'000'000)) )
res = basinhopping(func = utility_expected,
x0 = np.array([0.33, 0.33, 0.33, 50000]),
minimizer_kwargs = {"method": 'SLSQP',
"bounds": bounds,
"constraints": cons,
"options": {
"eps": 0.01,
"ftol": 0.001
}
},
disp = False,
interval = 40,
niter = 250)
答案 0 :(得分:1)
因此,我对scipy的盆地跳跃特别不熟悉,但是如果我没看错,您给它的epsilon为0.01,可用于Jacobian的数值逼近。但是,变量的比例差异很大。 (0-1与0-1000000),这可能会给您带来怪异的行为。考虑将第四个变量缩放为0-1。
此外,对于您要求优化器执行的操作而言,250次迭代确实是一个很小的数目。尝试使其运行更长。