gurobi之python调用实例_Gurobi+Python例子1

简单的Python示例

本节将通过一个简单的Python示例来工作 说明Gurobi Python接口的使用。 该示例构建 一个模型,优化,和输出最优目标的价值。

我们的示例优化以下模型:

最大化

x

+

y

+

2 z

x

+

2 y

+

3 z

4

x

+

y

1

x,y,z的二进制

Python

from gurobipy import *

try:

# Create a new model

m = Model("mip1")

# Create variables

x = m.addVar(vtype=GRB.BINARY, name="x")

y = m.addVar(vtype=GRB.BINARY, name="y")

z = m.addVar(vtype=GRB.BINARY, name="z")

# Set objective

m.setObjective(x + y + 2 * z, GRB.MAXIMIZE)

# Add constraint: x + 2 y + 3 z <= 4

m.addConstr(x + 2 * y + 3 * z <= 4, "c0")

# Add constraint: x + y >= 1

m.addConstr(x + y >= 1, "c1")

m.optimize()

for v in m.getVars():

print(v.varName, v.x)

print('Obj:', m.objVal)

except GurobiError:

print('Error reported')

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

fromgurobipyimport*

try:

# Create a new model

m=Model("mip1")

# Create variables

x=m.addVar(vtype=GRB.BINARY,name="x")

y=m.addVar(vtype=GRB.BINARY,name="y")

z=m.addVar(vtype=GRB.BINARY,name="z")

# Set objective

m.setObjective(x+y+2*z,GRB.MAXIMIZE)

# Add constraint: x + 2 y + 3 z <= 4

m.addConstr(x+2*y+3*z<=4,"c0")

# Add constraint: x + y >= 1

m.addConstr(x+y>=1,"c1")

m.optimize()

forvinm.getVars():

print(v.varName,v.x)

print('Obj:',m.objVal)

exceptGurobiError:

print('Error reported')

细节部分

Python

from gurobipy import *

1

fromgurobipyimport*

Gurobi Python应用程序应该从这一行开始。

请注意,为了使这个命令成功,Python应用程序 需要知道如何找到Gurobi函数和类。 回忆 你有三个选择。 第一个是使用Python文件 包含在我们的分布。 你会运行这个例子 通过输入gurobi。 蝙蝠mip1.py。 第二个目标是安装Python蟒蛇 分布。 第三步是安装Gurobi到您自己的函数和类 Python安装。

在我们的示例中,第一步是创建一个模型。 Gurobi模型 拥有一个优化问题。 它由一组 变量,一组约束和相关联的属性 (变量范围,目标系数、变量类型的完整性, 约束,约束右边的价值观,等等)。 我们开始 这个例子使用一个空模型对象:

Python

m = Model("mip1")

1

m=Model("mip1")

此函数接受所需的型号名称作为它的参数。

Python

# Create variables

x = m.addVar(vtype=GRB.BINARY, name="x")

y = m.addVar(vtype=GRB.BINARY, name="y")

z = m.addVar(vtype=GRB.BINARY, name="z")

1

2

3

4

# Create variables

x=m.addVar(vtype=GRB.BINARY,name="x")

y=m.addVar(vtype=GRB.BINARY,name="y")

z=m.addVar(vtype=GRB.BINARY,name="z")

变量是通过补充道addVar()方法在模型 对象(或addVars()如果你想添加超过一次)。 一个变量总是关联到一个特定的模型。

Python允许您传递参数位置或名称。 我们已经 通过他们的名字。 每个变量类型(二进制),和 一个名字。 我们使用其他参数的默认值。 请参阅在线帮助(help(Model.addVar)Gurobi Shell)的进一步细节addVar()。

在我们的示例中,下一步是将变量添加到模型中。

下一步是设置的示例中优化 摘要目的:

Python

# Set objective: maximize x + y + 2 z

model.setObjective(x + y + 2 * z, GRB.MAXIMIZE)

1

2

# Set objective: maximize x + y + 2 z

model.setObjective(x+y+2*z,GRB.MAXIMIZE)

这里的目标是建成使用重载操作符。 Python API过载算术运算符允许您构建线性的 和二次表达式涉及Gurobi变量。

第二个参数表示的感觉是最大化。

注意,在这个简单的示例构建在一个单一的目标 声明中使用一个显式的术语列表,项目将更加复杂 通常逐步构建它。 例如:

Python

obj = LinExpr();

obj += x;

obj += y;

obj += 2*z;

model.setObjective(obj, GRB.MAXIMIZE);

1

2

3

4

5

obj=LinExpr();

obj+=x;

obj+=y;

obj+=2*z;

model.setObjective(obj,GRB.MAXIMIZE);

下一步是添加的示例中线性约束。 第一个 添加约束:

Python

# Add constraint: x + 2 y + 3 z <= 4

m.addConstr(x + 2 * y + 3 * z <= 4, "c0")

1

2

# Add constraint: x + 2 y + 3 z <= 4

m.addConstr(x+2*y+3*z<=4,"c0")

与变量、约束总是与特定的关联 模型。 他们是使用创建的addConstr()方法 模型对象。

我们再次使用重载的算术运算符来构建线性的 表达式。 比较运算符也超载 容易建立约束。

第二个参数addConstr给出了(可选) 约束的名字。

再一次,这个简单示例构建线性的表达式 约束在一个声明中使用一个显式的术语列表。 更复杂的程序通常会建立表达式 增量。

第二个约束以类似的方式创建:

Python

# Add constraint: x + y >= 1

m.addConstr(x + y >= 1, "c1")

1

2

# Add constraint: x + y >= 1

m.addConstr(x+y>=1,"c1")

现在模型已经建立,下一步是优化:

Python

# Optimize model

m.optimize()

1

2

# Optimize model

m.optimize()

这个例程执行优化和填充一些内部 模型属性(包括优化的状态 解决方案,等等)。

优化完成后,我们可以查询的值 属性。 特别是,我们可以查询varName和x变量属性获取名称和值为每个解决方案 变量:

Python

for v in m.getVars():

print(v.varName, v.x)

1

2

forvinm.getVars():

print(v.varName,v.x)

我们也可以查询objVal属性模型 获取当前的客观价值解决方案:

Python

print('Obj:', m.objVal)

1

print('Obj:',m.objVal)

所有模型的名称和类型、变量和约束属性 可以在网上找到Python文档。 类型help(GRB.Attr)Gurobi壳的细节。

中的错误Gurobi Python接口是通过Python 异常机制。 在这个例子中,所有Gurobi语句 封闭在一个try块,和任何相关的错误 抓到的except块。

当您运行这个示例gurobi。 蝙蝠mip1.py, 你应该可以看到如下输出:

Python

Optimize a model with 2 rows, 3 columns and 5 nonzeros

Presolve removed 2 rows and 3 columns

Presolve time: 0.00s

Explored 0 nodes (0 simplex iterations) in 0.00 seconds

Thread count was 1 (of 4 available processors)

Optimal solution found (tolerance 1.00e-04)

Best objective 3.000000000000e+00, best bound 3.000000000000e+00, gap 0.0%

x 1.0

y 0.0

z 1.0

Obj: 3.0

1

2

3

4

5

6

7

8

9

10

11

12

13

Optimizeamodelwith2rows,3columnsand5nonzeros

Presolveremoved2rowsand3columns

Presolvetime:0.00s

Explored0nodes(0simplexiterations)in0.00seconds

Threadcountwas1(of4availableprocessors)

Optimalsolutionfound(tolerance1.00e-04)

Bestobjective3.000000000000e+00,bestbound3.000000000000e+00,gap0.0%

x1.0

y0.0

z1.0

Obj:3.0

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值