大量的参数,约束和目标函数:如何在MATLAB中处理此问题



我想找到最小化此目标函数的 alpha 系数:

fun_Obj = @(Alpha) norm(A- sum(Alpha.*B(:,:),2),2)

with:

a = vector 1d(69x1(

b = matrice 2d(69x1000(

alpha_i a vector(1x1000(未知参数,其中 0<Alpha<1 sum(alpha(= 1

处理此类参数的最佳优化方法是什么(我可以尽量减少它仍然很多(?如何介绍第二个约束,即 sum(alpha_i(= 1 在优化期间?

非常感谢您的宝贵帮助。

最好,

本杰明

您可以使用受约束的优化功能fmincon

% sample data
nvars = 1000;
A = rand(69,1);
B = rand(69,nvars);
% Objective function
fun_Obj = @(Alpha,A,B) norm(A- sum(Alpha.*B(:,:),2),2);
% Nonlinear constraint function. The first linear equality is set to -1 to make it alway true. 
%    The second induces the constraint that sum(Alpha) == 1
confuneq = @(Alpha)deal(-1, sum(Alpha)-1);
% starting values
x0 = ones(1,nvars)/nvars;
% lower and upper bounds
lb = zeros(1,nvars);
ub = ones(1,nvars);
% Finally apply constrained minimisation
Alpha = fmincon(@(x)fun_Obj(x,A,B),x0,[],[],[],[],lb,ub,@(x)confuneq(x));

在我的笔记本电脑上只需几秒钟,默认的迭代次数就需要大量的迭代次数,但是您应该大幅度考虑增加该数字以获得更好的结果。同样,在这种情况下,默认算法可能不是正确的选择,'sqp'可能更好。请参阅文档。

您可以用:

做这些事情
options = optimoptions(@fmincon,'Algorithm','sqp','MaxFunctionEvaluations',1e6);
Alpha = fmincon(@(x)fun_Obj(x,A,B),x0,[],[],[],[],lb,ub,@(x)confuneq(x),options);

最新更新