基于LES与扩散模型的涡轮机入流三维湍流重构技术详解

news2026/5/10 0:05:53
1. 项目概述从“猜”到“算”的湍流入流重构在涡轮机械尤其是风力发电和航空发动机领域有一个长期困扰工程师和科研人员的“老大难”问题我们如何精确地知道即将冲击叶片的那一团空气它的内部结构到底是什么样的传统的做法要么依赖昂贵的现场实测布下天罗地网般的传感器阵列成本高、周期长要么就基于一些简化的统计模型或经验谱来“猜”比如经典的Kaimal或von Karman谱但这些模型给出的往往是一个平均的、各向同性的“理想”湍流和真实世界中那瞬息万变、结构复杂的“风”或“气流”相去甚远。这种“盲人摸象”式的输入直接导致气动性能预测不准、疲劳载荷评估失真设计出来的叶片要么过于保守、牺牲效率要么过于激进、埋下安全隐患。我这次折腾的“基于大涡模拟与扩散模型的涡轮机入流三维重构技术研究”核心目标就是想解决这个“输入不准”的痛点。简单来说它的野心是仅利用有限几个点的、稀疏的、甚至是带有噪声的瞬时风速测量数据就能像“时空侦探”一样反推出一个高保真的、物理可信的、完整的三维湍流速度场。这相当于给涡轮机装上了一双“透视眼”能看清来流的每一个涡旋细节。整个技术的骨架由两大核心支柱构成大涡模拟LES和扩散模型Diffusion Model。LES负责扮演“物理世界的裁判”它通过直接求解大尺度涡的运动而将小尺度涡的影响通过模型化处理能以相对可接受的成本生成高精度的、物理真实的湍流样本库这是我们整个技术的“数据地基”。而扩散模型这个近年来在AI图像生成领域大放异彩的“魔法师”在这里被我们请来学习湍流场生成的“内在规律”。它从LES生成的海量数据中学会如何从一个简单的随机噪声一步步“去噪”成一个结构复杂但物理合理的三维湍流场。更关键的一步是我们将稀疏的实测数据作为“条件”引导这个生成过程确保最终重构出的流场在测点位置与实测数据严丝合缝而在未知区域则根据学到的物理规律进行“合理想象”与补全。这项研究的价值远不止于发一篇论文。对于风力机它可以基于机舱或少数测风塔的数据重构出整个风轮扫掠面的入流场为独立变桨、载荷优化提供前所未有的精准输入对于航空发动机可以利用机匣上有限的传感器重构进口畸变流场对评估喘振边界、优化压气机设计至关重要。它本质上是在数据驱动和物理规律之间架起一座桥用AI放大稀疏数据的价值用物理约束AI的幻想。2. 技术路线与核心思路拆解2.1 为什么是“LES 扩散模型”这个组合面对湍流入流重构这个问题可选的技术路径其实不少。比如纯数据驱动的插值方法如Kriging、基于线性随机估计LSE的方法或者更复杂的生成对抗网络GAN。但我们最终锚定“LES扩散模型”这个组合是经过一番深思熟虑和利弊权衡的。首先为什么需要LES因为我们需要一个“黄金标准”的训练数据源。GAN等纯数据驱动模型固然强大但如果训练数据本身质量不高、多样性不足或者物理失真那模型只能“垃圾进、垃圾出”。风洞实验和现场实测数据固然真实但获取成本极高难以覆盖所有风速、风向、地表粗糙度等工况数据量通常不足以训练一个复杂的深度学习模型。而LES恰恰能弥补这个缺口。通过设置不同的边界条件、来流风速和地形我们可以在高性能计算集群上以“数字风洞”的形式批量生成大量、多样且物理机制正确的高保真湍流场数据。这些数据虽然仍是数值模拟的结果但其包含的湍流能量级串、相干结构等关键物理特征已被广泛验证。用LES数据训练模型相当于让AI师从一位知识渊博且严谨的“物理学家”。其次为什么选择扩散模型而不是更早流行的GAN这涉及到生成模型的稳定性和质量可控性。GAN在训练中著名的“模式崩溃”和难以收敛的问题在生成高维、结构复杂的物理场数据时会被进一步放大。训练过程像是一场脆弱的博弈生成器和判别器稍有不平衡就会崩掉。而扩散模型的核心思想是“渐进式去噪”其训练目标更稳定通常是最小化噪声预测的均方误差理论上更容易收敛。更重要的是扩散模型的“条件生成”过程与我们的“数据同化”需求在数学形式上非常契合。我们可以很自然地将稀疏观测数据作为反向去噪过程的引导条件通过一个条件编码器将其融入生成过程实现条件采样。这意味着模型生成的不是任意的湍流场而是“与这组特定观测数据最匹配”的那个最可能的湍流场。这种基于概率框架的、可控的生成方式比GAN的隐空间插值更加直观和稳健。注意这里有一个关键的认知转变。我们不是在训练一个“输入稀疏数据输出完整流场”的确定性映射网络那更像一个超分辨率网络。扩散模型学习的是湍流场的概率分布 ( p(x) )。条件生成时我们是在求解条件分布 ( p(x | y) )其中 ( y ) 是观测数据。这允许生成结果存在一定的合理不确定性符合湍流随机性而非一个僵硬的“标准答案”。2.2 整体技术流程框架整个技术流程可以清晰地划分为离线训练和在线重构两个阶段形成一个完整的闭环。第一阶段离线训练——构建“湍流生成器”LES数据生产使用如OpenFOAM、Nek5000或专用LES求解器针对目标涡轮机典型运行工况如不同风速、湍流强度、剪切剖面生成大量三维、非定常的湍流速度场快照 ( {u, v, w}(x, y, z, t) )。每个快照就是一个训练样本。数据预处理与归一化将速度场数据裁剪、插值到统一的网格尺寸例如64x64x64或128x128x128。对每个速度分量进行归一化如减去均值、除以标准差使其分布适合神经网络处理。扩散模型训练前向过程对每个归一化的湍流场样本 ( x_0 )逐步添加高斯噪声经过 ( T ) 步后得到纯噪声 ( x_T )。这个过程是固定的无需学习。反向过程学习训练一个U-Net结构的神经网络 ( \epsilon_\theta )。它的任务是给定任意一步的带噪数据 ( x_t ) 和时间步 ( t )预测出添加到 ( x_t ) 中的噪声 ( \epsilon )。通过大量样本训练这个网络就隐式地学到了从噪声分布 ( \mathcal{N}(0, I) ) 到真实湍流场数据分布 ( p(x_0) ) 的逆映射路径。第二阶段在线重构——执行“条件化反演”获取稀疏观测从实际涡轮机现场如风力机的机舱激光雷达、或叶片根部的少量应变片反推获取少数几个空间点的瞬时速度测量值 ( y )。条件化采样从一个纯三维高斯噪声 ( x_T ) 开始。在每一步反向去噪中不仅依赖训练好的噪声预测网络 ( \epsilon_\theta )还引入一个“条件梯度”项。这个项由另一个神经网络条件编码器计算它衡量当前中间结果 ( x_t ) 在观测点处的值与真实观测值 ( y ) 的差异。这个梯度会引导去噪过程使最终生成的 ( x_0 ) 在观测点上尽可能匹配 ( y )。迭代执行 ( T ) 步最终得到重构的完整三维速度场 ( \hat{x}_0 )。后处理与验证将生成的归一化场反归一化恢复为物理速度值。利用未参与观测的其他位置数据如果有或统计特性如能谱、雷诺应力对重构结果进行定量验证。3. 核心模块深度解析与实操要点3.1 高保真LES数据集的生成不仅是跑模拟很多人认为LES就是设置好参数然后让集群跑起来等结果但实际上为机器学习准备训练数据对LES的设置和输出有特殊要求这里坑点不少。网格与计算域设置计算域必须足够大以确保湍流能充分发展并且让进口和出口边界远离我们关心的区域避免边界效应污染数据。对于风力机入流通常采用周期性边界条件在水平方向而在垂直方向使用壁面函数或应力自由滑移边界来模拟地面和大气边界层顶。网格分辨率必须能解析大部分的能量含涡旋通常要求网格尺度假设在泰勒微尺度附近或更小。一个实用的检查方法是计算湍流积分尺度与网格尺寸的比值确保关键尺度被充分解析。入口条件生成这是确保数据多样性的关键。不能只用一种湍流生成方法。我们混合使用了预前模拟法先在一个辅助计算域内生成充分发展的湍流然后将其切片作为主计算域的时变入口。这种方法物理真实但存储和I/O压力大。合成湍流生成如使用DFM或Mann谱方法快速生成满足特定统计特性的湍流脉动叠加到平均风速剖面上。这种方法效率高适合生成大量不同工况的初始场。关键技巧在数据集中要有意涵盖不同的湍流强度如1%到20%、风剪切指数、以及不同的相干结构尺度。这相当于给AI模型提供了丰富的“词汇量”让它能应对各种复杂的实际场景。数据采样与存储输出数据时不能只保存最终结果。需要以固定的、足够高的时间步长满足奈奎斯特采样定理通常要能捕捉到感兴趣的最高频率输出整个三维域所有网格点的速度分量。文件格式推荐使用HDF5或NetCDF便于并行读写和后续处理。一个常见的错误是只保存时间平均场对于学习瞬态结构的扩散模型来说这毫无用处。实操心得LES计算成本极高。一个策略是采用“两级”数据生成。第一级用中等网格分辨率跑大量不同工况的短时模拟旨在覆盖宽广的参数空间。第二级挑选若干典型工况用更高分辨率进行长时间模拟获取更精细的数据。用第一级数据训练模型的“大局观”用第二级数据微调或增强模型对精细结构的捕捉能力。3.2 扩散模型的关键实现细节网络结构选择我们采用了基于U-Net的架构但针对三维数据进行了改造。核心是将所有2D卷积层替换为3D卷积层。在U-Net的下采样和上采样路径中使用了残差连接Residual Blocks来缓解梯度消失问题。此外将时间步 ( t ) 的信息通过正弦位置编码后注入到每个残差块中这是扩散模型的标准操作让网络知道当前去噪的“进度”。条件信息的注入方式这是本项目成败的关键。稀疏观测数据 ( y ) 及其空间位置信息需要有效地引导生成过程。我们尝试了两种主流方案Classifier-Free Guidance在训练时随机以一定概率如10%将条件信息置空。在采样时通过一个引导权重 ( s ) 来放大条件的影响。公式化表示为( \hat{\epsilon} \epsilon_\theta(x_t, t, \emptyset) s \cdot (\epsilon_\theta(x_t, t, y) - \epsilon_\theta(x_t, t, \emptyset)) )。这种方法实现简单效果强大是目前的主流。基于梯度引导训练一个额外的条件编码器网络将观测数据 ( y ) 及其位置编码为一个条件向量。在采样每一步计算当前中间状态 ( x_t ) 在观测点处的预测值与 ( y ) 的差异损失并将该损失的梯度作用于 ( x_t ) 的更新方向。这种方法更直观但需要仔细调整梯度项的权重系数否则容易导致生成质量下降。我们的经验是对于湍流场这种强结构化的数据Classifier-Free Guidance在稳定性和生成质量上表现更优。引导权重 ( s ) 需要调优通常在1.5到3.0之间过大会导致图像伪影过小则条件约束力不足。训练损失与参数损失函数采用简单的均方误差MSE ( L \mathbb{E}{x_0, \epsilon, t} \left[ | \epsilon - \epsilon\theta(x_t, t, y) |^2 \right] ) 其中 ( \epsilon ) 是前向过程加入的真实噪声。优化器使用AdamW学习率采用带热身的余弦退火策略。批量大小Batch Size受限于GPU显存对于3D数据通常很小可能只有1或2因此使用梯度累积来模拟更大的批量。训练步数 ( T ) 设为1000这是精度和效率的平衡点。3.3 稀疏观测系统的设计考量“稀疏观测”具体怎么布置这不是随机的需要结合流体力学知识进行设计否则重构效果会大打折扣。测点位置优化测点应尽可能捕捉到流场中的关键信息。基于本征正交分解POD或动力学模态分解DMD对训练用的LES数据进行分析找出能量占比最高的少数几个模态对应的空间结构。将测点布置在这些结构的关键区域如涡核、高剪切区可以用最少的传感器获取最多的流场信息。对于风力机轮毂中心、叶尖轨迹经过的弧线区域是必选点。对于压气机/涡轮机匣壁面靠近叶片前缘的周向几个位置是关键。观测数据类型最理想的是三维速度矢量。但现实中许多传感器如热线、激光雷达单光束只能测量沿某一方向的速度分量。我们的模型需要能够处理这种不完整的观测信息。在训练时我们可以模拟这种情形随机对LES数据中的某些点的某些速度分量进行“掩码”让模型学会从部分分量信息中推断整体。噪声与不确定性实测数据永远带有噪声。为了增强模型的鲁棒性我们在训练数据的观测值 ( y ) 中有意添加不同强度的高斯白噪声。这样训练出来的模型在面对真实带噪数据时表现会更加稳定不会因为微小的测量误差而崩溃。4. 完整重构流程的逐步实现4.1 环境搭建与依赖配置这个项目对算力要求较高需要GPU进行模型训练和推理。软件环境以Python为核心。# 创建并激活虚拟环境 conda create -n turbulence_recon python3.9 conda activate turbulence_recon # 安装核心深度学习框架 (以PyTorch为例) conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia # 安装科学计算与数据处理库 pip install numpy scipy matplotlib pandas pip install h5py netCDF4 # 用于处理LES数据 pip install tqdm tensorboard # 用于进度监控和可视化 # 安装扩散模型相关库 (可选也可自己实现) pip install diffusers # Hugging Face的扩散模型库可作为参考 pip install accelerate # 用于简化分布式训练对于LES模拟部分通常需要在超算或大型集群上运行使用OpenFOAM、NekRS或自研求解器。这部分环境配置依赖于具体的HPC环境。4.2 数据预处理管道构建这是连接LES和深度学习的关键桥梁需要编写稳定的数据处理脚本。import h5py import numpy as np from scipy.interpolate import RegularGridInterpolator def preprocess_les_data(h5_file_path, output_grid_shape(64, 64, 64)): 读取LES输出的HDF5文件进行插值、归一化并保存为训练用的npz文件。 with h5py.File(h5_file_path, r) as f: # 假设数据集中存储了 U 数组形状为 (T, Z, Y, X, 3) velocity_field f[U][:] # 获取速度场数据 # 1. 选择时间步例如跳过初始瞬态每隔一定步长采样 timesteps_to_keep velocity_field[100::10] # 示例从第100步开始每10步取一帧 processed_samples [] for u_frame in timesteps_to_keep: # 2. 裁剪感兴趣的区域 (例如中心区域) z_center, y_center, x_center np.array(u_frame.shape[:3]) // 2 crop_half 32 u_cropped u_frame[z_center-crop_half:z_centercrop_half, y_center-crop_half:y_centercrop_half, x_center-crop_half:x_centercrop_half, :] # 3. 插值到目标网格 (如果尺寸不匹配) if crop_half*2 ! output_grid_shape[0]: # 创建原始网格和新网格的坐标 orig_coords [np.linspace(0, 1, s) for s in u_cropped.shape[:3]] new_coords [np.linspace(0, 1, s) for s in output_grid_shape] mesh_orig np.meshgrid(*orig_coords, indexingij) mesh_new np.meshgrid(*new_coords, indexingij) points np.stack([m.ravel() for m in mesh_orig], axis-1) u_interp np.zeros(output_grid_shape (3,)) for i in range(3): # 对u, v, w三个分量分别插值 interp_fn RegularGridInterpolator(orig_coords, u_cropped[..., i], bounds_errorFalse, fill_value0) u_interp[..., i] interp_fn(mesh_new).reshape(output_grid_shape) else: u_interp u_cropped # 4. 通道分离并归一化 (记录均值和标准差用于后续反归一化) # 这里采用全局统计量进行归一化更精细的做法可以按样本归一化 u_mean, u_std np.mean(u_interp), np.std(u_interp) u_normalized (u_interp - u_mean) / u_std processed_samples.append({ data: u_normalized.astype(np.float32), mean: u_mean, std: u_std, original_shape: u_frame.shape }) # 保存处理后的数据 np.savez_compressed(processed_turbulence_data.npz, samplesprocessed_samples) print(f预处理完成共保存 {len(processed_samples)} 个样本。)4.3 扩散模型的训练循环以下是训练循环的核心代码片段展示了如何将条件信息融入训练。import torch import torch.nn as nn import torch.optim as optim from model import ConditionalUnet3D # 假设我们定义好的3D U-Net from diffusion import GaussianDiffusion # 假设实现好的前向加噪和采样调度类 device torch.device(cuda) model ConditionalUnet3D(in_channels3, # u,v,w三个通道 model_channels128, out_channels3, condition_dim256).to(device) diffusion GaussianDiffusion(timesteps1000, beta_schedulecosine) optimizer optim.AdamW(model.parameters(), lr1e-4) # 假设 dataloader 能加载预处理好的数据样本和对应的稀疏观测条件 for epoch in range(num_epochs): for batch in dataloader: x_0 batch[full_field].to(device) # 完整流场 [B, C, D, H, W] cond batch[sparse_obs].to(device) # 稀疏观测条件 [B, cond_dim] # 随机采样时间步 t torch.randint(0, diffusion.timesteps, (x_0.shape[0],), devicedevice).long() # 前向加噪过程 noise torch.randn_like(x_0) x_t diffusion.q_sample(x_0, t, noise) # 预测噪声 predicted_noise model(x_t, t, cond) # 计算损失 loss nn.functional.mse_loss(predicted_noise, noise) # 反向传播与优化 optimizer.zero_grad() loss.backward() torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0) # 梯度裁剪 optimizer.step() # 每个epoch结束后可保存检查点并用TensorBoard记录损失4.4 条件化采样与重构训练完成后使用以下逻辑进行条件化采样重构。def conditional_reconstruction(sparse_obs, obs_locations, model, diffusion, guidance_scale2.0): 根据稀疏观测进行流场重构。 sparse_obs: 观测到的速度值形状 [B, num_obs, 3] (3个分量) obs_locations: 观测点的网格坐标形状 [B, num_obs, 3] (z, y, x) model.eval() with torch.no_grad(): # 1. 将稀疏观测编码为条件向量 # 这里需要另一个网络条件编码器将观测值和位置编码融合 # 为简化假设我们已经有了编码后的条件 cond_vector [B, cond_dim] cond_vector condition_encoder(sparse_obs, obs_locations) # 2. 从纯噪声开始 shape (sparse_obs.shape[0], 3, 64, 64, 64) # 与训练数据形状一致 x_t torch.randn(shape, devicedevice) # 3. 迭代去噪 (反向过程) for i in reversed(range(diffusion.timesteps)): t torch.full((sparse_obs.shape[0],), i, devicedevice, dtypetorch.long) # 预测无条件和有条件噪声 model_input torch.cat([x_t, x_t], dim0) # 重复一份用于无条件预测 t_input torch.cat([t, t], dim0) cond_input torch.cat([torch.zeros_like(cond_vector), cond_vector], dim0) # 第一份条件置零 noise_pred model(model_input, t_input, cond_input) noise_pred_uncond, noise_pred_cond noise_pred.chunk(2, dim0) # Classifier-Free Guidance guided_noise noise_pred_uncond guidance_scale * (noise_pred_cond - noise_pred_uncond) # 根据DDPM或DDIM公式更新 x_t x_t diffusion.p_sample(x_t, t, guided_noise) # 4. 得到最终重构流场 x_0 reconstructed_field x_t return reconstructed_field5. 常见问题、调试技巧与效果评估5.1 训练过程中的典型问题与对策问题1训练损失震荡不降或生成结果全是模糊的灰色图像无结构。可能原因学习率过高条件信息未正确注入或权重太大/太小网络结构能力不足或过深导致梯度问题数据归一化不当。排查与解决可视化中间结果在验证集上固定一个噪声和条件每隔一定训练步数采样一次观察生成流场的演变。如果一直是无结构的噪声说明模型根本没学到东西。检查条件编码确保条件编码器输出的向量能够有效区分不同的观测输入。可以单独训练一个小的分类网络用条件向量去预测观测的某些属性如平均风速看能否成功。调整引导权重如果使用Classifier-Free Guidance尝试降低guidance_scale。过高的引导权重在早期训练会破坏学习过程。简化问题先用一个极简的、已知分布的数据如高斯随机场叠加正弦波测试整个训练和采样流程确保代码逻辑正确。问题2模型过拟合在训练集上表现完美但用新的观测条件重构时效果很差。可能原因训练数据多样性不足模型容量过大没有使用数据增强或正则化。排查与解决增加数据多样性回顾LES数据生成环节确保覆盖了足够宽的操作工况。使用数据增强对训练数据中的完整流场进行随机的、小幅度的空间平移、旋转注意物理合理性如水平旋转可行上下翻转可能不合理和添加微小噪声。引入正则化在U-Net中使用Dropout层在训练时随机丢弃部分神经元或使用权重衰减Weight Decay。早停密切监控验证集上的损失当验证损失不再下降时停止训练。问题3重构结果在观测点处匹配很好但在远离观测点的区域出现非物理的伪影或震荡。可能原因扩散模型的反向采样步数 ( T ) 不够多导致去噪不彻底引导权重过大过度拟合观测点而牺牲了全局的物理一致性训练数据本身的物理一致性不足如LES模拟本身有误。排查与解决增加采样步数尝试将采样步数从1000增加到2000观察伪影是否减轻。也可以换用更快的采样器如DDIM在相同步数下获得更好效果。优化引导策略尝试在采样过程中动态调整引导权重前期用较大权重保证条件匹配后期降低权重以优化整体质量。后处理平滑对生成场进行轻度的、各向异性的高斯滤波沿流线方向滤波强度弱垂直方向强可以抑制小尺度数值震荡而不破坏大尺度结构。5.2 效果评估的量化指标不能只靠“肉眼看着像”来评价。需要一套严格的量化指标评估维度具体指标物理意义与计算方法点对点精度均方根误差 (RMSE)在全体网格点上重构场与真实场LES验证数据的误差。反映整体精度。在未观测点的RMSE核心指标。特别关注那些没有布置传感器的位置评估模型的“补全”能力。统计特性保真度平均风速剖面比较水平平均或时间平均后的风速随高度的变化。湍流强度剖面比较速度脉动标准差与平均风速的比值随高度的变化。雷诺应力比较 ( \overline{uv} ), ( \overline{uw} ) 等反映湍流动量输运。能谱密度比较速度脉动的能量在频率或波数上的分布。看是否捕捉了-5/3律。结构相似性空间相关系数计算重构场与真实场在整个域或局部区域上的空间相关系数。本征正交分解 (POD) 能量占比分别对真实场和重构场进行POD比较前N个模态所捕获的能量占比是否接近。对下游应用的影响气动载荷误差将重构的入流场输入一个叶片气动模型如Blade Element Momentum理论计算叶片根部的弯矩、剪力与使用真实入流场的结果对比。5.3 一些提升性能的进阶技巧多尺度训练在U-Net中引入注意力机制或使用多尺度的损失函数让模型同时关注大尺度相干结构和小尺度湍流脉动。物理信息约束在损失函数中加入软性的物理约束项例如惩罚生成场不满足连续性方程( \nabla \cdot \mathbf{u} \approx 0 )的程度。这可以显著提升生成流场的物理合理性。时空联合建模当前模型处理的是瞬时三维快照。更高级的版本可以扩展到四维3D时间直接生成一小段时空湍流序列。这需要将3D卷积扩展到3D时间的架构并处理时间维度上的条件信息。不确定性量化扩散模型本质是概率模型可以生成多个满足同一组观测条件的样本。这些样本之间的差异可以用来评估重构结果的不确定性这对于工程风险评估极具价值。这个项目就像在教一个AI画家不仅学会画“风”的样子还要在指定的几个点上画得跟照片一模一样其他地方则按照风的物理规律自由发挥。从最初的LES数据准备到扩散模型每一个模块的调试再到最后苛刻的量化评估每一步都充满了挑战但也正是这些挑战让最终看到AI重构出的、与高保真模拟高度吻合的湍流涡结构时那种成就感无以言表。它不是一个黑箱工具而是一个融合了物理洞察与数据智能的、可解释、可调控的新一代流体感知利器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2598992.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…