【问题标题】:How could constraints be dynamically constructed in gekko?如何在 gekko 中动态构建约束?
【发布时间】:2020-10-26 18:04:08
【问题描述】:

我是 gekko 的新手,想在我的线性规划问题中使用它。

我在单独的字典(my_vars、Cost、Min 和 Max)中有变量名、成本、最小和最大界限,变量名作为它们的键,目标是通过确定满足约束的变量数量来最小化总成本。

我做了如下;

LP = GEKKO(remote=False)
vars = LP.Array(LP.Var, (len(my_vars)))
i=0
for xi in vars:
    xi.lower = Min[list(my_vars)[i]]
    xi.upper = Max[list(my_vars)[i]]
    i += 1

这里我想用变量原名代替xi,有什么办法吗?

它继续;

LP.Minimize(sum(float(Cost[list(my_vars)[i]])*vars[i] for i in range(len(my_vars))))
LP.Equation(sum(vars) == 100)

另外,我在两个 pandas 数据帧文件中有约束的左侧 (LHS)(变量系数)和右侧 (RHS) 数字,并且喜欢使用 for 循环构造方程。

我不知道该怎么做?

【问题讨论】:

    标签: python optimization constants linear-programming gekko


    【解决方案1】:

    这是使用字典值构造问题的一种方法:

    from gekko import GEKKO
    
    # stored as list
    my_vars = ['x1','x2']
    # stored as dictionaries
    Cost = {'x1':100,'x2':125}
    Min = {'x1':0,'x2':0}
    Max = {'x1':70,'x2':40}
    
    LP = GEKKO(remote=False)
    va = LP.Array(LP.Var, (len(my_vars)))  # array
    vd = {}                                # dictionary
    for i,xi in enumerate(my_vars):
        vd[xi] = va[i]
        vd[xi].lower = Min[xi]
        vd[xi].upper = Max[xi]
    
    # Cost function
    LP.Minimize(LP.sum([Cost[xi]*vd[xi] for xi in my_vars])) 
    # Summation as an array
    LP.Equation(LP.sum(va)==100)
    # This also works as a dictionary
    LP.Equation(LP.sum([vd[xi] for xi in my_vars])==100)
    LP.solve(disp=True)
    
    for xi in my_vars:
        print(xi,vd[xi].value[0])
    print ('Cost: ' + str(LP.options.OBJFCNVAL))
    

    这产生了一个解决方案:

    EXIT: Optimal Solution Found.
    
     The solution was found.
    
     The final value of the objective function is  10750.00174236579
     
     ---------------------------------------------------
     Solver         :  IPOPT (v3.12)
     Solution time  :  0.012199999999999996 sec
     Objective      :  10750.00174236579
     Successful solution
     ---------------------------------------------------
     
    
    x1 69.999932174
    x2 30.0000682
    Cost: 10750.001742
    

    这里有几个 efficient linear programming 与 Gekko 一起利用问题稀疏性的例子。

    【讨论】:

    • 感谢您对 gekko 用户的大力支持。
    猜你喜欢
    • 2019-03-31
    • 2021-02-11
    • 2021-06-23
    • 1970-01-01
    • 2012-02-11
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多