簡體   English   中英

二次優化方程,其中優化方程使用 Gurobi 求和

[英]Quadratic optimization equation where optimization equation have summation using Gurobi

所以我正在嘗試使用 gurobi 庫優化 python 中的二次方程,我的目標方程中有求和。 求和方程最有可能顯示錯誤,因為它不能接受變量 integer 並且需要常數 integer。有沒有辦法將求和方程放在目標 function 中?

我的代碼是這樣的:

from gurobipy import *
import sympy as sy

op1=sy.Symbol('op1')
op2=sy.Symbol('op2')

# Create a model
quadratic_model = Model('quadratic')

# Define decision variables
n = quadratic_model.addVar(vtype=GRB.INTEGER, lb=0, name='n')
t = quadratic_model.addVar(vtype=GRB.INTEGER, lb=0, name='t')
temp = quadratic_model.addVar(vtype=GRB.INTEGER, lb=0, name='temp')

# Define objective function
obj_fn = (1256*80/12.5)*n*t + 25*5*n*t + sy.summation(5*t*50*(365//n)*op1,(op1,1,n)) + sy.summation(5*24*op2,(op2,1,365))
quadratic_model.setObjective(obj_fn, GRB.MINIMIZE)

# Add constraints
quadratic_model.addConstr(50*n*t >= 4320)
quadratic_model.addConstr(n>=1)
quadratic_model.addConstr(t>=1)
quadratic_model.addConstr(n<=6*30/4)            

# Solve model
quadratic_model.setParam('NonConvex', 2)
quadratic_model.optimize()

# Print results
for v in quadratic_model.getVars():
    print('---------------------------------------')
    print('%s : %g' % (v.varName, v.x)) 

print("minimized solution for the equation is:", quadratic_model.objVal)`

我試圖在優化方程式中運行這段代碼並求和,我嘗試了兩件事,如下所述

  1. 我試圖通過使用變量 temp 並添加 temp == 365//n 的約束來消除 365//n 並且我仍然無法 go par 這個問題。
  2. 也嘗試過使用 for 循環,然后問題變得更加荒謬,因為它顯示錯誤:模塊“gurobipy”沒有屬性“INTEGER”,這沒有意義,因為我之前通過定義變量運行了二次 gurobipy,但沒有遇到這樣的問題
  1. 您不能將 gurobi 與 sympy 混合使用(sympy 不理解 gurobi 變量)。

  2. 第二個求和是一個常數 (7625520)。 您可以將其從目標中刪除。

  3. 第一個求和可以重寫為:

     t*125*floor(365/n)*n*(n+1)

我們可以分塊做

   x1=365/n                      : n*x1=365
   x2=floor(365/n)               : x2 <= x1, x2 >= x1-0.9999, x2 integer
   x3=t*125*floor(365/n)         : x3 = t*125*x2
   x4=t*125*floor(365/n)*n       : x4 = x3*n
   x5=t*125*floor(365/n)*n*(n+1) : x5=x4*(n+1)

注意:我在這里使用了sy.summation(op1,(op1,1,n))=n*(n+1)/2

在使用這個之前檢查我的數學。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM