基于阵列数据的鲁棒优化
road的Python项目详细描述
ROAD:基于阵列数据的鲁棒优化
ROAD(Robust Optimization with Array Data)是一个用于一般建模优化问题的开源Python包。道路中的模型是由变量、约束和格式为N维数组的表达式构造的。这些数组在语法和操作方面与NumPy库一致,包括广播、索引、切片、元素操作和矩阵计算规则等。总之,ROAD为优化模型的开发及其应用提供了一个方便的平台。在
当前版本的道路支持确定性线性/二阶圆锥规划和鲁棒优化问题。为求解道路优化模型,集成了Gurobi求解器接口。基于robust stochastic optimization (RSO) framework和与其他解算器的接口的分布式鲁棒优化建模工具正在开发中。在
简介
安装道路和解算器
可以使用pip
命令安装ROAD包:
pip install road
当前版本的道路需要Gurobi解算器来求解优化模型。您可以按照these steps完成Gurobi安装。在
道之道
{a3}主要是受一个代数优化工具箱启发而设计的,主要是解决代数优化问题。在开发基于RSO框架的分布式鲁棒优化的MATLAB包RSOME时,我们也学到了很多惨痛的教训。所以在《路》里我们把“道”藏起来,当复活节彩蛋。在
fromroadimportdao^{pr2}$
入门
ROAD包支持使用与NumPy语法一致的高可读代数表达式指定模型。下面提供了一个非常简单的线性程序示例
并用它来说明求解优化模型的步骤。在
fromroadimportro# Import the ro modeling toolfromroadimportgrb_solverasgrb# Import Gurobi solver interfacemodel=ro.Model('LP model')# Create a Model objectx=model.dvar()# Define a decision variable xy=model.dvar()# Define a decision variable ymodel.max(3*x+4*y)# Maximize the objective functionmodel.st(2.5*x+y<=20)# Specify the 1st constraintsmodel.st(5*x+3*y<=30)# Specify the 2nd constraintsmodel.st(x+2*y<=16)# Specify the 3rd constraintsmodel.st(abs(y)<=2)# Specify the 4th constraintsmodel.solve(grb)# Solve the model with Gurobi
Being solved by Gurobi...
Solution status: 2
Running time: 0.0005s
在这个示例代码中,通过调用从road.ro
工具箱导入的构造函数Model()
来创建模型对象。基于模型对象,决策变量x
和{dvar()
方法创建。然后使用这些变量指定目标函数和模型约束。最后一步是调用solve()
方法,通过导入的求解器接口grb
来解决问题。解决方案完成后,将打印一条显示解决方案状态和运行时间的消息。在
根据Gurobi solution status,状态代码2
表明问题已被解决到最优性(受公差限制),并且有一个最佳解决方案。用get()
方法可以得到最优解和相应的目标值。在
print('x:',x.get())print('y:',y.get())print('Objective:',model.get())
x: [4.8]
y: [2.]
Objective: 22.4
上面的例子展示了如何用高度可读的代数表达式指定优化模型。该软件包能够将指定的模型转换为标准公式,并由求解器进行识别和求解。在
用户可以通过调用model对象的方法do_math()
来检索标准公式。在
formula=model.do_math()print(formula)
Second order cone program object:
=============================================
Number of variables: 3
Continuous/binaries/integers: 3/0/0
---------------------------------------------
Number of linear constraints: 6
Inequalities/equalities: 6/0
Number of coefficients: 11
---------------------------------------------
Number of SOC constraints: 0
我们还提供了一个调试方法show()
,将标准公式的信息显示为一个数据帧。在
formula.show()
x1 | x2 | x3 | sense | constants | |
---|---|---|---|---|---|
Obj | 1 | 0 | 0 | - | - |
LC1 | 0 | 2.5 | 1 | <= | 20 |
LC2 | 0 | 5 | 3 | <= | 30 |
LC3 | 0 | 1 | 2 | <= | 16 |
LC4 | -1 | -3 | -4 | <= | 0 |
LC5 | 0 | 0 | 1 | <= | 2 |
LC6 | 0 | 0 | -1 | <= | 2 |
Upper | inf | inf | inf | - | - |
Lower | -inf | -inf | -inf | - | - |
Types | C | C | C | - | - |
- 项目
标签: