主要内容

通过基于问题的方法传递额外参数

在优化问题中,目标或约束函数有时除了独立变量之外还具有参数。额外的参数可以是数据,也可以表示在优化期间不会改变的变量。

要在基于问题的方法中包含这些参数,只需指的是您的目标或约束函数中的工作空间变量。

通过数据的最小二乘问题

例如,假设您有矩阵CD.粒子文件,这些矩阵表示您的问题的数据。将数据加载到工作区中。

加载粒子

查看矩阵的大小。

DISP(尺寸(c))
2000 400.
DISP(尺寸(d))
2000 1

创建优化变量X尺寸适合于形成载体C * X.

x = Optimvar('X',尺寸(c,2));

创建优化问题,以最小化术语的平方和c * x - d受约束的影响X是非负面的。

x.lowerbound = 0;prob = OptimProblem;expr = sum((c * x-d)。^ 2);prob.objective = expr;

您包含数据CD.进入问题时,只需参照它们在目标函数中的表达式。解决这个问题。

[SOL,FVAL,EXITFLAG,输出] =求解(prob)
使用LSQLIN解决问题。最低发现满足约束。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。
sol =结构与字段:X:[400x1双]
fval = 22.5795.
ExitFlag = OptimalAllyolution.
输出=结构与字段:消息:“……' algorithm: ' inner -point' firstorderopt: 9.9673e-07 construction breach: 0 iterations: 9 linearsolver: 'sparse' cgiterations: [] solver: 'lsqlin'

额外参数的非线性问题

用同样的方法解决非线性问题。例如,假设您有一个包含多个变量的目标函数,其中一些变量是用于优化的固定数据。

类型ParameterFun.
函数y = parameterfun(x,a,b,c)y =(a  -  b * x(1)^ 2 + x(1)^ 4/3)* x(1)^ 2 + x(1)* x(2)+(-C + C * x(2)^ 2)* x(2)^ 2;

对于这个目标函数,X是一个2元素矢量,和一种B., 和C是标量参数。创建优化变量并在工作区中分配参数值。

a = 4;B = 2.1;C = 4;x = Optimvar('X',2);

创建优化问题。因为这种目标函数是一个合理的功能X,您可以根据优化变量指定目标。从点开始解决问题x0.x = [1/2; 1/2]

prob = OptimProblem;prob.objective = parameterfun(x,a,b,c);x0.x = [1/2; 1/2];[溶胶,fval] =求解(prob,x0)
使用fminunc解决问题。发现本地最低限度。优化完成,因为梯度的大小小于最优耐受性的值。
sol =结构与字段:X:[2x1双]
fval = -1.0316.

如果ParameterFun.没有由支持的功能组成,您将转换万博1manbetxParameterFun.到优化表达式并将转换后的表达式设置为目标。看万博1manbetx在优化变量和表达式上支持的操作将非线性函数转换为优化表达式

expr = fcn2optimexpr(@ parameterfun,x,a,b,c);prob.objective = expr;[溶胶,fval] =求解(prob,x0)
使用fminunc解决问题。发现本地最低限度。优化完成,因为梯度的大小小于最优耐受性的值。
sol =结构与字段:X:[2x1双]
fval = -1.0316.

版权所有2018-2020 Mathworks,Inc。

也可以看看

相关的话题