gpt4 book ai didi

optimization - Gekko 不可行解,应满足 cotraint

转载 作者:行者123 更新时间:2023-12-03 19:13:29 25 4
gpt4 key购买 nike

我是 gekko 和 APM 的新手,我正在尝试解决一个问题,但该解决方案似乎在一个应该可行的二元变量中的新方程中变得不可行。这是简化的 APM 模型:

Model
Variables
int_v1 = 0, >= 0
int_v2 = 0, <= 1, >= 0
v3 = 0
v4 = 0
v5 = 0
v6 = 0
End Variables
Equations
(0+int_v1)>=100
v3=((3.15)*(int_v1))
v4>=((int_v2)*(300))
v5=(0+((int_v1)*(3.15)))
minimize v6
End Equations
Connections
v3 = sum_1.x[1]
v4 = sum_1.y
v5 = sum_2.x[1]
v6 = sum_2.y
End Connections
Objects
sum_1 = sum(1)
sum_2 = sum(1)
End Objects
End Model

http://apmonitor.com/online/view_pass.php中解决这个问题将给出一个 int_v2 = 1 的解决方案。但是如果我在 v4 之后添加以下等式到问题中,它说没有找到解决方案:
(((1-int_v2))*(v4))=0

我查看了不可行性文件,但云没有捕获问题。由于上述解决方案给出 int_v2 = 1,那么当 0 = 0 时,此等式应始终为真。感谢任何指导。

最佳答案

附加方程增加了一个难以解决的平稳点(例如 x*y=0)。对于您的优化问题,求解器 APOPT 和 IPOPT 都错误地报告问题不可行。但是,BPOPT 求解器能够解决 NLP 问题,但不一定使用整数解。您从 Gekko 问题发布了 APM 文件。这是您在 Gekko 中的问题(没有附加方程):

from gekko import GEKKO

m = GEKKO(remote=False)
v1 = m.Var(0,lb=0,integer=True)
v2 = m.Var(0,lb=0,ub=1,integer=True)
v3 = m.Var(0); v5 = m.Var(0)
v4 = m.sum([v3]); v6 = m.sum([v5])

m.Equation(v1>=100)
m.Equation(v3==3.15*v1)
m.Equation(v4>=v2*300)
m.Equation(v5==v1*3.15)
m.Minimize(v6)

这里有两种方法: 1. 用 BPOPT 初始化然后切换到 APOPT对于整数解和 2. 不使用附加方程求解,然后将其添加并再次求解。
  • 使用 BPOPT用 NLP 初始化,用 APOPT 解决 MINLP

  • from gekko import GEKKO

    m = GEKKO(remote=False)
    v1 = m.Var(0,lb=0,integer=True)
    v2 = m.Var(0,lb=0,ub=1,integer=True)
    v3 = m.Var(0); v5 = m.Var(0)
    v4 = m.sum([v3]); v6 = m.sum([v5])

    m.Equation(v1>=100)
    m.Equation(v3==3.15*v1)
    m.Equation(v4>=v2*300)
    m.Equation(v5==v1*3.15)
    m.Minimize(v6)

    m.Equation((1-v2)*v4==0)

    m.options.SOLVER=2 # solve with BPOPT
    m.solve()

    m.options.SOLVER=1 # solve with APOPT
    m.solve()
  • 无等式初始化

  • from gekko import GEKKO

    m = GEKKO(remote=False)
    v1 = m.Var(0,lb=0,integer=True)
    v2 = m.Var(0,lb=0,ub=1,integer=True)
    v3 = m.Var(0); v5 = m.Var(0)
    v4 = m.sum([v3]); v6 = m.sum([v5])

    m.Equation(v1>=100)
    m.Equation(v3==3.15*v1)
    m.Equation(v4>=v2*300)
    m.Equation(v5==v1*3.15)
    m.Minimize(v6)

    # solve without equation
    m.options.SOLVER=1
    m.solve()

    # add infeasible equation and solve
    m.Equation((1-v2)*v4==0)
    m.solve()

    您可以打开运行文件夹以查看 APM 文件与您问题中的文件相似。

    # open folder to view apm file
    # or optionally the infeasibilities.txt file
    m.open_folder()

    关于optimization - Gekko 不可行解,应满足 cotraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61408010/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com