这是我的优化代码。
and
问题是,算法会更改小数点后低位的值。 例如这是我最初的猜测。我已经尝试从float更改为integer,以进行解决。
initialGuess = D.Matrix[:,D.menge]
bnds = D.Matrix[:,(D.mengenMin,D.mengenMax)]
con1 = {'type': 'eq', 'fun': PercentSum}
con2 = {'type': 'eq', 'fun': MinMaxProportion}
cons = ([con1,con2])
solution = minimize(rootfunc,initialGuess,method='SLSQP',\
bounds=bnds,constraints=cons)
优化器的第一次尝试如下所示:
[ 0. 0. 123. 0. 0. 622. 245. 0. 0. 0.]
另一个是这个
[1.49011612e-08 0.00000000e+00 1.23000000e+02 0.00000000e+00
0.00000000e+00 6.22000000e+02 2.45000000e+02 0.00000000e+00
0.00000000e+00 0.00000000e+00]
最后,优化完成并显示以下错误:
[ 0. 0. 123.00000001 0. 0.
622. 245. 0. 0. 0. ]
我认为问题在于微小的差异。是否有可能告诉SLSQP算法仅尝试对前两位小数或更高的小数位进行更改?
亲切的问候
编辑:我找到了一个选项,但是它不能解决我的问题。 scipy.optimize.minimize的新调用:
status 6
message Singular matrix C in LSQ subproblem
答案 0 :(得分:0)
这些“微小步骤”不是求解器在每次迭代中选择的值,它们来自有限差分。像这样的基于梯度的求解器需要梯度。由于您未提供梯度作为函数,因此默认情况下会为您计算出有限的差异。如错误所述,您真正的问题很可能是奇异矩阵。