Local Solver快速入门指南(连载四)---用Python求解您的第一个模型

Python求解您的第一个模型(Local Solver)

LocalSolverC ++语言实现。尽管如此,我们还是为Python提供了面向对象的API,从而可以将LocalSolver完全集成到您的Python业务应用程序中去。LocalSolverAPI是轻量级的,只有操作很少的几个类。请注意,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),小于或等于(<=)。还可以使用许多其他数学运算符,从而使您可以建模和解决高度非线性的组合优化问题。函数constraintmaximum用于标记表达式为“受约束”或“最大化”。(未完待续 ~~~~

猜你喜欢

转载自blog.csdn.net/qq_31243247/article/details/115006613
今日推荐