【问题标题】:method: SciPy.optimize方法:SciPy.optimize
【发布时间】:2021-11-16 07:59:34
【问题描述】:

我编写了以下代码来最小化目标,其中变量x1x2x3 介于 0.8-1.2 之间,x1x2x3 的总和是一个数字。

import numpy as np
from scipy.optimize import minimize 


def objective(x):
    x1 = x[0]
    x2 = x[1]
    x3 = x[2]
    return 1/x1 +2/x3+ 0.5/x2

def constraint1(x):
    return 7*x[0]+8*x[1]+4*x[2]-5

x0 = [1,0.8, 1.1]
b = (0.8, 1.2)
bnds = (b,b,b)
con1 = {'type':'eq', 'fun' :constraint1}

solution = minimize(objective, x0, method ='', bounds= bnds, constraints= con1)

print (solution)

我使用了 BFGS 函数,它给了我一个超出 0.8-1.2 范围的数组,而 SLSQP 给了我success=false。我的代码有问题还是我使用了错误的方法?

【问题讨论】:

    标签: python optimization scipy


    【解决方案1】:
    • BFGS 不适用于受限问题
    • 使用 SLSQP 我看到:消息:“超出迭代限制”
    • 增加迭代限制后:消息:'不等式约束不兼容'
    • 这是有道理的。如果变量的下限是 0.8,7*x[0]+8*x[1]+4*x[2]=5 怎么可能? IE。我们提前知道7*x[0]+8*x[1]+4*x[2]>=15.2

    我建议为这种方法提供可行的问题。

    【讨论】:

    • 谢谢 Erwin,是的,我在里面使用了随机数。
    • 随机问题往往是不可行的
    猜你喜欢
    • 2021-04-16
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2018-09-30
    • 2022-01-17
    相关资源
    最近更新 更多