✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
🍎 往期回顾关注个人主页:Matlab科研工作室
🍊个人信条:格物致知,完整Matlab代码及仿真咨询内容私信。
🔥 内容介绍
打开手机相册,你是否遇到过这样的困扰:夜景照片满是 “雪花点”,老照片扫描后布满杂色,医学影像的细微病灶被噪点掩盖?这些让人头疼的 “噪点”,本质是图像采集、传输或存储过程中混入的随机信号干扰。而今天要介绍的ADMM-TGV 算法,就像给图像装了一台 “智能滤镜”,既能精准剔除噪点,又能守住画面的细节与边缘 —— 这篇文章,我们就来拆解这项兼顾 “去噪力” 与 “保真性” 的技术。
一、先搞懂:为什么普通去噪总 “顾此失彼”?
在聊 ADMM-TGV 之前,我们得先明白一个核心矛盾:传统去噪算法大多在 “去噪” 和 “保细节” 之间反复横跳。
比如大家熟悉的 “高斯滤波”,本质是给图像做 “模糊处理”—— 噪点确实少了,但照片里的文字边缘、物体轮廓也跟着变虚;再比如 “中值滤波”,对付椒盐噪点很管用,可遇到渐变的光影(比如夕阳下的天空),就会留下明显
的 “块断层”。
问题的根源在于:传统算法大多把 “去噪” 当成 “全局平滑”,却忽略了图像的 “局部特征”—— 我们需要的是 “该平滑的地方(噪点区域)使劲平,该锐利的地方(边缘细节)坚决保”。而 ADMM-TGV 算法,正是为解决这个矛盾而生。
二、TGV 模型:给图像去噪装 “智能判官”
要理解 ADMM-TGV,得先从 “TGV” 说起。TGV 的全称是Total Generalized Variation(总广义变分),它的核心思路是:用 “变分” 判断图像的 “真实特征” 与 “虚假噪点”。
我们可以把图像想象成一张 “高低起伏的地形地图”:
- 平坦的区域(比如纯色背景):像素值变化小,“地形坡度” 平缓;色边缘区域(比如文字边框、人脸轮廓):像素值突然变化,“地形坡度” 陡峭;
- 噪点区域(比如照片里的雪花点):像素值毫无规律地跳变,“地形坡度” 乱晃。
传统的 “总变分(TV)模型”,只会看 “坡度大小”—— 只要坡度大,就认定是 “需要保留的边缘”。但这种判断很粗糙:有些噪点的 “坡度” 也很大,容易被当成 “边缘” 保留下来;而有些平缓的细节(比如皮肤纹理),又会被当成 “噪点” 平滑掉。
TGV 模型则升级了 “判断标准”:它不仅看 “坡度大小”,还看 “坡度的变化规律”——
- 真实边缘的 “坡度” 是连续的(比如直线边缘的坡度方向一致,曲线边缘的坡度缓慢变化);
- 噪点的 “坡度” 是混乱的(一会儿向上,一会儿向下,毫无规律)。
简单说,TGV 就像一位 “智能判官”:能精准区分 “有规律的边缘” 和 “无规律的噪点”,从而实现 “去噪不模糊,保边不含糊”。
三、ADMM 算法:让 TGV 模型 “跑起来” 的 “加速器”
TGV 模型的思路很好,但直接计算起来非常复杂 —— 如果把图像去噪的计算过程比作 “解一道超难的数学题”,TGV 就是 “解题思路”,而 ADMM 则是 “高效解题步骤”。
ADMM 的全称是Alternating Direction Method of Multipliers(交替方向乘子法),它的核心作用是 “化繁为简”:把 TGV 模型这种复杂的 “全局优化问题”,拆成 3 个简单的 “局部子问题”,然后循环迭代求解,直到得到最优结果。
我们用 “打扫房间” 来类比这个过程:
- 第一步:拆分任务(变量分解)
把 “给整个房间大扫除”(全局去噪),拆成 “擦窗户”“拖地板”“整理书桌”(三个局部子问题),每个任务单独处理,难度瞬间降低。
- 第二步:轮流打扫(交替迭代)
先专注 “擦窗户”(求解第一个子问题:更新图像变量),把窗户擦干净;再专注 “拖地板”(求解第二个子问题:更新梯度变量),把地面拖整洁;最后 “整理书桌”(求解第三个子问题:更新乘子变量),校准之前的误差。
- 第三步:检查效果(收敛判断)
每轮打扫完,看看 “房间整体干净度” 是否达标 —— 如果窗户还有灰、地面还有污渍,就再循环一轮;直到所有区域都干净,就停止打扫。
这种 “拆分 - 迭代 - 校准” 的思路,让 TGV 模型从 “理论可行” 变成 “实际可用”:不仅计算速度快(比直接求解 TGV 快 3-5 倍),还能适配不同分辨率的图像(从手机照片到医学 CT 影像都能用)。
四、ADMM-TGV 实战:这些场景下它 “碾压” 传统算法
光说不练假把式,我们来看 ADMM-TGV 在实际场景中的表现 ——
1. 医学影像去噪:不丢 “救命细节”
在 CT、MRI 影像中,噪点可能会掩盖微小病灶(比如早期肿瘤、细小血管堵塞)。传统算法去噪后,病灶边缘会变模糊,影响医生判断。
而 ADMM-TGV 能在剔除噪点的同时,精准保留病灶的边缘轮廓(比如肺部小结节的边界、血管的分支结构)。有实验数据显示:在相同噪点去除率下,ADMM-TGV 处理后的医学影像,边缘清晰度比传统 TV 算法高 20%-30%,为临床诊断提供更可靠的依据。
2. 老照片修复:留住 “时光细节”
家里的老照片存放久了,会出现褪色、斑点和划痕。用普通软件修复时,容易把照片里的皱纹、发丝等细节 “磨平”,让人物失去真实感。
ADMM-TGV 则能 “精准修复”:它会把斑点和划痕识别为 “噪点” 并去除,同时保留人物的皮肤纹理、衣物褶皱等细节。修复后的老照片,既能恢复干净的画面,又不失 “岁月的质感”。
3. 夜景摄影去噪:告别 “糊成一片”
夜景照片的噪点问题最突出 —— 为了提亮画面,相机容易引入大量噪点,导致画面满是 “雪花”。用传统算法去噪,往往会把灯光的光晕、夜景的层次感也一并去掉,让照片显得 “灰蒙蒙”。
ADMM-TGV 能区分 “灯光的渐变边缘” 和 “随机噪点”:它会剔除画面中的 “雪花点”,同时保留灯光的柔和光晕、建筑的轮廓线条。处理后的夜景照片,既能保持干净的画面,又能还原夜晚的光影氛围。
⛳️ 运行结果



📣 部分代码
%% Please cite https://doi.org/10.1007/s11075-024-01759-2 and/or https://doi.org/10.1016/j.ultramic.2025.114159 if used!
%% ---------------------------------------_Initialize deconvolution algorithm_---------------------------------------
% set the z and u variables to 0 as starting values.
% However, z0 is best chosen as the data to make the convergence faster.
f = waitbar(0,sprintf('Deconvolve with ADMM-RBTGV: %d %%', 0));
% Initialize z-Variables
SizeDat = size(Data);
z0 = Data;
z1x = zeros(SizeDat);
z1y = zeros(SizeDat);
z1z = zeros(SizeDat);
z2x = zeros(SizeDat);
z2y = zeros(SizeDat);
z2z = zeros(SizeDat);
z2xy = zeros(SizeDat);
z2xz = zeros(SizeDat);
z2yz = zeros(SizeDat);
% Initialize u-Variables
u0 = zeros(SizeDat);
u1x = zeros(SizeDat);
u1y = zeros(SizeDat);
u1z = zeros(SizeDat);
u2x = zeros(SizeDat);
u2y = zeros(SizeDat);
u2z = zeros(SizeDat);
u2xy = zeros(SizeDat);
u2xz = zeros(SizeDat);
u2yz = zeros(SizeDat);
% Initialize x/t-Variables
x = zeros(SizeDat);
T1 = zeros(SizeDat);
T2 = zeros(SizeDat);
T3 = zeros(SizeDat);
% Precompute Kernels
Kernel = Kernel./sum(Kernel,'all');
A = fftn(Kernel,SizeDat);
At = conj(A);
AtA = At.*A;
%% Parameter Choice
% Residual balancing makes the initial choice of rho0, rho and eta
% arbitrary. Lambda0 and Lambda1 are best chosen to be half the inverse of the noise std
% in a scientific context. Since the total variation prior depends on the noise of the deconvolved
% data, the noise is amplified by a factor 'Incr', that must be regarded.
% Note, that a PSF of a detector correlates the outcome Poisson noise! This
% must necessarily be regarded. In the case where the kernel is equal to the detector PSF, the increase of the Poisson
% noise is given as the sum of the Pearson coefficients, which are given as
% the convolution of the PSF with itself. Details are found in https://doi.org/10.1016/j.ultramic.2025.114159.
S3norm = rho.*Dt(u1z ,3);
S3a = rho.*(D(-x_old,3) + z1z_old );
clearvars x_old z1z_old
S3anorm = rho.*u1z;
SN0 = max(mean( S0norm.^2 ,'all'),mean((S1norm + S2norm + S3norm - S ).^2,'all'));
SN = max(mean((S1norm + S2norm + S3norm).^2,'all'),mean((S0norm - S0).^2,'all'));
clearvars S0norm S1norm S2norm S3norm
Snorm0 = sqrt(mean(S0.^2,'all')/SN0);
clearvars S0 SN0
S = sqrt(mean(S.^2,'all') + mean(S1a.^2,'all') + mean(S2a.^2,'all') + mean(S3a.^2,'all'));
R = sqrt(R + mean((Dz - z1z - T3).^2,'all'));
R1norm = R1norm + mean((Dz - T3).^2,'all') ;
R2norm = R2norm + mean(( z1z ).^2,'all') ;
RN = sqrt(max(R1norm,R2norm));
clearvars R1norm R2norm
Rnorm = R/RN;
clearvars R RN
end
clearvars Dz
% z_2 update
Htx = Dt(T1,2);
v2x = Htx + u2x;
Htxy = Dt(T1,1) + Dt(T2,2);
v2xy = Htxy + u2xy;
Hty = Dt(T2,1);
v2y = Hty + u2y;
Htxz = Dt(T1,3) + Dt(T3,2);
v2xz = Htxz + u2xz;
Htyz = Dt(T2,3) + Dt(T3,1);
v2yz = Htyz + u2yz;
Htz = Dt(T3,3);
v2z = Htz + u2z;
k = lambda1/eta;
vnorm = sqrt(v2x.^2 + v2xy.^2 + v2y.^2 + v2xz.^2 + v2yz.^2 + v2z.^2);
if doResBal
z2x_old = z2x;
end
z2x = cSk(v2x,vnorm,k);
u2x = v2x - z2x ;
clearvars v2x
if doResBal
s1 = - eta.*D(z2x - z2x_old,2);
clearvars z2x_old
s1norm = eta.*D(u2x ,2);
r = mean((Htx - z2x).^2,'all');
r1norm = mean((Htx ).^2,'all');
r2norm = mean(( z2x).^2,'all');
end
clearvars Htx
if doResBal
z2xy_old = z2xy;
end
z2xy = cSk(v2xy,vnorm,k);
u2xy = v2xy - z2xy;
clearvars v2xy
if doResBal
z2xy_old = z2xy - z2xy_old ;
s1 = s1 - eta.*D(Dt(-T2_old,2) + z2xy_old ,1);
s1norm = s1norm + eta.*D( u2xy , 1);
s2 = - eta.*D(Dt(-T1_old,1) + z2xy_old ,2);
clearvars z2xy_old
s2norm = eta.*D( u2xy , 2);
r = r + mean((Htxy - z2xy).^2,'all');
r1norm = r1norm + mean((Htxy ).^2,'all');
r2norm = r2norm + mean(( z2xy).^2,'all');
end
clearvars Htxy
if doResBal
z2y_old = z2y ;
end
z2y = cSk(v2y,vnorm,k);
u2y = v2y - z2y ;
clearvars v2y
if doResBal
s2 = s2 - eta.*(D(z2y - z2y_old,1));
clearvars z2y_old
s2norm = s2norm + eta.*(D( u2y ,1));
r = r + mean((Hty - z2y).^2,'all');
r1norm = r1norm + mean((Hty ).^2,'all');
r2norm = r2norm + mean(( z2y).^2,'all');
end
clearvars Hty
if doResBal
z2xz_old = z2xz;
end
z2xz = cSk(v2xz,vnorm,k);
u2xz = v2xz - z2xz;
clearvars v2xz
if doResBal
z2xz_old = z2xz - z2xz_old ;
s1 = s1 - eta.*D(Dt(-T3_old,2) + z2xz_old ,3);
s1norm = s1norm + eta.*D( u2xz , 3);
s = mean(s1.^2,'all');
sn = max(mean((S1anorm - S1a).^2,'all') , mean(s1norm.^2 ,'all'));
clearvars S1a
SN = SN + max(mean((s1norm - s1 ).^2,'all') , mean(S1anorm.^2,'all'));
clearvars S1anorm s1 s1norm
s3 = - eta.*D(Dt(-T1_old,3) + z2xz_old ,2);
s3norm = eta.*D( u2xz , 2);
r = r + mean((Htxz - z2xz).^2,'all');
r1norm = r1norm + mean((Htxz ).^2,'all');
r2norm = r2norm + mean(( z2xz).^2,'all');
end
clearvars Htxz
if doResBal
z2yz_old = z2yz;
end
z2yz = cSk(v2yz,vnorm,k);
u2yz = v2yz - z2yz;
clearvars v2yz
if doResBal
z2yz_old = z2yz - z2yz_old ;
s2 = s2 - eta.*D(Dt(-T3_old,1) + z2yz_old ,3);
s2norm = s2norm + eta.*D( u2yz , 3);
s = s + mean(s2.^2,'all');
sn = sn + max(mean((S2anorm - S2a).^2,'all') , mean(s2norm.^2 ,'all'));
clearvars S2a
SN = SN + max(mean((s2norm - s2 ).^2,'all') , mean(S2anorm.^2,'all'));
clearvars S2anorm s2 s2norm
s3 = s3 - eta.*D( Dt(-T2_old,3) + z2yz_old ,1);
s3norm = s3norm + eta.*D( u2yz ,1);
r = r + mean((Htyz - z2yz).^2,'all');
r1norm = r1norm + mean((Htyz ).^2,'all');
r2norm = r2norm + mean(( z2yz).^2,'all');
end
clearvars Htyz
if doResBal
z2z_old = z2z;
end
z2z = cSk(v2z,vnorm,k);
u2z = v2z - z2z ;
clearvars v2z vnorm
if doResBal
s3 = s3 - eta.*D(z2z - z2z_old,3);
clearvars z2z_old
s3norm = s3norm + eta.*D(u2z ,3);
s = sqrt(s + mean(s3.^2,'all'));
sn = sqrt(sn + max(mean((S3anorm - S3a).^2,'all') , mean(s3norm.^2 ,'all')));
clearvars S3a
SN = sqrt(SN + max(mean((s3norm - s3 ).^2,'all') , mean(S3anorm.^2,'all')));
clearvars S3anorm s3 s3norm
snorm = s/sn;
clearvars s sn
Snorm = S/SN;
clearvars S SN
r = sqrt(r + mean((Htz - z2z).^2,'all'));
r1norm = r1norm + mean((Htz ).^2,'all');
r2norm = r2norm + mean(( z2z).^2,'all');
rn = sqrt(max(r1norm,r2norm));
clearvars r1norm r2norm
rnorm = r/rn;
clearvars r rn
end
clearvars Htz
if doResBal
% Applies the residual balancing to the penalty parameters rho_0 (z0 residuals), rho (z1 residuals) and eta (z2 residuals)
% rho_0 update
tau_rho_0 = sqrt(Rnorm0/Snorm0);
if isnan(tau_rho_0) || tau_rho_0==0 || tau_rho_0==inf
if rho_0 > 1
tau_rho_0 = lim^(-1);
elseif rho_0 < 1
tau_rho_0 = lim^( 1);
else
tau_rho_0 = 1;
end
end
tau_rho_0 = max(min(tau_rho_0,10^(lim2)/rho_0),10^(-lim2)/rho_0);
rho_0 = rho_0.*tau_rho_0;
u0 = u0 ./tau_rho_0; % all u variables must be rescaled inversely
% rho update
tau_rho = sqrt(Rnorm/Snorm);
if isnan(tau_rho) || tau_rho==0 || tau_rho==inf
if rho > 1
tau_rho = lim^(-1);
elseif rho < 1
tau_rho = lim^( 1);
else
tau_rho = 1;
end
end
tau_rho = max(min(tau_rho,10^(lim2)/rho),10^(-lim2)/rho);
rho = rho.*tau_rho;
u1x = u1x ./tau_rho; % all u variables must be rescaled inversely
u1y = u1y ./tau_rho;
u1z = u1z ./tau_rho;
% eta update
tau_eta = sqrt(rnorm/snorm);
if isnan(tau_eta) || tau_eta==0 || tau_eta==inf
if eta > 1
tau_eta = lim^(-1);
elseif eta < 1
tau_eta = lim^( 1);
else
tau_eta = 1;
end
end
tau_eta = max(min(tau_eta,10^(lim2)/eta),10^(-lim2)/eta);
eta = eta .*tau_eta;
u2x = u2x ./tau_eta; % all u variables must be rescaled inversely
u2xy = u2xy./tau_eta;
u2y = u2y ./tau_eta;
u2xz = u2xz./tau_eta;
u2yz = u2yz./tau_eta;
u2z = u2z ./tau_eta;
% Update denominator for x/t update
if tau_rho_0 ~=1 && tau_rho ~=1 && tau_eta~=1
A11 = rho_0.*AtA + rho.*DtD; A12 = - rho .*dtx ; A13 = - rho .*dty ; A14 = - rho .*dtz ;
A21 = - rho.*dx ; A22 = rho + eta .*DtD ; A23 = eta.*dy .*dtx ; A24 = eta.*dz .*dtx ;
A31 = - rho.*dy ; A32 = eta .*dx .*dty ; A33 = rho + eta.*DtD ; A34 = eta.*dz .*dty ;
A41 = - rho.*dz ; A42 = eta .*dx .*dtz ; A43 = eta.*dy .*dtz ; A44 = rho + eta.*DtD ;
C11 = ( (A22.*A33.*A44) + (A23.*A34.*A42) + (A24.*A32.*A43) - (A42.*A33.*A24)- (A43.*A34.*A22) - (A44.*A32.*A23) );
C12 = -( (A21.*A33.*A44) + (A23.*A34.*A41) + (A24.*A31.*A43) - (A41.*A33.*A24)- (A43.*A34.*A21) - (A44.*A31.*A23) );
C13 = ( (A21.*A32.*A44) + (A22.*A34.*A41) + (A24.*A31.*A42) - (A41.*A32.*A24)- (A42.*A34.*A21) - (A44.*A31.*A22) );
C14 = -( (A21.*A32.*A43) + (A22.*A33.*A41) + (A23.*A31.*A42) - (A41.*A32.*A23)- (A42.*A33.*A21) - (A43.*A31.*A22) );
C21 = -( (A12.*A33.*A44) + (A13.*A34.*A42) + (A14.*A32.*A43) - (A42.*A33.*A14)- (A43.*A34.*A12) - (A44.*A32.*A13) );
C22 = ( (A11.*A33.*A44) + (A13.*A34.*A41) + (A14.*A31.*A43) - (A41.*A33.*A14)- (A43.*A34.*A11) - (A44.*A31.*A13) );
C23 = -( (A11.*A32.*A44) + (A12.*A34.*A41) + (A14.*A31.*A42) - (A41.*A32.*A14)- (A42.*A34.*A11) - (A44.*A31.*A12) );
C24 = ( (A11.*A32.*A43) + (A12.*A33.*A41) + (A13.*A31.*A42) - (A41.*A32.*A13)- (A42.*A33.*A11) - (A43.*A31.*A12) );
C31 = ( (A12.*A23.*A44) + (A13.*A24.*A42) + (A14.*A22.*A43) - (A42.*A23.*A14)- (A43.*A24.*A12) - (A44.*A22.*A13) );
C32 = -( (A11.*A23.*A44) + (A13.*A24.*A41) + (A14.*A21.*A43) - (A41.*A23.*A14)- (A43.*A24.*A11) - (A44.*A21.*A13) );
C33 = ( (A11.*A22.*A44) + (A12.*A24.*A41) + (A14.*A21.*A42) - (A41.*A22.*A14)- (A42.*A24.*A11) - (A44.*A21.*A12) );
clearvars A44
C34 = -( (A11.*A22.*A43) + (A12.*A23.*A41) + (A13.*A21.*A42) - (A41.*A22.*A13)- (A42.*A23.*A11) - (A43.*A21.*A12) );
clearvars A42 A43
C41 = -( (A12.*A23.*A34) + (A13.*A24.*A32) + (A14.*A22.*A33) - (A32.*A23.*A14)- (A33.*A24.*A12) - (A34.*A22.*A13) );
C42 = ( (A11.*A23.*A34) + (A13.*A24.*A31) + (A14.*A21.*A33) - (A31.*A23.*A14)- (A33.*A24.*A11) - (A34.*A21.*A13) );
C43 = -( (A11.*A22.*A34) + (A12.*A24.*A31) + (A14.*A21.*A32) - (A31.*A22.*A14)- (A32.*A24.*A11) - (A34.*A21.*A12) );
clearvars A14 A24 A34
C44 = ( (A11.*A22.*A33) + (A12.*A23.*A31) + (A13.*A21.*A32) - (A31.*A22.*A13)- (A32.*A23.*A11) - (A33.*A21.*A12) );
clearvars A12 A13 A22 A23 A32 A33
detA = 1./(A11.*C11 + A21.*C21 + A31.*C31 + A41.*C41);
clearvars A11 A21 A31 A41
iA11 = C11.*detA ; clearvars C11 ; iA21 = C12.*detA ; clearvars C12 ; iA31 = C13.*detA ;clearvars C13 ; iA41 = C14.*detA ; clearvars C14 ;
iA12 = C21.*detA ; clearvars C21 ; iA22 = C22.*detA ; clearvars C22 ; iA32 = C23.*detA ;clearvars C23 ; iA42 = C24.*detA ; clearvars C24 ;
iA13 = C31.*detA ; clearvars C31 ; iA23 = C32.*detA ; clearvars C32 ; iA33 = C33.*detA ;clearvars C33 ; iA43 = C34.*detA ; clearvars C34 ;
iA14 = C41.*detA ; clearvars C41 ; iA24 = C42.*detA ; clearvars C42 ; iA34 = C43.*detA ;clearvars C34 ; iA44 = C44.*detA ; clearvars C44 ;
clearvars detA
end
end
waitbar(iter/NIter,f,sprintf('Deconvolve with ADMM-RBTGV: %d %%', floor(iter/NIter*100)));
end
Result = x;
close(f);
clearvars -except Result
end
function z = cSk(v1,vnorm,k)
z = zeros(size(v1));
z(vnorm>=k) = v1(vnorm>=k)- k * v1(vnorm>=k)./vnorm(vnorm>=k);
clearvars -except z
end
function Grad = D(x,dim)
% forward derivative
Grad = x - circshift(x,+1,dim);
clearvars -except Grad
end
function Grad = Dt(x,dim)
% backward derivative
Grad = x - circshift(x,-1,dim);
clearvars -except Grad
end
🔗 参考文献
🎈 部分理论引用网络文献,若有侵权联系博主删除
👇 关注我领取海量matlab电子书和数学建模资料
🏆团队擅长辅导定制多种科研领域MATLAB仿真,助力科研梦:
🌟 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱调度、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题、港口调度、港口岸桥调度、停机位分配、机场航班调度、泄漏源定位、冷链、时间窗、多车场等、选址优化、港口岸桥调度优化、交通阻抗、重分配、停机位分配、机场航班调度、通信上传下载分配优化
🌟 机器学习和深度学习时序、回归、分类、聚类和降维
2.1 bp时序、回归预测和分类
2.2 ENS声神经网络时序、回归预测和分类
2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类
2.4 CNN|TCN|GCN卷积神经网络系列时序、回归预测和分类
2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类
2.7 ELMAN递归神经网络时序、回归\预测和分类
2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类
2.9 RBF径向基神经网络时序、回归预测和分类
2.10 DBN深度置信网络时序、回归预测和分类
2.11 FNN模糊神经网络时序、回归预测
2.12 RF随机森林时序、回归预测和分类
2.13 BLS宽度学习时序、回归预测和分类
2.14 PNN脉冲神经网络分类
2.15 模糊小波神经网络预测和分类
2.16 时序、回归预测和分类
2.17 时序、回归预测预测和分类
2.18 XGBOOST集成学习时序、回归预测预测和分类
2.19 Transform各类组合时序、回归预测预测和分类
方向涵盖风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、用电量预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
🌟图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
🌟 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、 充电车辆路径规划(EVRP)、 双层车辆路径规划(2E-VRP)、 油电混合车辆路径规划、 船舶航迹规划、 全路径规划规划、 仓储巡逻、公交车时间调度、水库调度优化、多式联运优化
🌟 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配、无人机安全通信轨迹在线优化、车辆协同无人机路径规划、
🌟 通信方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化、水声通信、通信上传下载分配
🌟 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化、心电信号、DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测
🌟电力系统方面
微电网优化、无功优化、配电网重构、储能配置、有序充电、MPPT优化、家庭用电、电/冷/热负荷预测、电力设备故障诊断、电池管理系统(BMS)SOC/SOH估算(粒子滤波/卡尔曼滤波)、 多目标优化在电力系统调度中的应用、光伏MPPT控制算法改进(扰动观察法/电导增量法)、电动汽车充放电优化、微电网日前日内优化、储能优化、家庭用电优化、供应链优化
🌟 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长 金属腐蚀
🌟 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合、SOC估计、阵列优化、NLOS识别
🌟 车间调度
零等待流水车间调度问题NWFSP 、 置换流水车间调度问题PFSP、 混合流水车间调度问题HFSP 、零空闲流水车间调度问题NIFSP、分布式置换流水车间调度问题 DPFSP、阻塞流水车间调度问题BFSP
👇
711

被折叠的 条评论
为什么被折叠?



