失效链接处理 |
Python-MIP使用文档_v3 PDF 下载
本站整理下载:
链接: https://pan.baidu.com/s/1stmIwsnsq6jsPekjFWkAFg
提取码: fd88
相关截图:
![]() 主要内容:
基础说明:
参考python-mip 1.6.8
在Python中,可以使⽤ pip install mip 来安装相关模块,使⽤ from mip import * 来导⼊
相关模块后使⽤
python-mip属于建模语⾔,求解需要⽤到其他的求解器。⽬前只⽀持cbc和gurobi。
重点说明:
Python-mip⽆法识别pandas和numpy中的int64、flfloat64格式,需要使⽤基础数据格式int、flfloat
Python-mip中 “-”,“/”,“:” ,“[” ,“]” 属于命名中的⾮法字符
⽤cbc求解,不能有重复的constrain name(可能导致⽆法识别),尽量减少重复的约束表达式 ->
可以⽤gurobi去检查重复的名称
1. Python-mip基础应⽤
Python-mip的基础设置与应⽤,能实现基本的建模和求解。
1.1 模型申明1.1 模型申明
⽤Model来申明⼀个模型
模型的申明包括以下⼏部分:
name: 模型的名称
sense: 模型的求解⽬标,默认为 MINIMIZE ,也可以是 MAXIMIZE
solver_name: 使⽤的求解器,默认为 '' ,优先使⽤ gurobi/GRB ,也可以选⽤ cbc ,⼤⼩写不影
响。
solver: 对使⽤的求解器做内部的定义,有默认的设置
1.2 变量申明
变量是在模型的基础上进⾏申明的,使⽤add_var申明单个变量。
⽆法⼀次性声明多个变量,需要⾃⾏放⼊list或者dict中
name: 表示在模型中的名称,默认命名为var(n)
lb: 表示变量的下界,默认为0
ub: 表示变量的上界,不设置即为 INF
obj: 表示在⽬标函数中的系数,⼀般可以统计在设定⽬标函数中加⼊,默认为0
var_type: 表示变量是类型,包括BINARY/'B'(0-1)、INTEGER/'I'(整数)、CONTINUOUS/'C'(连续变
量)。默认为CONTINUOUS
column: 在约束中的系数,默认没有
model_var = Model(name=model_name,
sense=MINIMIZE,
solver_name='cbc',
solver=None)
1
2
3
4
# 单个变量声明
var1 = model_var.add_var()
# 多个变量声明
var2 = {(i, j):model_var.add_var(lb=1, ub=3, var_type=INTEGER, name='v2({},
{})'.format(i, j)) for i in range(4) for j in ['a', 'b', 'c']}
var3 = [model_var.add_var('v3({},{})'.format(i, j), lb=1, ub=3,
var_type=BINARY) for i in range(4) for j in ['a', 'b', 'c']]
1
2
3
4
5
# 表达式声明
expr = LinExpr(variables, coeffs, const, sense)
expr1 = LinExpr(const=0)
expr2 = LinExpr([var1, var2[1]], [1,2])
expr3 = LinExpr([var2[0], var2[1]], [3,2], const=4, sense='<')
1
2
3
4
5variables: 变量的list
coeffffs: 变量的系数的list
若variables存在,则coeffffs必须存在,且⻓度与之相同
const: 常数
sense: 可以是 MINIMIZE/MAXIMIZE ,也可以是 </=/>
若为 </=/> ,可直接作为约束加⼊模型
1.3 约束申明
约束是在模型的基础上进⾏申明的,使⽤add_constr逐⼀申明每个约束.
约束是 LinExpr 类型,关系⽤ ==、<=、>= 之⼀
对于存在sense为 =、<、> 的 LinExpr ,可以直接添加约束
name: 表示约束在模型中的名称
1.4 设置⽬标函数
⽬标函数是在模型的基础上进⾏申明的,通过对.objective进⾏赋值完成
expr: 表示需要优化的⽬标表达式
1.5 模型求解与输出
设置好模型的变量、约束、⽬标函数等后,需要更新模型,并进⾏求解。
.optimize():求解模型。
最⼤值问题会被转化为最⼩值问题,相应的调整⽬标函数中的系数
包含3个基础的参数设置:max_seconds为求解时间,max_nodes为搜索的节点数,
|