赞
踩
download center
Gurobi Optimizer
下载gurobi
可以通过python
进行调用,但是需要先获得gurobi
的lincese
。
academic
但这个激活码需要进行IP
地址的验证。如果学校的网关没有将本校的 IP
地址标注为学术机构,那么会出现 Error 303/305
错误,IP
验证不会成功,学术许可不会激活。是否识别为学术机构与 Gurobi
原厂无关,是学校网络的设置问题。
2. gurobi
中文网
http://www.gurobi.cn/NewsView1.Asp?id=4
在线PDF中填写自己的基本信息并手写签字,之后发邮件到help@gurobi.cn
,实测不到一小时即可审核完毕,获得对应的许可。
grbgetkey
这个序号与计算机硬件捆绑,一旦激活就会失效。运行激活码之后,产生的 gurobi.lic
许可文件保存在以下目录:
Windows
操作系统:把 gurobi.lic
文件放在 c:\gurobi
目录下;Linux
操作系统: 把 gurobi.lic
文件放在 opt/gurobi
目录下;Mac
操作系统: 把 gurobi.lic
放在 /Library/gurobi
目录下;Gurobi
默认搜索位置。如果保存到其他位置,需要创建 GRB_LICENSE_FILE
系统环境变量(不是用户环境变量),指向保存的目录和文件名(例如 GRB_LICENSE_FILE = C:\myfolder\gurobi.lic)
。需要重启电脑使之生效。如果既放置在了上面的默认搜索目录,又设置了 GRB_LICENSE_FILE
系统环境变量指向不同的目录和文件,Gurobi
会以 GRB_LICENSE_FILE
的设置为准。
每台机器上只需要保存一个gurobi.lic
文件。请删除多余只保留一个。高版本产生的许可文件兼容低版本。
我这里放在E盘
之后cmd
进入命令行,cd
进入gurobi
所在的 E:\gurdoi\bin
进行激活。
我下载的最新版gurobi
支持python3.7-python3.11
,
将对应python
的lib/gurobipy
复制到对应python
安装包的site-packages
文件夹。
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)
调用成功!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。