【优化求解器】Xpress Optimization with python学习记录

【优化求解器】Xpress Optimization with python学习记录

优化求解器

优化求解器主要以工业软件的形式,把数学规划方法用于大规模复杂问题的优化求解,为解决各种数学规划问题的工具。在工业领域,求解器作为产业链和供应链优化的核心引擎,能够为复杂应用场景提供智能决策。可广泛应用于云计算、电力能源、工业制造、交通物流、零售、金融等领域,是深埋于智能决策场景底层的“降本增效”的好工具,工业设计软件之芯。它们可以帮助用户找到问题的最佳解决方案,通常是在满足一系列约束条件的情况下最大化或最小化某个目标函数。

行业应用

优化求解器广泛应用于云计算、电力能源、工业制造、交通物流、零售、金融等领域
这里抛砖引玉列举了一些实例,并附上一些官方的demo。

制造业

  • 生产
    • 车间调度问题(Job Shop Scheduling Problem):在多个任务以及多个机器之间确定生产工序的最佳顺序,最大化生产效率。
    • 切割库存问题(Cutting Stock Problem):如何从有限的原材料库存中切割出满足需求的产品,以最小化原材料的浪费。这个问题通常在制造业中出现,特别是在纸张、布料、金属等材料的切割过程中。
      Use the modeling features to create an iterative solver for a cutting stock problem(切割库存问题)
    • 生产计划问题(Production Planning):确定何时生产哪些产品,以满足市场需求、最大化销售和最小化生产成本。
      The Coco productional planning problem(CoCo的生产规划问题)
    • 设备维护计划(Equipment Maintenance Planning):制定设备维护计划,以最大程度地减少停机时间和生产中断。
    • 生产线平衡问题(Production Line Balancing):调度生产线上的工作任务,以均衡工作负荷和最小化停机时间。
  • 供应链
    • 库存优化(Inventory Management):管理库存水平,以平衡成本和客户服务,优化不同种类货物在运输网络中的路由。
      Multicommodity Flow Problem(多商品流问题)
    • 供应链优化问题(Supply Chain Optimization):优化整个供应链网络,包括物流、库存和分销策略,以提高效率和降低成本。

物流与运输

能源行业

  • 电网调度:优化电力生成和分配,以满足需求并降低成本。
  • 能源市场优化:最优化电力交易和定价策略。
  • 风能和太阳能资源优化:确定风电和太阳能设备的最佳位置和容量。

金融与风险管理

  • 投资组合优化:选择最佳投资组合,以最大化收益或降低风险。
    Markowitz portfolio optimization(投资组合优化)
  • 风险分析:分析风险因素,以制定风险管理策略。
  • 信贷风险建模:优化信贷授予决策,以最大程度地减少坏账率。

通信与网络

Xpress则为一款主流的商用优化求解器。主要由四个组件构成:

  1. FICO Xpress Insight使企业能够快速部署优化模型,生成应用程序。
  2. FICO Xpress Executor为优化执行程序提供独立的支持。
  3. FICO Xpress Solver提供优化算法和技术来求解线性、 混合整数和非线性问题。
  4. FICO Xpress Workbench是一个集成开发环境(IDE),用于开发、优化模型、服务和完整的解决方案。

主要优势

  1. 能解决决策变量数千万的LP和MIP问题,以及决策变量数达数百万的一般非线性问题。数以亿计的非零问题系数在Xpress部署使用中很常见。
  2. 支持开箱即用的多线程并行处理,利用多个CPU核心快速高效地解决客户最棘手的问题。
  3. 提供了一套全面的高性能非线性问题解决方案,使企业能够快速、准确地解决更复杂的一般非线性问题。
  4. 此外,Xpress Nonlinear可以解决黑盒优化问题,允许您以调用函数的形式将外部进程作为系数嵌入和建模。

Xpress 的Python接口

使用python编程语言和FICO Xpress优化器库创建和解决优化问题。

pip install xpress

conda install -c fico-xpress xpress

Python3 Mosel 模块使得Mosel和 Python 之间轻松地交换数据以及在 Mosel 中执行 Python 脚本成为可能。由运行时的Mosel库加载和运行Python解释器。
其主要内容包括:

  • 创建、处理、解决和查询优化问题;
  • 使用python数字库(如numpy)创建优化问题;
  • 设置并获取问题参数(控件和属性)的值;
  • 使用python函数作为xpress优化器和xpress非线性解算器的回调。
    xpress python接口允许创建、处理和解决所有可以用fico xpress库解决的问题:线性规划(lp)、二次规划(qp)、二阶圆锥规划(socp)及其混合整数扩展:milp、miqp、miqcqp、misocp,以及一般非线性和混合整数非线性。

Tips:

  • 支持的python版本:The supported Python versions are 3.8 to 3.11. Version 3.8.0 is not and cannot be supported.
  • Mosel程序可以运行python scripts进行辅助运算(不知道是不是这个意思):The Mosel module python3 tries to automatically locate the correct Python libraries on your system, applying the following rules.If the environment variable PYTHONHOME is specified, it will load the libraries of the Python installation in that directory. If the Python executable has been found, the module will try to load the libraries of the Python installation of that Python executable. (todo:所以这个Mosel module就是指的Xpress库吗。这一段没有理解,官方文档说Mosel文件中可以调用python模块,没有的python模块会自动寻找路径。但是我的理解是Xpress算法的源码都是这种Mosel语言写的,python库只是Mosel库的接口。)
  • 支持Mosel格式和Numpy或Pandas格式的相互转换:The module supports the conversion between Mosel types and pandas and NumPy types.The types of data that can be exchanged with Python are the Mosel types boolean, integer, real, string and text , plus arrays, lists and sets of these.

Getting Start

Using Python model objects to build a problem (如何使用xpress python构建一个问题)

  1. Dwmonstrates how variables, or arrays thereof, and constraints, or arrays of constraints,can be added into the problem. Prints the solution and all attributes of thr plan.
    定义问题xp.problem->定义变量xp.var->添加约束addConstraint->确定目标函数setObjective
  2. You can also use a compact xpress.problem() declaration to add variables,constraints and objective in one instruction.
    也可以使用xpress.problem()一次性添加变量、约束条件、目标函数。

简单调试方法

创建求解器对象,将求解器与问题关联,配置求解器选项进行参数调试。
p.controls.nlpsolver用于指定非线性规划求解器,可以指定求解器的特定选项和参数,以调整求解策略,以便更好地满足您的问题需求。这可以包括设置求解器的精度、迭代次数、收敛条件等。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值