Python中的线性优化通过编写脚本来解决建模问题

本系列文章将展示如何利用 Pyomo 的能力集成 Python 来建模优化应用程序。本系列的第一篇文章将介绍">基础知识。第 2 部分将介绍如何添加更多工具和构建一种可伸缩的架构。第 3 部分将提供一些使用 IPython 和 pandas 进行投资分析和统计分析的实用示例。

建模是一种解决复杂问题的强大方法。依据图书 Modeling Languages in Mathematical Optimization(参阅 参考资料)的叙述,模型用于:

解释现象 进行预测 评估关键因素 识别极限 分析折衷方法

在业界,Microsoft® Excel 等电子表格软件常常是建模问题的首要选择。现在,电子表格通常非常直观,但它们在解决大型问题上存在着局限性。如果您是开发人员,那么您可能会发现编写脚本来解决建模问题会更有效,因为您可以轻松地将脚本集成到其他系统中。本文将介绍使用 Pyomo 库在 Python 应用中实现线性优化的基础知识。

入门

首先要安装 Pyomo。Pyomo 是 Coopr 的一个中心组件,而 Coopr 是 Python 软件包的集合。您可以下载 coopr_install 脚本,在使用 Python 解释器运行它时,它会创建一个 Python 虚拟环境。

创建一个名为 “coopr” 的相对目录:

noahs-MacBook-Air% python coopr_install

使用下面的命令启动 Pyomo,这会将该相对目录和它的可执行文件放在您的路径中:

noahs-MacBook-Air% source coopr/bin/activate

使用 Pyomo "--help 命令获取使用 pyomo 的帮助:

(coopr)noahs-MacBook-Air% pyomo --help

您需要一个编译器来使用虚拟 Python 环境构建器 (virtualenv) 和 Pyomo。在 OS X 上,使用 XCode Developer Tools 命令行工具。在 Linux 上,使用 GNU Compiler Collection (GCC)。初始化这个虚拟环境后,可通过以下两种方式之一使用 Pyomo 解决问题:

使用 Pyomo 命令行工具: (coopr)noahs-MacBook-Air% pyomo my_problem.py --solver=glpk 或者,将初始化代码嵌入您的脚本中,通过 Python 解释器运行它:

清单 1. 在一个脚本中调用 Pyomo

#This is an optional code path that allows the script to be run outside of#pyomo command-line. For example: python wyndor.pyif __name__ == '__main__': #This replicates what the pyomo command-line tools does from coopr.opt import Solver
Factory opt = SolverFactory("glpk") instance = model.create() results = opt.solve(instance) #sends results to stdout results.write()

Pyomo 假设您至少安装了一个解算器 (solver)。GNU Linear Programming Kit (glpk) 是默认的解算器。请参阅您希望使用的解算器的安装说明。然后确保 Pyomo 能够在它的路径上找到此解算器。

时间: 2024-10-21 13:10:09

Python中的线性优化通过编写脚本来解决建模问题的相关文章

Python中的线性优化,第 2 部分 在云中构建一个可扩展的基础架构

简介 这个由三部分组成的系列文章的第 1 部分介绍了在 Python 中使用 Pyomo 库进行线性优化的 基础知识.现在我们将介绍如何扩展它.Python 缺乏真实的操作系统线程,该如何扩展它?本文将向您介绍 如何组合使用这些技术来创建一个实际的可扩展基础架构,该架构可用于构建一个 Pyomo Web 解决方案.我 们组合使用了一个单线程事件循环.一个 AMQP 服务器和工作线程流程来创建一个模式,利用该模式扩展一个 线性优化系统.该基础架构也适用于 Python 或 Ruby 中的许多通用计

Python中的线性优化:结合使用Pyomo、RabbitMQ和Tornado

本文将向您介绍如何通过将 Pyomo 与 Tornado Web 服务器相结合并使用 RabbitHQ 作为各层之间的消息总线来扩展 Python 线性优化. 这个由三部分组成的系列文章的第 1 部分介绍了在 Python 中使用 Pyomo 库进行线性优化的基础知识.现在我们将介绍如何扩展它.Python 缺乏真实的操作系统线程,该如何扩展它?本文将向您介绍如何组合使用这些技术来创建一个实际的可扩展基础架构,该架构可用于构建一个 Pyomo Web 解决方案.我们组合使用了一个单线程事件循环.

server-python中socket的端口重用。网上的解决方法不行!

问题描述 python中socket的端口重用.网上的解决方法不行! server = socket(AF_INET, SOCK_STREAM) print 'server is ok!' server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) print 'setsockopt is ok!' server.bind(add) print 'bind is ok!' server.listen(10) print 'listen is ok!' 还是会报错

Python中优化NumPy包使用性能的教程_python

NumPy是Python中众多科学软件包的基础.它提供了一个特殊的数据类型ndarray,其在向量计算上做了优化.这个对象是科学数值计算中大多数算法的核心. 相比于原生的Python,利用NumPy数组可以获得显著的性能加速,尤其是当你的计算遵循单指令多数据流(SIMD)范式时.然而,利用NumPy也有可能有意无意地写出未优化的代码. 在这篇文章中,我们将看到一些技巧,这些技巧可以帮助你编写高效的NumPy代码.我们首先看一下如何避免不必要的数组拷贝,以节省时间和内存.因此,我们将需要深入Num

Python编写脚本使IE实现代理上网的教程

  Python编写脚本使IE实现代理上网的教程         这篇文章主要介绍了用Python编写脚本使IE实现代理上网的教程,"著名的"goagent代理也是基于同样原理实现,需要的朋友可以参考下 厂里上个网需要设置代理服务器,切换各种环境『包括但不仅限于开发环境.QA.预上线.验收.生产环境.压力测试.Demo--』都需要给浏览器设置不同的代理服务器. 虽然俺有神器Firefox+Change Host+HostAdmin+Proxy Selector的组合来轻松切换Host,

使用python编写脚本获取手机当前应用apk的信息_python

前提是已设置ANDROID_HOME环境变量,使用aapt工具获取apk的信息,保存至脚本所在目录下的PackageInfo.txt文件中: import os import tempfile import re tempFile = tempfile.gettempdir() def get_aapt(): if "ANDROID_HOME" in os.environ: rootDir = os.path.join(os.environ["ANDROID_HOME&quo

用Python编写脚本使IE实现代理上网的教程_python

厂里上个网需要设置代理服务器,切换各种环境『包括但不仅限于开发环境.QA.预上线.验收.生产环境.压力测试.Demo--』都需要给浏览器设置不同的代理服务器. 虽然俺有神器Firefox+Change Host+HostAdmin+Proxy Selector的组合来轻松切换Host,切换浏览器代理,但是-凡是就怕『但是』. 但是碰到一些IE才有的bug时候不得不换浏览器啊!!还要开虚拟机进去搞IE6.IE8.360.搜狗这些奇葩浏览器啊!!! 有同事建议搞个bat脚本来做这些,但没人肯动手--

在Python中编写数据库模块的教程

  这篇文章主要介绍了在Python中编写数据库模块的教程,本文代码基于Python2.x版本,需要的朋友可以参考下 在一个Web App中,所有数据,包括用户信息.发布的日志.评论等,都存储在数据库中.在awesome-python-app中,我们选择MySQL作为数据库. Web App里面有很多地方都要访问数据库.访问数据库需要创建数据库连接.游标对象,然后执行SQL语句,最后处理异常,清理资源.这些访问数据库的代码如果分散到各个函数中,势必无法维护,也不利于代码复用. 此外,在一个Web

Python中编写ORM框架的入门指引

  这篇文章主要介绍了Python中编写ORM框架的入门指引,示例代码基于Python2.x版本,需要的朋友可以参考下 有了db模块,操作数据库直接写SQL就很方便.但是,我们还缺少ORM.如果有了ORM,就可以用类似这样的语句获取User对象: ? 1 user = User.get('123') 而不是写SQL然后再转换成User对象: ? 1 2 u = db.select_one('select * from users where id=?', '123') user = User(*