python - scipy.optimize.minimize 在小数点后更改值
问题描述
这是我的优化代码。
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. ]
最后优化以这个错误结束:
status 6
message Singular matrix C in LSQ subproblem
我认为问题是微小的差异。是否有可能告诉 SLSQP 算法仅尝试更改前两位小数或更高位?
亲切的问候
编辑:我找到了一个选项,但它不能解决我的问题。scipy.optimize.minimize 的新调用:
solution = minimize(rootfunc,initialGuess,method='SLSQP',\
bounds=bnds,constraints=con2,options={'eps':1,'disp':True})
解决方案
那些“微小的步骤”不是求解器在每次迭代中选择的值,它们来自有限差分。像这样的基于梯度的求解器需要梯度。由于您没有将梯度作为函数提供,因此默认情况下会以有限差分为您计算梯度。正如错误所述,您的真正问题很可能是奇异矩阵。
推荐阅读
- r - 有没有一种 CSS 方法来减少文本和水平线之间的距离?
- java - 激活时在 AEM 中的 OSGi 服务组件中获取当前域名
- reactjs - VS Code 认为缺少结束标签 - 但所有标签都在那里
- r - 生成两个有条件的随机数序列
- javascript - react-native 纸质按钮矢量图标向右浮动
- sql - 使用 VBA 执行 .SQL 文件
- session - 如何恢复 Firefox 而不是最后的“恢复上一个会话”页面
- python - 如何制作具有一多值特征的机器学习模型
- c++ - 数数到第 n 个楼梯的方式(顺序无关紧要)
- neo4j - 如何在neo4j中找到特定标签的单个节点与不同标签中的所有其他节点之间的不同节点的计数?