Gurobi使用教程

1.Gurobi使用的一般框架

from gurobipy import *
try:
m=Model('modelname') except GurobiError:
print('Error reported')

2.Gurobi读取数据求解

假设给定三个文件,分别是categories.txt,foodcost.txt以及nutritionvalues.txt,分别存放每天营养摄取的上限和下限,每种食物的价格以及每种食物所含的营养成分,其中categories.txt中的数据如下(注意文件最后有换行):

calories 1800 2200
protein 91 1.00E+100
fat 0 65
sodium 0 1779

读取该文件的代码如下:

file = open("./categories.txt","r")   #设置文件对象
nutrition=[]
maxNut={}
minNut={}
for line in file.readlines(): #依次读取每行
line = line.strip('') #去掉每行头尾空白
line = line[:-1] #去掉换行符,也可以不去,这样最后一个数据要求也要换行
str1=line.split(" ")[0]
nutrition.append(str1)
str2=line.split(" ")[1]
minNut[str1]=float(str2)
str3=line.split(" ")[2]
maxNut[str1]=float(str3) print(nutrition)
print(minNut)
print(maxNut)
print(minNut['fat'])
[print(minNut[x]) for x in nutrition]
file.close()

foodcost.txt中的数据如下(文件最后有换行):

hamburger 2.49
chicken 2.89
hotdog 1.50
fries 1.89
macaroni 2.09
pizza 1.99
salad 2.49
milk 0.89
icecream 1.59

读取该文件的代码如下:

file = open("./foodcost.txt","r")   #设置文件对象
food=[]
cost={}
for line in file.readlines(): #依次读取每行
line = line.strip('') #去掉每行头尾空白
line = line[:-1] #去掉换行符,也可以不去,这样最后一个数据要求也要换行
print("读取的数据为: %s" % (line))
str1=line.split(" ")[0]
food.append(str1)
str2=line.split(" ")[1]
cost[str1]=float(str2)
print(cost)
file.close()

nutritionvalues.txt中的数据如下(文件最后有换行)

410
420
560
380
320
320
320
100
330
24
32
20
4
12
15
31
8
8
26
10
32
19
10
12
12
2.5
10
730
1190
1800
270
930
820
1230
125
180

读取该文件的代码如下:

file = open("./nutritionvalues.txt","r")   #设置文件对象
nutritionval=[]
food=['hamburger','chicken','hotdog','fries','macaroni','pizza','salad','milk','icecream']
for line in file.readlines(): #依次读取每行
line = line.strip('') #去掉每行头尾空白
line = line[:-1] #去掉换行符,也可以不去,这样最后一个数据要求也要换行
print("读取的数据为: %s" % (line))
str1=line.split(" ")[0]
nutritionval.append(str1)
print(nutritionval)
nutritionvalue={}
i=0
for x in nutrition:
for y in food:
nutritionvalue[y,x]=float(nutritionval[i])
i=i+1
print(nutritionvalue[y,x])
for x in food:
for y in nutrition:
print(nutritionvalue[x,y])
file.close()

因此最后程序为

from gurobipy import *
import numpy as np
file = open("./categories.txt","r") #设置文件对象
nutrition=[]
maxNut={}
minNut={}
for line in file.readlines(): #依次读取每行
line = line.strip('') #去掉每行头尾空白
line = line[:-1] #去掉换行符,也可以不去,这样最后一个数据要求也要换行
str1=line.split(" ")[0]
nutrition.append(str1)
str2=line.split(" ")[1]
minNut[str1]=float(str2)
str3=line.split(" ")[2]
maxNut[str1]=float(str3) file.close() file = open("./foodcost.txt","r") #设置文件对象
food=[]
cost={}
for line in file.readlines(): #依次读取每行
line = line.strip('') #去掉每行头尾空白
line = line[:-1] #去掉换行符,也可以不去,这样最后一个数据要求也要换行
str1=line.split(" ")[0]
food.append(str1)
str2=line.split(" ")[1]
cost[str1]=float(str2) file.close() file = open("./nutritionvalues.txt","r") #设置文件对象 nutritionval=[]
food=['hamburger','chicken','hotdog','fries','macaroni','pizza','salad','milk','icecream']
for line in file.readlines(): #依次读取每行
line = line.strip('') #去掉每行头尾空白
line = line[:-1] #去掉换行符,也可以不去,这样最后一个数据要求也要换行
str1=line.split(" ")[0]
nutritionval.append(str1) nutritionvalue={}
i=0
for x in nutrition:
for y in food:
nutritionvalue[y,x]=float(nutritionval[i])
i=i+1 file.close() def printSolution():
if m.status == GRB.Status.OPTIMAL:
print('\nCost: %g' % m.objVal)
print('\nBuy:')
buyx = m.getAttr('x', buy)
for f in food:
if buy[f].x > 0.0001:
print('%s%g' % (f, buyx[f]))
else:
print('No solution') try:
m=Model('modelname')
buy=m.addVars(food,name="buy")
m.setObjective(buy.prod(cost),GRB.MINIMIZE)
m.addConstrs(
(quicksum(nutritionvalue[f,c]*buy[f] for f in food)==
[minNut[c],maxNut[c]]
for c in nutrition),"_"
)
m.write("diet.lp")#写入lp文件
m.optimize()
printSolution()
except GurobiError:
print('Error reported')

Python3+Gurobi使用教程(一)的更多相关文章

  1. Python3.x爬虫教程:爬网页、爬图片、自己主动登录

    林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 摘要:本文将使用Python3.4爬网页.爬图片.自己主动登录.并对HTTP协议做了一个简单 ...

  2. [教程]Tensorflow + win10 + CPU + Python3.6+ 安装教程

    由于各种原因,清华镜像源已经彻底挂掉了,但是目前网上的各种教程基本上都是采取设置清华镜像源来加快下载速度,所以这给小白带来了很大的困扰!这里我将通过合理上网工具来直接下载源镜像. 注意:本次教程适用于 ...

  3. python3 字符串str 教程

    字符串可以用单引号或双引号来创建. Python 不支持单字符类型,单字符也在Python也是作为一个字符串使用. 例: var1 = 'Hello World!' var2 = "Pyth ...

  4. python3操作mysql教程

    一.下载\安装\配置 1. python3 Python3下载网址:http://www.python.org/getit/ 当前最新版本是python3.2,下载地址是 http://www.pyt ...

  5. 18年selenium3+python3+unittest自动化测试教程(下)

    第六章 自动化测试进阶实战篇幅 1.自动化测试实战进阶之网页单选性别资料实战 简介:讲解使用selenium修改input输入框和单选框 2.自动化测试之页面常见弹窗处理 简介:讲解使用seleniu ...

  6. 18年selenium3+python3+unittest自动化测试教程(上)

    第一章 自动化测试课程介绍和课程大纲 1.自动化测试课程介绍 简介:讲解什么是自动化测试和课程大纲讲解,课程需要的基础和学后的水平 python3.7+selenium3 pycharm 第二章自动化 ...

  7. Python3.x安装教程及环境变量配置

    python3.x安装 1.直接到官网https://www.python.org/下载,安装就可以了. 2.安装比较简单,点exe文件一直下一步就可以了(注意:安装的时候有个选择是否添加环境变量,这 ...

  8. python3快速入门教程错误和异常

    Python 中(至少)有两种错误:语法错误(syntax errors)和异常(exceptions). 语法错误 语法错误又称作解析错误: >>> while True prin ...

  9. 安装python3的详细教程

    环境:CentOS 7 1. 安装依赖环境 # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-dev ...

随机推荐

  1. CF1012B Chemical table 构造_思维_并查集

    我们可以将横坐标和纵坐标看成是点.发现这些点之间是有传递性的. 题中说明,如果有矩阵中三个顶点被选,则底角的点也会被覆盖,发现这些点之间是有传递性的.那么我们最终达到的目的就是使整个图中只有 111 ...

  2. NuSOAP笔记:如何创建复杂数据类型

    PHP已经有了内置的SOAP扩展,但是它不具备自动生成WSDL的能力,所以很多时候,NuSOAP还是有一定诱惑力的. 在应用稍微复杂点的时候,单靠integer, string等简单数据类型是不能满足 ...

  3. 普通页面使用vue.js心得

    在写本文之前要问自己几个问题,来说明为什么要这么做: 为什么在html中使用vue.js? vue.js已经趋于成熟,个人感觉比jquery要好用的多,但是在node环境下使用vue.js不用使用SS ...

  4. [Codeforces 115E]Linear Kingdom Races

    题目大意: 有n块地,初始是荒地.你可以把某些荒地开垦(需要花费相应的价值\(a_i\)(正整数)),然后这些荒地就可以种田. 现在有m年,每年要在l到r区间内种田,获得p(正整数)的价值(必须保证l ...

  5. windows下的ubuntu

    办公用Windows确实方便,但对于开发和学习还是用Linux比较好. 在Windows下安装Linux子系统 windows10中推出了Linux子系统,这个功能对开发和学习来说真的很好,非常方便. ...

  6. WPF利用radiobutton制作菜单按钮

    原文:WPF利用radiobutton制作菜单按钮 版权声明:欢迎转载.转载请注明出处,谢谢 https://blog.csdn.net/wzcool273509239/article/details ...

  7. OO第一单元总结__多项式求导问题

    作业一.含幂函数的简单多项式的求导 (1)基于度量的程序结构分析 1. 统计信息图: 2. 结构信息图: 3. 复杂度分析 基本复杂度(Essential Complexity (ev(G)).模块设 ...

  8. 【HDU 6299】Balanced Sequence

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 我们贪心地把每一个括号序列能匹配都按照栈的规则都匹配出来. (直接递增匹配对数*2就可以了 最后栈里面就只剩下类似))))((((( ...

  9. 【henuacm2016级暑期训练-动态规划专题 B】Coloring Trees

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] f[i][j][k]前i个位置,第i个位置放j这个颜色,然后形成了k个联通块的最小花费 分第i个位置有没有已经放颜色两种情况考虑. ...

  10. css3特效第二篇--行走的线条&&置顶导航栏

    一.行走的线条. 效果图(加载可能会慢一点儿,请稍等...): html代码: <div class="movingLines"> <img src=" ...