微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

线性约束使Scipy最小化试图在nan

如何解决线性约束使Scipy最小化试图在nan

我正在运行我编写的Python代码,其中涉及使用 scipy.optimize.minimize method ='trust-constr'。优化涉及一组线性约束,我使用scipy.optimize.LinearConstraint传递给Python,其中我传递了一个矩阵(变量系数的矩阵)和两个向量(每个约束的上下限)数字。

它运行了三次,每次都使用不同的参数初始值,但是第四次由于NaN而崩溃。经过数小时的搜索,我发现了一个问题:最小化函数(毫不奇怪)涉及多次调用要最小化的函数。一次调用它,进入最小化操作(一定距离起始点x0很久),传递给目标函数的参数之一的值为nan。

我想知道trust-costr如何修改用于评估目标函数的值,以及为什么它可能选择nan作为变量之一的值?

很抱歉,没有可复制的示例。我不确定如何简单地复制此问题。

编辑:这是从致命调用开始的控制台输出,以最小化

result = minimize(objective,x0,method ='trust-constr',constraints = [prob_constraints],options = {'xtol':10 **(-10)})。x

文件“ C:\ Users(我的名字)\ Anaconda3 \ lib \ site-packages \ scipy \ optimize_minimize.py”,最小化,第612行 callback = callback,** options)

文件“ C:\ Users(我的名字)\ Anaconda3 \ lib \ site-packages \ scipy \ optimize_trustregion_constr \ minimize_trustregion_constr.py”,行519,在_minimize_trustregion_constr中 factorization_method)

文件“ C:\ Users(我的名字)\ Anaconda3 \ lib \ site-packages \ scipy \ optimize_trustregion_constr \ tr_interior_point.py”,行329,在tr_interior_point中 factorization_method,trust_lb,trust_ub,subprob.scaling)

文件“ C:\ Users(我的名字)\ Anaconda3 \ lib \ site-packages \ scipy \ optimize_trustregion_constr \ equality_constrained_sqp.py”,第121行,在equals_constrained_sqp中 lb_t,ub_t)

projected_cg中的行499,文件“ C:\ Users(我的名字)\ Anaconda3 \ lib \ site-packages \ scipy \ optimize_trustregion_constr \ qp_subproblem.py” r = Z.dot(H.dot(x)+ c)

文件“ C:\ Users(我的名字)\ Anaconda3 \ lib \ site-packages \ scipy \ sparse \ linalg \ interface.py”,行370,点中 返回self.matvec(x)

文件“ C:\ Users(我的名字)\ Anaconda3 \ lib \ site-packages \ scipy \ sparse \ linalg \ interface.py”,在matvec中的第227行 y = self._matvec(x)

文件“ C:\ Users(我的名字)\ Anaconda3 \ lib \ site-packages \ scipy \ sparse \ linalg \ interface.py”,第479行,在_matvec中 返回自我.__ matvec_impl(x)

文件“ C:\ Users(我的名字)\ Anaconda3 \ lib \ site-packages \ scipy \ optimize_trustregion_constr \ projections.py”,第193行,位于null_space中 aux2 = scipy.linalg.solve_triangular(R,aux1,lower = False)

文件“ C:\ Users(我的名字)\ Anaconda3 \ lib \ site-packages \ scipy \ linalg \ basic.py”,行336,在solve_triangular中 b1 = _asarray_validated(b,check_finite = check_finite)

文件“ C:\ Users(我的名字)\ Anaconda3 \ lib \ site-packages \ scipy_lib_util.py”,第239行,_asarray_validated a = toarray(a)

文件“ C:\ Users(我的名字)\ Anaconda3 \ lib \ site-packages \ numpy \ lib \ function_base.py”,行498,在asarray_chkfinite中 “数组不得包含infs或NaN””

ValueError:数组不能包含infs或NaNs

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。