用Python求解您的第一个模型(Local Solver)
LocalSolver用C ++语言实现。尽管如此,我们还是为Python提供了面向对象的API,从而可以将LocalSolver完全集成到您的Python业务应用程序中去。LocalSolver的API是轻量级的,只有操作很少的几个类。请注意,LocalSolver是“建模-运行”方式的数学程序求解器:实例化数学模型后,无需编写其他代码即可运行该求解器。
注意:
在计算机上安装LocalSolver后,将LocalSolver链接到Python安装的推荐方法是在命令提示符或Python环境的提示符(例如,Anaconda)中键入以下命令:
pip install localsolver -i https://pip.localsolver.com
请注意,它仅在Python中配置LocalSolver的集成。它不能替代具有合法LocalSolver许可证的LocalSolver程序的正确安装。每次您安装新版本的LocalSolver时,都必须执行此命令。
在本节中,我们向您展示如何在Python中建模和解决您的第一个问题:优化桶的形状。在有限的材料表面(S =π)下,我们尝试构建一个可容纳最大体积的圆桶。
在我们的示例导览中,将更为精确地描述这个小例子。在这里,我们的主要目标是学习如何编写和启动模型。如有问题请联系localsolver数学求解器中国区代理商无锡迅合信息科技有限公司工作人员。
编写Python模型
以下是对这个非线性问题进行建模的Python程序 (参见安装目录下examples/optimal_bucket例子).
########## optimal_bucket.py ##########
import localsolver
import sys
with localsolver.LocalSolver() as ls:
PI = 3.14159265359
#
# Declares the optimization model
#
m = ls.model
# Numerical decisions
R = m.float(0, 1)
r = m.float(0, 1)
h = m.float(0, 1)
# Surface must not exceed the surface of the plain disc
surface = PI*r**2 + PI*(R+r)*m.sqrt((R - r)**2 + h**2)
m.constraint(surface <= PI)
# Maximize the volume
volume = PI*h/3*(R**2 + R*r + r**2)
m.maximize(volume)
m.close()
#
# Param
#
if len(sys.argv) >= 3: ls.param.time_limit = int(sys.argv[2])
else: ls.param.time_limit = 2
ls.solve()
#
# Writes the solution in a file with the following format:
# - surface and volume of the bucket
# - values of R, r and h
#
if len(sys.argv) >= 2:
with open(sys.argv[1], 'w') as f:
f.write("%f %f\n" % (surface.value, volume.value))
f.write("%f %f %f\n" % (R.value, r.value, h.value))
创建LocalSolver环境LocalSolver()后,将使用函数float()(或bool(),int(),set(),list())声明模型的所有决策变量。可以使用其他运算符或函数在这些决策变量上构建中间表达式。例如,在上述模型中:幂(pow),平方根(sqrt),小于或等于(<=)。还可以使用许多其他数学运算符,从而使您可以建模和解决高度非线性的组合优化问题。函数constraint或maximum用于标记表达式为“受约束”或“最大化”。(未完待续 ~~~~ )