【发布时间】:2023-01-13 16:57:12
【问题描述】:
所以我正在尝试使用 gurobi 库在 python 中优化我的二次方程,我的目标方程中有求和。求和方程最有可能显示错误,因为它不能接受可变整数而需要常数整数。有什么办法可以将求和方程放在目标函数中吗?
我的代码是这样的:
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)`
我试图在优化方程式中运行这段代码并求和,我尝试了两件事,如下所述
- 我已经尝试通过使用变量 temp 并添加 temp == 365//n 的约束来消除 365//n,但我仍然无法解决这个问题。
- 也尝试过使用 for 循环,然后问题变得更加荒谬,因为它显示错误:模块“gurobipy”没有属性“INTEGER”,这没有意义,因为我之前通过定义变量运行了二次 gurobipy,但没有有这样的问题
【问题讨论】:
标签: python gurobi quadratic-programming