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

标签 optimization gekko

我是 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/

    相关文章:

    java:我怎样才能减少if(method1()&&method2()....&&method25())?

    c++ - 随机数数组的优化提示

    python - 如何通过取 3 个网格点编写炉子质量平衡方程的 Python 代码?我需要绘制密度剖面图

    Python:GEKKO 的快速替代品,用于求解代数微分方程

    python - 使用 GEKKO 在 ODE 系统中进行参数估计

    c - 复制数组的快速方法

    java - 如何在不使用 Set 的情况下有效地从数组中删除重复项

    python - 在 2 个单独的变量中同时获取 Floor Division 和 Remainder

    python - 优化器向未使用的存储系统添加能量

    python-3.x - 优化多元逻辑函数的正确目标函数