在优化问题中,目标或约束函数有时除了独立变量之外还具有参数。额外的参数可以是数据,也可以表示在优化期间不会改变的变量。
要在基于问题的方法中包含这些参数,只需指的是您的目标或约束函数中的工作空间变量。
例如,假设您有矩阵C
和D.
在粒子
文件,这些矩阵表示您的问题的数据。将数据加载到工作区中。
加载粒子
查看矩阵的大小。
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;
您包含数据C
和D.
进入问题时,只需参照它们在目标函数中的表达式。解决这个问题。
[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。