主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

使用 simulannealbnd 优化函数(基于问题)

此示例说明了当目标是一个函数文件(可能是未知内容(“黑盒”函数)时,如何在基于问题的方法中使用模拟退火最小化一个函数。运行此示例时,最小化函数 dejong5fcn(x) 可用。绘制函数。

dejong5fcn

Figure contains an axes object. The axes object contains 2 objects of type surface, contour.

创建一个二维优化变量 xdejong5fcn 函数期望变量是行向量,因此将 x 指定为二元素行向量。

x = optimvar("x",1,2);

要使用 dejong5fcn 作为目标函数,请使用 fcn2optimexpr 将该函数转换为优化表达式。

fun = fcn2optimexpr(@dejong5fcn,x);

用目标函数 fun 创建一个优化问题。

prob = optimproblem("Objective",fun);

在所有分量中,将变量边界设置为从 - 50 到 50。指定标量边界时,软件会将边界扩展到所有变量。

x.LowerBound = -50;
x.UpperBound = 50;

在边界内设置一个伪随机初始点。初始点是一个具有字段 x 的结构体。

rng default % For reproducibility
x0.x = x.LowerBound + rand(size(x.LowerBound)).*x.UpperBound;

求解问题,指定 simulannealbnd 求解器。

[sol,fval] = solve(prob,x0,"Solver","simulannealbnd")
Solving problem using simulannealbnd.
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
sol = struct with fields:
    x: [-32.0371 -31.8792]

fval = 
0.9980

另请参阅

| |

主题