Gurobi快速入门
优化代码示例:https://www.gurobi.com/documentation/10.0/examples/python_examples.html
Gurobi中国:http://www.gurobi.cn/pic.asp
一. 安装问题
1.1 C++ / Xcode 调用 Gurobi
在官网下载安装包:可以安装完整版,包括 C++ / Python 等库文件,具体教程可以网上查阅。
我推荐使用 Python 来调用 Gurobi 接口,因为这样配置起来没那么麻烦。
下面总结使用 C++ / Xcode 编译器中导入 Gurobi 库的一些问题:
第一步,需要确定 Gurobi 的安装路径,并进入build目录,我的是/Library/gurobi1002/macos_universal2/src/build
。然后进入终端,执行make
命令,得到libgurobi_c++.a
文件,将其移动到/Library/gurobi1002/macos_universal2/lib
中。
第二步,新建 Xcode 项目,然后按照下图先配置头文件:
这里补充一个小知识:include<> 是只从 Header Search Paths 中搜索。而 include"" 则能从 Header Search Paths 和 User Header Search Paths中搜索(优先搜索当前目录下)。
第三步(很重要)是添加运行库链接文件(在/Library/gurobi1002/macos_universal2/lib
目录下),如下图所示:
如果配置不对,会出现 Undefined symbol 等报错信息!
代码里一定要try-catch,基本框架如下:
1 |
|
二. 使用入门
2.1 什么是Gurobi
Gurobi是目前数学规划(线性和凸二次规划)优化器性能领袖、性价比领袖。国内应用涵盖航空运输、电力、制造、传媒管理、生物医药、通讯和金融等领域。
其学术版本是免费的,需要提交一份 申请表 和 在线学籍验证报告 。
它可以用于求解:大规模线性问题、二次型目标问题、混合整数线性和二次型问题。
提供方便的接口,支持 C++ / Java / Python / .Net / Matlab / R 以及多种平台。
下面以 Python 语言为例。
2.2 建模过程
Problem Instance:待优化问题
Model Generator:将数据组合成模型,产生计算机模型对象
Model Instance:存在内存中的一个完整数学模型
Gurobi Optimizer:优化求解
Solution Retrieval:根据需要读取优化结果
Analysis:对结果进行分析
上面步骤循环往复,直到获取满意结果。
2.3 建模举例
2.3.1 例子1:简单的目标与约束函数
1 | max x + y + 2z |
代码如下:
1 | #!/usr/bin/env python3 |
2.3.2 例子2:营养配方模型
人体需要四种营养:calories / protein / fat / sodium
食物来源:hamburger / chicken / hot dog / fries / macaroni / pizza / salad / milk / ice cream
注意:
1.营养吸收每天有上限与下限
1 | import gurobipy as gp |
2.单位重量食物价格、营养成分均不同
1 | # STEP: 定义价格 |
求达到足够营养花费的代价最小。
1 | # STEP: 创建模型 |
最后创建打印函数,并执行:
1 | def printSolution(): |
问题很好理解,但是涉及到代码需要一段时间熟悉,特别是Gurobi里的函数有特定的用法。