Local Solver快速入门指南(连载二):容量最大的桶

LocalSolver第一个模型--容量最大的桶

我们将从优化一个桶的形状开始。这是一个典型的非线性(non-linear) 问题,可以使用LocalSolver直接建模并在几秒钟内获得优化解。

对于每种语言,我们将说明如何编写模型、编译代码(如果需要的话)并启动它。

使用Localsolver模拟器(LSP)求解第一个模型

在本节中,我们将向您展示如何建模和解决您的第一个问题:桶形的优化。在有限的材料表面(S=π)下,我们试图建造一个容量最大的桶。

这个小例子在我们的示例导游中有更为精确地描述。这里我们的主要目标是学习如何编写和启动数学优化模型。

构造数学模型(LSP代码)

下面是一个LocalSolver程序(LSP),它为这个非线性问题建模(参见安装目录下examples/optimal_bucket例子).

/********** optimal_bucket.lsp **********/
use io;
/* Declares the optimization model. */
function model() {
    
    
    PI = 3.14159265359;
    // Numerical decisions
    R <- float(0, 1);
    r <- float(0, 1);
    h <- float(0, 1);
    // Surface must not exceed the surface of the plain disc
    surface <- PI*pow(r, 2) + PI*(R + r)*sqrt(pow(R - r, 2) + pow(h, 2));
    constraint surface <= PI;
    // Maximize the volume
    volume <- PI*h/3*(pow(R, 2) + R*r + pow(r, 2));
    maximize volume;
}
/* Parameterizes the solver. */
function param() {
    
    
    if (lsTimeLimit == nil) lsTimeLimit = 2;
}
/* Writes the solution in a file with the following format:
 *  - surface and volume of the bucket
 *  - values of R, r and h */
function output() {
    
    
    if (solFileName == nil) return;
    local solFile = io.openWrite(solFileName);
    solFile.println(surface.value, "  ", volume.value);
    solFile.println(R.value, "  ", r.value, "  ", h.value);
}

模型的所有变量(称为表达式)都使用左箭头<-)声明。使用内置函数float()(或bool()、int()、set()、list())来引入决策变量。中间表达式可以使用其他运算符或函数建立在这些决策变量的基础之上。例如,在上面的模型中:幂(pow),平方根(sqrt),小于或等于(<=)。还有许多其他的数学运算符可供使用,允许您建模和求解高度非线性的组合优化问题。关键字constraintmaximize用于将表达式标记为constratedmaximized。如需帮助或获得临时许可请联系localsolver总代理无锡迅合信息科技有限公司工作人员。 (未完待续~~~~)

猜你喜欢

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