gurobi是由美国Gurobi公司开发的新一代大规模数学规划优化器,在 Decision Tree for Optimization Software 网站举行的第三方优化器评估中,展示出更快的优化速度和精度,成为优化器领域的新翘楚。
通过一个简单的整数规划实例,感受一下gurobi的魅力。

本文中仅仅展示了一个最简单的整数规划实例 . 如果您想进一步了解gurobi的相关操作 , 可以下载

下载链接 简介
经典TSP问题求解 包含了gurobi求解和粒子群算法求解
MDVRP多车场车辆路径规划求解 与论文中的遗传算法求解结果对比
列生成算法求解航班人员调度 包含了问题说明、数据、详细的gurobi列生成算法求解代码
gurobi生产计划调度案例_生产切换 生产调度中的生产切换问题
gurobi生产计划调度案例_装配计划 生产调度中的装配计划问题
gurobi的数值双层规划问题求解 双层规划数值问题求解

均有完整的python代码 . 非常不错的学习资料!

一. 问题描述

题目图片中缺少一个约束条件——每部电影至少放映一次。

二. 建立模型

变量

其中xijkx_{ijk}xijk​为01变量, 表示时段iii在影厅jjj是否放映电影kkk

参数

rateikrate_{ik}rateik​ 为时段iii电影kkk的上座率
alljkall_{jk}alljk​为电影kkk在影厅jjj满座时的收益

约束条件

st.st.st.
约束1: 每部电影至少放映一次
∑i∈I,j∈Jxijk≥1,∀k∈K\sum_{i\in I,j\in J}x_{ijk}\geq 1,\forall k\in K i∈I,j∈J∑​xijk​≥1,∀k∈K
约束2: 每个影厅每个时段只能放映一部电影
∑k∈Kxijk=1,∀i∈I,∀j∈J\sum_{k\in K}x_{ijk}= 1,\forall i\in I,\forall j\in J k∈K∑​xijk​=1,∀i∈I,∀j∈J

目标函数

目标函数: 全天收益最大
max(∑i∈I,j∈J,k∈Kxijk∗rateik∗alljk)max(\sum_{i\in I,j\in J,k\in K}x_{ijk}*rate_{ik}*all_{jk}) max(i∈I,j∈J,k∈K∑​xijk​∗rateik​∗alljk​)

三.代码

from gurobipy import *
# 8部电影
# 7个影厅
# 8个时段
I = list(range(8))  # 时段
J = list(range(7))  # 影厅
K = list(range(8))  # 电影seat_j = [118, 86, 116, 85, 156, 142, 156]
# 一行为一个影厅,一列为一部电影
price_jk = [[60, 60, 65, 60, 65, 90, 60, 65],[65, 65, 85, 75, 60, 75, 85, 80],[60, 70, 75, 80, 75, 80, 80, 75],[65, 65, 80, 75, 80, 75, 75, 80],[60, 65, 65, 60, 75, 80, 80, 75],[60, 65, 65, 80, 75, 75, 80, 75],[60, 60, 75, 80, 75, 70, 60, 75]]
# 一行为一个时段,一列为一部电影
rate_ik = [[0.50, 0.55, 0.45, 0.50, 0.60, 0.46, 0.55, 0.45],[0.42, 0.43, 0.41, 0.43, 0.45, 0.30, 0.53, 0.36],[0.58, 0.63, 0.67, 0.64, 0.70, 0.64, 0.54, 0.57],[0.62, 0.67, 0.70, 0.65, 0.75, 0.64, 0.53, 0.66],[0.65, 0.65, 0.73, 0.68, 0.75, 0.74, 0.67, 0.72],[0.66, 0.69, 0.78, 0.78, 0.78, 0.75, 0.74, 0.70],[0.67, 0.92, 0.87, 0.87, 0.75, 0.59, 0.68, 0.68],[0.67, 0.92, 0.87, 0.87, 0.75, 0.59, 0.68, 0.68]]
# 计算满座的票房二维列表,lt_all
all_jk = [[0 for col in K] for row in J]
for j in J:for k in K:all_jk[j][k] = price_jk[j][k] * seat_j[j]
# 创建模型
m = Model("ass_mov")
# 创建变量.第i个时段在第j个影厅放映第k部电影
x = m.addVars(I, J, K, vtype=GRB.BINARY)
# 更新变量环境
m.update()
# 创建目标函数
m.setObjective(sum(x[i, j, k] * rate_ik[i][k] * all_jk[j][k]for i in I for j in J for k in K),GRB.MAXIMIZE)
# 创建约束条件约束条件
# 每部电影至少放映一次
m.addConstrs(sum(x[i,j,k] for i in I for j in J) >= 1 for k in K)
# 每个时段每个影厅只能放映一部电影
m.addConstrs(sum(x[i,j,k] for k in K) == 1 for i in I for j in J)
# 求解规划模型
m.optimize()# 输出结果
result = [[0 for col in J] for row in I]
solution = m.getAttr('x',x)
# 得到排片矩阵
for k,v in solution.items():if v == 1:result[k[0]][k[1]] = k[2] + 1
# 得到最大收益值
max_get = sum(x[i, j, k].x * rate_ik[i][k] * all_jk[j][k] for i in I for j in J for k in K
)
# 打印最大收益值,和排片矩阵
print('最大收益为:',max_get)
print('最佳排片方法:')
print('\n影厅j|', J)
print('-'*28)
for idx,l in enumerate(result) :print(f'时段{idx}|',l)

四.求解结果

即可得到排片最优解。

gurobi使用系列之一——gurobi+Python的实例使用(简单整数规划)相关推荐

  1. python最简单的爬虫代码,python小实例一简单爬虫

    python新手求助 关于爬虫的简单例子 #coding=utf-8from bs4 import BeautifulSoupwith open('', 'r') as file: fcontent ...

  2. gurobi之python调用实例_Python3+Gurobi使用教程(一)

    Gurobi使用教程 1.Gurobi使用的一般框架 from gurobipy import * try: m=Model('modelname') except GurobiError: prin ...

  3. MacOS安装gurobi申请学术证书+激活+python导入

    MacOS安装gurobi激活+python导入 申请学术证书激活码 解决激活码不能使用的问题 导入python 申请学术证书激活码 进入gurobi官网,官网内每个加载都比较慢,需要耐心等待. 链接 ...

  4. python做平面设计-Python系列干货之——Python与设计模式

    原标题:Python系列干货之--Python与设计模式 一.创建类设计模式 前言: 什么样的程序员是一个好的程序员?学会很多门编程语言,就是一个好的程序员了么?事实上,学会一门编程语言不是一件很难的 ...

  5. Python编程实例03——对英文文本进行分词

    系列目录 上一篇:Python编程实例02--实现斐波那契数列 文章目录 系列目录 前言 一.编程要点 1.split()函数 a.单个分隔符分割 b.多个分割符分割 2.sorted()函数与sor ...

  6. python高级练习题:多米诺平铺 - 5×2N局【难度:4级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python高级练习题:多米诺平铺 - 5×2N局[难度:4级]: 请还检查了在[多米诺拼接系列]其他练习题(https://www.codewars.com/collections/5d19554d ...

  7. Python基础练习题:杂乱无章的页面列表【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    Python基础练习题:杂乱无章的页面列表[难度:1级]: 你得到了一本古老的书,不幸的是有几页错误的位置,幸运的是你的计算机有一个从"1"到"n"的顺序的每个 ...

  8. python系列之:python基础用法

    python系列之:python基础用法 一.定义变量,并打印变量 二.Python字符串和引号用法 三.python注释 四.print输出 五.python标准数据类型 六.Python数字Num ...

  9. 用python实现视频换脸_超简单使用Python换脸实例

    换脸! 这段时间,deepfakes搞得火热,比方说把<射雕英雄传>里的朱茵换成了杨幂,看下面的图!毫无违和感! 其实早在之前,基于AI换脸的技术就得到了应用,比方说<速度与激情7& ...

最新文章

  1. linux配置文件怎么把某行后几个字符替换_vim(Linux运维)
  2. “搞垮” 微博服务器?每天上亿条用户推送是如何做到的
  3. AI时代即将出现的3个热门职业
  4. jaquery ready
  5. windows 系统监视器 以及建议阀值
  6. php里面的耗时操作,PHP执行时间那点事
  7. LWUIT显示中文问题
  8. android国籍组件,android组件化之路
  9. 启动hadoop遇到的datanode启动不了
  10. TikTok是下一个流量蓝海吗?用户规模超抖音?
  11. C语言课程设计之图书管理系统
  12. 深入理解jvm虚拟机一
  13. DWM1000 帧过滤代码实现
  14. Ignite(四)-遇到的问题
  15. tp5 微信新版本商家转到到零钱,v3秘钥,平台证书和平台证书序列号
  16. 802.11 与wifi
  17. 通过本地jedis连接远程服务器上的docker redis
  18. EARTH DATA网站注册走过的坑
  19. 独轮平衡车c语言源码,两轮平衡车STM32源代码
  20. 数字电路课设_电子抢答器

热门文章

  1. python读文件换行符怎么处理_python tips:文件读取——换行符的问题
  2. 鬼谷八荒流派收集(3)一拳超人
  3. 人脸识别与膜虹识别_虹膜识别vs指纹识别vs人脸识别:从三星S8看三者的区别!...
  4. 机器学习算法(一):逻辑回归模型(Logistic Regression, LR)
  5. 太空工程师修改服务器,新手向游戏数据修改(电力部分)
  6. 背水一战 Windows 10 (38) - 控件(布局类): Panel, Canvas, RelativePanel, StackPanel, Grid
  7. 游侠网NCG组织出来了
  8. 国标平台对接成功,预览失败,下级双网域设置错误
  9. python微信投票代码_Python——开发一个自动化微信投票器【附代码实例方法】
  10. 算法——贝塞尔(Bézier)曲线拟合