相关知识点

LP线性规划问题

  • Linear Problem
  • [百度百科]:研究线性约束条件下线性目标函数的极值问题的数学理论和方法。

    学过运筹学的小伙伴,可以看这个LP问题的标准型来回顾一下:



    不太熟悉的朋友可以看这个例题,再结合上面的标准型,来感受一下:

MIP混合整数规划

  • Mixed Integar Planing
  • 混合整数规划是LP的一种,决策变量部分是整数,不要求全部都是整数的规划问题。
  • 这里MIP的求解器是使用CBC(Corn-or Branch and Cut)
  • CBC (COIN-OR Branch and Cut) is an open-source mixed integer programming solver working with the COIN-OR LP solver CLP and the COIN-OR Cut generator library Cgl. The code has been written primarily by John J. Forrest. 更多详情看这里,但是笔者认为没啥必要。

MIP的Python实现(Ortool库)

我们来看一道简单的例题:



其中x,y都是整数

from ortools.linear_solver import pywraplp
# 首先,调用CBC求解器
# 整数规划使用pywraplp.Solver.GLOP_LINEAR_PROGRAMMING
solver = pywraplp.Solver('SolveIntegerProblem',
pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING) # 定义x和y的定义域,这里是从0到正无穷
x = solver.IntVar(0.0, solver.infinity(), 'x')
y = solver.IntVar(0.0, solver.infinity(), 'y')
# 添加约束:x+7y<17.5
constraint1 = solver.Constraint(-solver.infinity(), 17.5)
constraint1.SetCoefficient(x, 1)
constraint1.SetCoefficient(y, 7)
# 添加约束:x <= 3.5
constraint2 = solver.Constraint(-solver.infinity(), 3.5)
constraint2.SetCoefficient(x, 1)
constraint2.SetCoefficient(y, 0)
# 定义目标函数: Maximize x + 10 * y
bjective = solver.Objective()
objective.SetCoefficient(x, 1)
objective.SetCoefficient(y, 10)
objective.SetMaximization()
# 获取问题的答案
result_status = solver.Solve()
# 判断结果是否是最优解
assert result_status == pywraplp.Solver.OPTIMAL
# 验证一下结果是否正确,这一步不是必要但是推荐加上
assert solver.VerifySolution(1e-7, True)
# 输出结果
print('Number of variables =', solver.NumVariables())
print('Number of constraints =', solver.NumConstraints())
print('Optimal objective value = %d' % solver.Objective().Value())
variable_list = [x, y]
for variable in variable_list:
print('%s = %d' % (variable.name(), variable.solution_value()))

可以看一下自己运行的结果:

assert

这里涉及python 的一个assert的语法,不懂得可以简单看一下:

Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。

断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况,

MIP的Python实现(docplex库)

混合整数规划MIP/线性规划LP+python(docplex库)实现 附代码

参考:

1.assert

2.ortools

【Python代码】混合整数规划MIP/线性规划LP+python(ortool库)实现的更多相关文章

  1. 批处理与python代码混合编程的实现方法

    批处理可以很方便地和其它各种语言混合编程,除了好玩,还有相当的实用价值, 比如windows版的ruby gem包管理器就是运用了批处理和ruby的混合编写, bathome出品的命令工具包管理器bc ...

  2. ubuntu 16.04 上使用pybind11进行C++和Python代码相互调用 | Interfacing C++ and Python with pybind11 on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/a41adc1/,欢迎阅读! Interfacing C++ and Python with pybind11 on ubuntu ...

  3. windows 10 上使用pybind11进行C++和Python代码相互调用 | Interfacing C++ and Python with pybind11 on windows 10

    本文首发于个人博客https://kezunlin.me/post/8b9c051d/,欢迎阅读! Interfacing C++ and Python with pybind11 on window ...

  4. 【python代码】 最大流问题+最小花费问题+python(ortool库)实现

    目录 基本概念 图 邻接矩阵 最大流问题 python解决最大流问题 python解决最大流最小费用问题 基本概念 图 定义: 图G(V,E)是指一个二元组(V(G),E(G)),其中: V(G)={ ...

  5. python代码风格指南:pep8 中文版

    本文档所提供的编码规范,适用于主要的Python发行版中组成标准库的Python代码.请参阅PEP关于Python的C实现的C编码风格指南的描述. 本文档和PEP257(文档字符串规范)改编自Guid ...

  6. Python代码统计工具

    目录 Python代码统计工具 声明 一. 问题提出 二. 代码实现 三. 效果验证 Python代码统计工具 标签: Python 代码统计 声明 本文将对<Python实现C代码统计工具(一 ...

  7. 翻译文章“AST 模块:用 Python 修改 Python 代码”---!!注意ironpathyon未实现此功能

    https://github.com/upsuper/blog/commit/0214fdd084c4adf2de2ed9912d644fb59ce13a1c +Title: [翻译] AST 模块: ...

  8. Python代码分析工具之dis模块

    转自:http://hi.baidu.com/tinyweb/item/923d012e8146d00872863ec0  ,格式调整过. 代码分析不是一个新的话题,代码分析重要性的判断比较主观,不同 ...

  9. Python代码缩进与测试模块

    一.Python代码缩进 Python 函数没有明显的  begin 和  end ,没有标明函数的开始和结束的花括号.唯一的分隔符是一个冒号 ( : ),接着代码本身是缩进的. 例如:缩进  bui ...

随机推荐

  1. 详解PHP中instanceof关键字及instanceof关键字有什么作用

    来源:https://www.jb51.net/article/74409.htm PHP5的另一个新成员是instdnceof关键字.使用这个关键字可以确定一个对象是类的实例.类的子类,还是实现了某 ...

  2. Docker数据管理(一)

    数据卷挂载 在生产环境中,需要对数据进行持久化,冗余化,或者在需要在多个容器之间进行数据共享 数据卷:容器内数据直接映射到本地主机环境 数据卷容器:使同特定容器维护数据卷 -v 进行映射 1.在容器内 ...

  3. c++库 c语言接口

    //code in add.cxx #include "add.h" int sample::method() { cout<<"method is call ...

  4. Android | 教你如何使用HwCameraKit接入相机人像模式

    目录 介绍 简介 关于本次CodeLab 你将建立什么 你会学到什么 你需要什么 申请Camera相关权限 集成HwCameraKit开放能力 步骤1 模式创建:获取CameraKit实例,创建人像模 ...

  5. 【批处理】TXT文件批量转HTML文件工具

    说到批量转html文件,相信喜欢看小说或经常制作电子书和教程的朋友应该很熟悉.因为,我们每次都会面临成千上万的txt文件,要将其转换为能正确显示的html文件是很麻烦的.当然,现在有很多的软件也可以实 ...

  6. 信息竞赛进阶指南--Tire树

    // 假设字符串由小写字母构成 int trie[SIZE][26], tot = 1; // Trie的插入 void insert(char* str) { int len = strlen(st ...

  7. VS Code 全部快捷键一览表(巨TM全)

    常用 General 按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Quick O ...

  8. 一个简单的wed服务器SHTTPD(7)———— SHTTPD内容类型的实现

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  9. Vxlan L3

    拓扑图: CE1 <CE1>display current-configuration !Software Version V800R013C00SPC560B560 !Last conf ...

  10. js怎么删除数组元素,有哪些删除元素方法

    JavaScript删除元素方法 1.根据索引删除数组元素 delete 数组[索引]   *注意delete 后面是空格 var arr1=["aa","bb" ...