A Linear Programming Example线性规划案例
RSOME包支持使用与NumPy语法一致的高可读性代数表达式指定模型。下面提供了一个非常简单的线性程序示例,
The RSOME package supports specifying models using highly readable algebraic expressions that are consistent with NumPy syntax. A very simple linear program example is provided below,
举例说明求解优化模型的步骤。
from rsome import ro # import the ro modeling tool
model = ro.Model('LP model') # create a Model object
x = model.dvar() # define a decision variable x
y = model.dvar() # define a decision variable y
model.max(3*x + 4*y) # maximize the objective function
model.st(2.5*x + y <= 20) # specify the 1st constraints
model.st(5*x + 3*y <= 30) # specify the 2nd constraints
model.st(x + 2*y <= 16) # specify the 3rd constraints
model.st(abs(y) <= 2) # specify the 4th constraints
model.solve() # solve the model by the default solver
在此示例代码中,通过调用从rsome导入的构造函数model()来创建模型对象ro工具箱。基于模型对象,决策变量x和y由方法dvar()创建。然后使用这些变量来指定目标函数和模型约束。最后一步是调用solve()方法来解决问题。解决方案完成后,将打印一条显示解决方案状态和运行时间的消息。
运行结果是
Being solved by the default LP solver...
Solution status: 0
Running time: 0.0690s
你可以在scipy.optimize.linprog网站上找到linprog()解决方案状态代码的解释。状态码0表示问题得到了最优解决(受公差限制),并且有一个最优解可用。通过get()方法可以得到最优解和相应的目标值。
print('x:', x.get())
print('y:', y.get())
print('Objective:', round(model.get(), 2))
结果是:
x: [4.8]
y: [2.]
Objective: 22.4
通过上面的例子可以看出,RSOME模型可以通过直观、易读的代数表达式来表述,并且可以将表述出来的模型转换为标准形式,通过集成求解器进行求解。可以通过调用RSOME模型对象的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
x,y和objective都算作了变量
然后线性约束6个,包括了max,然后abs算两个约束