鲁棒随机优化变得容易

rsome的Python项目详细描述


RSOME:稳健随机优化变得容易

RSOME(Robust randocial Optimization makey Easy)是一个用于一般建模优化问题的开源Python包。RSOME中的模型是由变量、约束和格式化为N维数组的表达式构造的。这些数组在语法和操作方面与NumPy库一致,包括广播、索引、切片、元素操作和矩阵计算规则等。总之,RSOME为优化模型及其应用的开发提供了一个方便的平台。在

当前版本的RSOME支持确定性线性/二阶锥程序和鲁棒优化问题。求解模型和求解模型集成在求解模型中。基于robust stochastic optimization (RSO) framework和与其他解算器的接口的分布式鲁棒优化建模工具正在开发中。在

简介

安装RSOME和解算器

可以使用pip命令安装RSOME包:


pip install rsome


RSOME的当前版本需要Gurobi或MOSEK解算器来解决格式化模型。您可以按照these steps完成Gurobi安装。MOSEK解算器可以通过this link中的步骤安装。在

入门

在RSOME中,可以通过使用与NumPy语法一致的高可读性代数表达式来指定模型。下面我们以一个简单的线性规划为例来说明建模和求解优化问题的步骤。在

fromrsomeimportro# Import the ro modeling toolfromrsomeimportgrb_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 constraintmodel.st(5*x+3*y<=30)# Specify the 2nd constraintmodel.st(x+2*y<=16)# Specify the 3rd constraintmodel.st(abs(y)<=2)# Specify the 4th constraintmodel.solve(grb)# Solve the model with Gurobi
^{pr2}$

在这个示例代码中,通过调用从rsome.ro工具箱导入的构造函数Model()来创建模型对象。基于模型对象,使用方法x和{}创建决策变量{}。然后使用变量来指定目标函数和约束条件。最后一步是调用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

上面的例子表明,RSOME模型可以通过简单易懂的代数表达式来表示,并且可以将公式化的模型转换为标准形式,然后由Gurobi(或MOSEK)解算器求解。可以通过调用RSOME 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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
尝试连接到Red5服务器时出现java问题   java实现Runnable的类被认为是ExecutorServices的“Runnable任务”?   java struts2类中的多个@validation   java未能应用插件[class'org.gradle.api.plugins.scala.ScalaBasePlugin']:gradle v2。13   如何使用Java流仅收集长度最大的元素?   从spring引导应用程序连接到firestore的java引发空指针异常   java从SQLite插入和获取真实数据类型会为连续插入获取空值吗?   当存在未知数量的空格时,使用java替代正向查找   部署如何为当今的浏览器部署java小程序(小程序、嵌入、对象)?   @OneToMany和@ManyToOne@Formula之间的java双向关系返回null   java为什么在我的例子中,协议缓冲区的性能比JSON差?   如何部署混合C++/Java(JNI)应用程序?   java如何在程序中显示字符串的完整信息。反恐精英?   java在Hibernate中从持久性上下文中分离实体中的实体