python +gurobipy数学建模

python +gurobipy数学建模

简述

最近帮人做了一个混合整数线性规划case,使用了gurobipy优化库。学术版官网可以直接申请licence,三个月有效然后可以继续申请。总比要收费的cplex好点哈哈。但是还是遇到了一些坑,现在把整个问题与解决方案,代码,遇到的坑都记录一下。
对比cplex,gurobipy更适合复现一个优化问题,因为gurobipy不用把优化问题写成矩阵相乘的标准形式而是直接堆公式就行。
比如二次规划,不用写成:

XTQX + A*X的形式而是直接可以循环定义目标函数

然后就是gurobipy必须要求问题是半正定的,如果不是需要增加参数:

m.setParam('nonconvex', 2) # for nonconvex problem
# solve the problem :gurobipy.GurobiError: Objective Q not PSD (diagonal adjustment of 1.0e+00     would be required)

gurobipy 优化模型定义

from gurobipy import * # 导入
# 定义一个模型
m = Model()
#  设定一些参数 求解时长,精度等
m.setParam('nonconvex', 2)
m.setParam('MIPGap', 0.0001)
m.setParam('TimeLimit', 100)
# 定义优化变量
x1 = m.addVar(vtype=GRB.CONTINUOUS, lb=20, ub=30, name="x1")
x2 = m.addVar(vtype=GRB.CONTINUOUS, lb=20, ub=30, name="x2")
# 设定目标函数
m.setObjective(x1 * x2, GRB.MAXIMIZE)# 求最大问题 or 求最小问题
m.update()
# 添加约束 可以在设定目标函数前 或者后都可以
c_x = LinExpr()
c_x -=x1
c_x -=x2
m.addConstr(c_x<=50)
m.update()
# 进行求解
m.write('assign.lp')# 问题打印
m.optimize()
# 结果导出
if m.solCount == 0:
     print("Model is infeasible")
     m.computeIIS()
     m.write("model_iis.ilp")# 出问题无法满足的约束与残差可以打印出来debug
print('optimal value: %d' % obj.getValue())
print('optimal solution:{} {}'.format(x1,x2))
x1_output = x1.x
x2_output = x2.x# 取出变量最优值到python变量里

项目代码链接

总计67个约束20个变量

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值