主要内容

之间的非线性约束转换surrogateopt形式和其他求解形式

为什么转换约束表单?

尝试各种求解方法,包括surrogateopt对于具有非线性不等式约束的问题,必须在所要求的形式之间进行转换surrogateopt和其他求解器需要的形式。

将从surrogateopt结构形式的其他求解

目标函数objconstr (x)surrogateopt返回一个结构。的Fval字段包含目标函数值,一个标量。的Ineq字段包含约束函数值的向量。的所有值Ineq字段小于或等于零。正值表示违反约束。

其他求解器期望目标函数返回标量值,而不是结构。其他求解器也期望非线性约束函数返回两个输出,c (x)而且量表(x),不是包含的结构c (x)

要转换surrogateopt函数objconstr (x)用于其他求解器:

  • 将目标函数设为@ (x) objconstr (x)。Fval

  • 将非线性约束函数设为@ (x)协议(objconstr (x) .Ineq, [])

例如,

函数Ff = objconstr(x) Ff。Fval =范数(x)^2;ff。Ineq =范数(x - [5,8])^2 - 25;结束

求解一个约束极小化问题objconstr,叫surrogateopt

Lb = [-10,-20];Ub = [20,10];Sol = surrogateopt(@objconstr,lb,ub)
Surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数计算限制。Sol = 2.3325 3.7711

来解决同样的问题fmincon,将目标和约束分解为单独的函数。包括非线性等式约束为[]通过使用交易函数。

objfcn = @(x)objconstr(x).Fval;nlcon = @(x)deal(objconstr(x).Ineq,[]);

调用fmincon用目标函数objfcn和非线性约束函数nlcon

[林洋新能源,fvalf eflag、输出]=...fmincon (objfcn [0, 0 ],[],[],[],[], 磅,乌兰巴托,nlcon)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。solf = 2.3500 3.7600 fvalf = 19.6602 eflag = 1 output = struct with fields: iterations: 7 funcCount: 24 constrviolation: 0 stepsize: 2.0395e-05 algorithm: ' internal -point' firstorderopt: 4.9651e-06 cgiterations: 0 message: '(发现满足约束的局部最小值)。(()优化完成,因为目标函数在()可行方向上不下降,直到最优性公差的值之内,()且约束条件满足到约束公差的值之内。(() <停止条件详细信息>())(()优化完成:相对一阶最优性度量,6.602486e-07,()小于选项。OptimalityTolerance = 1.000000e-06,相对最大约束(违例)为0.000000e+00,小于选项。约束容忍= 1.000000e-06. (() '

你也可以使用patternsearch遗传算法用同样的转换来解决问题。

从其他解算器转换为surrogateopt结构形式

如果您在表单中为其他求解器编写了问题,请使用packfcn函数将目标和非线性约束转换为结构形式surrogateopt.如果目标函数是一个函数句柄@obj非线性约束函数为@nlconst,然后使用目标函数objconstrsurrogateopt

Objconstr = packfcn(@obj,@nlconst);

在本例中,目标函数为Rosenbrock函数。

Ros = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;

指定约束函数,将解限制在以点[1/3,1/3]为中心,半径为1/3的圆盘内。

函数测查[c] = circlecon c (x) = (x (1) 1/3) ^ 2 + (x (2) 1/3) ^ 2 - (1/3) ^ 2;Ceq = [];

在每个组件上设置-2和2的边界。

Lb = [- 2,2];Ub = [2,2];

解决问题的方法patternsearch从[0,0]开始。

X0 = [0,0];x = patternsearch (ros, x0 ,[],[],[],[], 磅,乌兰巴托,@circlecon)
优化终止:网格尺寸小于选项。MeshTolerance和约束违反小于options. constraintolerance。X = 0.6523 0.4258

把问题转化为解决方法surrogateopt

Objconstr = packfcn(ros,@circlecon);Xs = surrogateopt(objconstr,lb,ub)
Surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数计算限制。Xs = 0.6543 0.4284

另请参阅

|

相关的话题

Baidu
map