scipy优化trust-constr违背的线性约束

问题描述

我试图将scipy.optimize.minimize与方法trust-constr一起使用以优化8个变量的函数。不幸的是,该功能过于复杂,无法在此处完整发布。它涉及大约1000个词,每个词都包含一个整数。但这是我摘录的摘录,表明它不能按预期工作。

def objective(variables):
    starts_neg=variables[0]
    starts_neu=variables[1]
    etc
    return _____

(这是导致问题的两个变量)

定义了目标函数之后,我需要定义约束。有12个约束条件涉及8个变量。但我只展示那些涉及违规变量的变量。

constraint_matrix=[[0 for j in range(8)] for i in range(12)]
constraint_matrix[0][0]=1
constraint_matrix[1][1]=1
constraint_matrix[2][0]=1
constraint_matrix[2][1]=1
etc
lower_bounds=[10**(-12) for i in range(12)]
upper_bounds=[1 for i in range(12)]
prob_constraints=LinearConstraint(constraint_matrix,lower_bounds,upper_bounds,keep_feasible=True)

我的目的是说0

然后我给scipy初始估计值x0 = [估计值,估计值等]

最后,请按以下方式调用优化:

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

不幸的是,这产生了一个nan错误。因此,我尝试将以下内容插入目标函数并再次运行:

if starts_neg<=0 or starts_neg>=1 or starts_neu<=0 or starts_neu>=1 or starts_neu+starts_neg>=1:
    print(starts_neg,starts_neu)

此命令在nan错误和追溯之前输出-0.02436406136453448 0.7588112085953852,这似乎太大了,无法通过舍入错误解释。不,这不是初始估计值x0;我也检查过。

尽管我设置了keep_feasible=True,但显然scipy违反了我的约束之一。我设置错了吗?抱歉,该功能太长,无法完整包含。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)