我有一组向量(曲线),我想匹配一条曲线。问题不仅在于找到与单条曲线最接近的曲线集的线性组合(这可以通过最小二乘 Ax = B 来完成)。我需要能够添加约束,例如将拟合中使用的曲线数量限制为特定数量,或者曲线彼此相邻。这些约束可以在混合整数线性规划优化中找到。
我开始使用 lsqlin,它允许约束并且能够将变量限制为 > 0.0,但在添加更多约束方面我不知所措。有没有办法将整数约束添加到最小二乘,或者有没有办法用 MILP 解决这个问题?
非常感谢您在正确方向上的任何帮助!
编辑:根据 ErwinKalvelagen 的建议,我正在尝试使用 CPLEX 及其二次求解器,但是直到现在我还没有设法让它工作。我创建了一个最小的“不工作”示例,并在此处上传了数据并在下面上传了代码。问题是 matlabs LS 求解器lsqlin
能够求解,但是 CPLEXcplexlsqnonneglin
返回CPLEX 错误 5002:对于同一问题,%s 不是凸的。
function [ ] = minWorkingLSexample( )
%MINWORKINGLSEXAMPLE for LS with matlab and CPLEX
%matlab is able to solve the least squares, CPLEX returns error:
% Error using cplexlsqnonneglin
% CPLEX Error 5002: %s is not convex.
%
%
% Error in Backscatter_Transform_excel2_readMut_LINPROG_CPLEX (line 203)
% cplexlsqnonneglin (C,d);
%
load('C_n_d_2.mat')
lb = zeros(size(C,2),1);
options = optimoptions('lsqlin','Algorithm','trust-region-reflective');
[fact2,resnorm,residual,exitflag,output] = ...
lsqlin(C,d,[],[],[],[],lb,[],[],options);
%% CPLEX
ctype = cellstr(repmat('C',1,size(C,2)));
options = cplexoptimset;
options.Display = 'on';
[fact3, resnorm, residual, exitflag, output] = ...
cplexlsqnonneglin (C,d);
end