Sobolev学习代理加速优化:激活函数与径向基函数选择鲁棒性分析

news2026/5/24 13:24:10
1. 项目概述与核心思路在工程优化和科学计算领域我们常常会遇到一个令人头疼的问题目标函数的每一次评估都极其昂贵。比如一次评估可能意味着运行一次耗时数小时的流体力学仿真或者调用一次复杂的有限元分析。传统的无导数优化方法如单纯形法Nelder-Mead或其变种虽然不依赖梯度信息但其收敛速度往往依赖于大量函数调用这在计算成本面前变得难以承受。这就催生了对“代理加速方法”的迫切需求。简单来说代理加速的核心思想是“用便宜的猜代替贵的算”。我们不再傻傻地、每一次迭代都去调用那个昂贵的真实函数我们称之为“黑箱”而是构建一个计算代价极低的近似模型——即代理模型Surrogate Model。这个模型就像一个“替身演员”在优化算法的排练阶段迭代过程中代替主角真实函数进行大量的试错和走位。只有当算法认为找到了一个非常有潜力的新位置时才会请出“主角”进行一次正式的、昂贵的评估来确认这个位置的真正价值。通过这种方式我们可以用几十次甚至几百次廉价的代理模型评估换取仅仅几次昂贵的真实函数评估从而在总计算预算例如允许的真实函数调用次数内探索更广阔的解空间更快地找到更优的解。我最近在复现和深入研究一篇关于结合Sobolev学习的代理加速方法的论文时对其中的一个设计细节产生了浓厚兴趣代理模型本身的结构选择特别是激活函数和径向基函数到底对加速效果有多大影响这是一个非常实际的问题。当我们决定采用神经网络NN或径向基函数RBF作为代理模型时面对众多函数选项如Sigmoid, ReLU, SoftPlus, Gaussian, Cubic等该如何选择是随便选一个还是存在一个“最优”选项这个选择会不会成为整个算法性能的瓶颈基于提供的材料本文的核心就是拆解这个问题。我们将深入探讨在一个特定的、利用Sobolev学习训练代理模型的加速框架下不同激活函数用于神经网络代理和径向基函数用于RBF代理的性能表现。实验数据表明一个令人欣慰的结论是该框架对函数选择表现出良好的鲁棒性这意味着你不需要在函数选择上过度纠结算法本身对模型细节不敏感这是一个非常理想的特性。当然在细微的差异中SoftPlus激活函数和Gaussian径向基函数表现略好这为我们提供了一个可靠的默认选择。接下来我将从一个实践者的角度详细拆解这背后的原理、实现细节以及你可能会踩到的坑。2. 核心原理Sobolev学习与代理加速为何有效在直接对比函数之前我们必须先理解这个代理加速框架的“灵魂”所在——Sobolev学习。这是它区别于普通代理模型的关键也是其鲁棒性的重要来源。2.1 传统代理模型的局限与Sobolev学习的引入想象一下你要用一个多项式去拟合一条复杂的曲线。如果只给你曲线上的几个点函数值你拟合出的多项式可能会在点与点之间剧烈振荡虽然它精确地穿过了这些点但整体形状和真实曲线相去甚远。这就是传统代理模型仅拟合函数值的一个典型问题过拟合与缺乏光滑性指导。在优化语境下这个问题更严重。优化算法尤其是基于模型的方法严重依赖模型的局部曲率信息即梯度来判断下降方向。一个只拟合了函数值但梯度信息完全错误的代理模型可能会将优化器引导至完全错误的方向导致迭代失败甚至发散。Sobolev学习就是为了解决这个问题。它的核心思想是在训练代理模型时不仅要求它逼近真实函数的函数值还要求它同时逼近真实函数的梯度一阶导数。这就好比在教一个学生时不仅告诉他某个点的答案是多少还告诉他这个点附近的变化趋势是上升还是下降变化有多快。这样训练出来的学生代理模型对函数的整体形态把握会准确得多。数学上传统的损失函数只包含函数值误差项Loss Σ (f_true(x_i) - f_surrogate(x_i))^2。而Sobolev学习的损失函数则扩展为Loss_Sobolev α * Σ (f_true(x_i) - f_surrogate(x_i))^2 β * Σ ||∇f_true(x_i) - ∇f_surrogate(x_i)||^2其中α 和 β 是权衡两项重要性的超参数。通过最小化这个联合损失我们迫使代理模型在函数值和一阶导数两个层面都向真实函数看齐。2.2. Sobolev学习如何赋能代理加速在无导数优化中我们通常没有解析梯度。那么Sobolev学习中的梯度信息从何而来这正是其巧妙之处。在像单纯形法这类方法中算法本身就会通过比较单纯形顶点之间的函数值来隐式地估计梯度方向即 simplex gradient。这些估计的梯度虽然不如自动微分求得的精确但包含了宝贵的局部变化信息。在代理加速框架中流程通常是这样的初始采样在搜索空间内进行少量例如n1次n是变量维数昂贵的真实函数评估构成初始数据集包含点集{x_i}和对应的函数值{f(x_i)}。梯度估计利用这些初始点例如构成一个单纯形计算每个点处的 simplex gradient作为该点梯度∇f(x_i)的近似。Sobolev训练使用数据集{x_i, f(x_i), ∇f(x_i)}来训练代理模型NN或RBF最小化上述的Sobolev损失函数。代理优化在后续迭代中优化算法主要在训练好的代理模型上进行搜索快速尝试大量候选点。真值验证与模型更新当代理模型优化找到一个有希望的候选点后才调用一次真实函数进行评估。将这个新数据点连同其估计的梯度加入训练集更新代理模型然后重复步骤4。这个过程形成了一个“学习-优化”的良性循环。因为代理模型从始至终都受到梯度信息的约束所以它对函数局部几何形状的近似更加忠实。这使得优化器在代理模型上的搜索行为更接近在真实函数上的行为从而大大提高了代理引导的有效性减少了因模型误导而产生的无效真实函数调用。注意Sobolev学习中的梯度是估计值存在误差。但实践表明即使是有噪声的梯度信息对提升代理模型的局部拟合质量也大有裨益。关键在于损失函数中α和β的平衡。如果梯度噪声很大可以适当降低β的权重。3. 代理模型候选函数详解与选择逻辑理解了框架的核心后我们再来审视在这个框架中扮演“演员”的代理模型本身。这里主要对比两类模型基于神经网络的NN和基于径向基函数的RBF。而函数选择就是决定这些模型基本非线性变换形式的那个“内核”。3.1 神经网络NN代理的激活函数对比神经网络通过多层线性变换与非线性激活函数的交替来逼近复杂函数。激活函数决定了神经元的输出模式是NN表达能力的核心。在作为代理模型的浅层网络通常只有1-2个隐藏层中激活函数的选择尤为关键。1. Sigmoid函数形式σ(x) 1 / (1 exp(-x))特点与选择逻辑这是最经典的非线性激活函数之一将输入压缩到(0,1)之间。其输出关于原点不对称且当输入绝对值很大时梯度会趋近于0梯度失问题。在代理模型中Sigmoid能提供平滑的、有界的非线性响应。选择它的理由可能是其历史地位和良好的理论性质处处可导且导数简单。但在深度网络中常见的梯度消失问题在浅层代理模型中影响相对较小。实操心得如果优化问题的目标函数值范围已知且有限Sigmoid的输出范围可能是一个天然的优势。但要注意其输出均值不为零可能需要对数据做额外的中心化处理。2. SoftPlus函数形式SoftPlus(x) log(1 exp(x))特点与选择逻辑可以看作是ReLU的平滑版本。它处处可导且导数就是Sigmoid函数d(SoftPlus)/dx σ(x)。它没有ReLU的“死区”问题输入为负时梯度为0输出范围是(0, ∞)。选择它的核心理由在于其光滑性无限阶可导和单调性。在Sobolev学习中我们需要计算模型梯度SoftPlus的光滑性确保了梯度计算的稳定性这对于基于梯度的训练至关重要。其单调性也使得模型行为更容易解释。实操心得在实验中表现略优很可能得益于其卓越的光滑性。当你的问题对平滑性要求极高或者你担心其他函数在数值计算上出现奇异点时SoftPlus是一个安全且强大的默认选择。计算时需注意exp(x)在x很大时的溢出问题可以使用log1p(exp(x))的稳定实现。3. SiLU (Sigmoid Linear Unit) / Swish函数形式SiLU(x) x * σ(x) x / (1 exp(-x))特点与选择逻辑这是Sigmoid的加权版本结合了线性乘子和非线性门控。当x很大时行为接近线性当x为负时趋近于0。它非单调在负半轴有一个“下凸”的区域这赋予了它更丰富的表达能力。选择它的理由是它在许多深度学习任务中表现出了优于传统激活函数的性能可能能更好地拟合某些复杂函数形态。实操心得SiLU的表达能力更强但也可能更容易引入不必要的振荡尤其是在数据点较少的情况下。如果你的代理模型有足够的数据支撑SiLU或许能捕捉到更精细的模式。但在小样本的代理模型场景下其优势可能不如在大型神经网络中明显。3.2 径向基函数RBF代理的核函数对比RBF代理模型采用完全不同的思路它假设未知函数可以表示为一系列以已知数据点为中心的径向对称函数的线性组合。ψ(r)就是那个径向对称函数其中r ||x - c_i||是输入点x到中心点c_i的距离。1. Gaussian (高斯函数)函数形式ψ(r) exp(- (εr)^2 )通常形式ε为形状参数特点与选择逻辑最常用的RBF之一具有无限支撑全局影响但衰减极快和无限阶光滑性。其值随距离指数衰减局部性很强。选择它的理由是极高的光滑性和良好的理论性质正定。在插值问题中高斯RBF通常能产生非常平滑的曲面。形状参数ε控制函数的“宽度”是关键的调优参数ε太小函数太宽模型过于平滑可能欠拟合ε太大函数太尖模型振荡剧烈可能过拟合。实操心得实验中表现略优很可能是因为其默认的光滑特性与Sobolev学习追求光滑梯度的目标天然契合。调参选择ε是使用高斯RBF的关键步骤可以通过交叉验证或基于数据点间距的经验公式来设定。2. Multiquadric (多重二次函数)函数形式ψ(r) -√(1 (εr)^2)这里取负号使其条件正定特点与选择逻辑这是一个全局支撑的RBF衰减速度比高斯函数慢多项式衰减。它产生的插值曲面通常比高斯函数更具“弹性”或“刚性”。选择它的理由是它对数据点间距的敏感性相对较低有时在点分布不均匀时表现更稳健。负号是为了满足某些插值求解器的正定性要求。实操心得计算涉及平方根比高斯函数稍慢。它的全局性意味着一个数据点会对远处产生更长期的影响这在某些物理问题建模中可能是优点但在代理模型中可能导致局部特征被平滑过度。3. Cubic (三次函数)函数形式ψ(r) (εr)^3特点与选择逻辑这是一个多项式型的RBF具有全局支撑和最低程度的光滑性二阶连续可导。选择它的理由是计算简单且在某些应用中能产生表现良好的插值。它属于“样条”类函数。实操心得三次函数的光滑性相对较差只有C2连续性在需要高阶梯度信息的Sobolev学习中这可能是一个劣势。其值随距离立方增长必须搭配特定的条件保证插值问题的可解性如添加多项式项。在实际实现中需要特别注意数值稳定性。重要提示对于RBF代理无论选择哪种函数通常都需要在损失函数中添加一个正则化项如Tikhonov正则化或引入多项式项如线性或常数项来保证插值/拟合问题的良态。否则在数据点较多或分布特殊时求解系数可能会面临病态矩阵问题。4. 实验复现与性能对比分析理论分析之后我们进入实战环节。如何复现文中的对比实验并理解其结论这里我结合自己的实现经验拆解关键步骤和注意事项。4.1 实验设置与基准问题集首先要进行比较需要一个公平的“考场”。文中实验从数据剖面图推断很可能使用了诸如 CUTEst 或 COCO 这样的无导数优化测试问题集。这些集合包含了从低维到高维、从光滑到非光滑、从凸到非凸的各种问题能够全面评估算法的鲁棒性。关键参数设置容忍度 τ10^{-4}。这是一个相对收敛标准。例如当算法找到的函数值f_k满足(f_k - f_best) / (|f_0| |f_best|) τ时认为该问题“已解决”。这个值设定了对解精度的要求。计算预算100个单纯形梯度。注意一个单纯形梯度需要n1次函数评估n为维度。因此预算实际上是100*(n1)次真实函数评估。这是算法所能消耗的“最昂贵资源”的上限。评估指标数据剖面图Data Profile。这是无导数优化领域的标准评估工具。横坐标是消耗的单纯形梯度数量即归一化的函数评估次数纵坐标是在给定预算内达到容忍度τ的问题比例。曲线上升得越快、越高说明算法性能越好。4.2 代理加速框架的代码实现要点以下是一个高度简化的伪代码框架用于说明结合Sobolev学习的代理加速单纯形法核心循环import numpy as np from scipy.optimize import minimize from sklearn.neural_network import MLPRegressor # 或用自定义NN from scipy.interpolate import Rbf # 注意标准Rbf可能不支持Sobolev学习需自定义 def surrogate_accelerated_optimization(f_true, x0, max_budget100, dim2): 基于Sobolev学习的代理加速优化框架 f_true: 昂贵的真实函数 x0: 初始点 max_budget: 最大单纯形梯度数预算 dim: 问题维度 # 初始化 data_X [] # 存储采样点 data_f [] # 存储真实函数值 data_grad [] # 存储估计梯度simplex gradient n_simplex_gradients_used 0 # 1. 初始采样构建初始单纯形并计算梯度 initial_simplex construct_initial_simplex(x0, dim) for point in initial_simplex: data_X.append(point) data_f.append(f_true(point)) # 计算初始单纯形各顶点的梯度估计例如中心差分或单纯形梯度公式 estimated_grads estimate_gradients_from_simplex(data_X, data_f) data_grad.extend(estimated_grads) n_simplex_gradients_used 1 while n_simplex_gradients_used max_budget: # 2. 使用Sobolev学习训练代理模型 # 假设我们选择神经网络模型 surrogate_model train_sobolev_nn( Xnp.array(data_X), ynp.array(data_f), gradnp.array(data_grad), activationsoftplus # 可替换为 sigmoid, silu ) # 或训练RBF模型 # surrogate_model train_sobolev_rbf(..., rbf_typegaussian) # 3. 在代理模型上进行局部优化便宜 def cheap_objective(x): return surrogate_model.predict_value(x.reshape(1, -1))[0] # 以当前最好点或某个中心为起点 current_best_idx np.argmin(data_f) x_start data_X[current_best_idx] res minimize(cheap_objective, x_start, methodNelder-Mead, options{maxiter: 50, xatol: 1e-6, fatol: 1e-6}) x_candidate res.x # 4. 对候选点进行昂贵的真实评估 f_candidate f_true(x_candidate) data_X.append(x_candidate) data_f.append(f_candidate) # 5. 更新数据集并重新估计梯度例如围绕新点构建新单纯形或更新局部梯度 new_grad_estimate update_gradient_estimation(data_X, data_f, x_candidate) data_grad.append(new_grad_estimate) n_simplex_gradients_used 1 # 一次真实评估对应一个单纯形梯度在平均意义上 # 检查收敛条件基于真实函数值 if check_convergence(data_f, tau1e-4): break best_idx np.argmin(data_f) return data_X[best_idx], data_f[best_idx], n_simplex_gradients_used关键函数train_sobolev_nn的实现思路标准的MLPRegressor只支持拟合函数值。要实现Sobolev学习需要自定义损失函数。import torch import torch.nn as nn import torch.optim as optim class SobolevNN(nn.Module): def __init__(self, input_dim, hidden_dim, activationsoftplus): super().__init__() self.layer1 nn.Linear(input_dim, hidden_dim) self.layer2 nn.Linear(hidden_dim, 1) if activation softplus: self.act nn.Softplus() elif activation sigmoid: self.act nn.Sigmoid() elif activation silu: self.act nn.SiLU() else: self.act nn.ReLU() def forward(self, x): x self.act(self.layer1(x)) return self.layer2(x) def train_sobolev_nn_torch(X, y, grad, activationsoftplus, epochs500): X: 输入点形状 (m, n) y: 函数值形状 (m,) grad: 梯度形状 (m, n) model SobolevNN(input_dimX.shape[1], hidden_dim20, activationactivation) optimizer optim.Adam(model.parameters(), lr0.01) X_tensor torch.tensor(X, dtypetorch.float32) y_tensor torch.tensor(y, dtypetorch.float32).view(-1, 1) grad_tensor torch.tensor(grad, dtypetorch.float32) for epoch in range(epochs): optimizer.zero_grad() # 前向传播 y_pred model(X_tensor) # 计算梯度自动微分 # 关键我们需要模型对输入的梯度 # 为每个样本点计算梯度 grad_pred_list [] for i in range(X_tensor.shape[0]): x_i X_tensor[i:i1].requires_grad_(True) y_i model(x_i) grad_i torch.autograd.grad(y_i, x_i, create_graphTrue)[0] grad_pred_list.append(grad_i) grad_pred torch.cat(grad_pred_list, dim0) # Sobolev损失 loss_value torch.mean((y_pred - y_tensor) ** 2) loss_grad torch.mean((grad_pred - grad_tensor) ** 2) loss loss_value 0.5 * loss_grad # alpha1, beta0.5 loss.backward() optimizer.step() return model # 返回训练好的模型4.3 结果解读与鲁棒性分析现在来看图5和图6展示的数据剖面图。这两张图是理解结论的关键。图5NN激活函数对比 三条曲线Sigmoid, SiLU, SoftPlus在横坐标消耗的预算增加时解决问题的比例都稳步上升。关键观察点是三条曲线彼此非常接近尤其是在预算消耗的中后期比如60-100个单纯形梯度之后。SoftPlus曲线几乎全程略微在上方意味着在相同的计算预算下使用SoftPlus激活函数的代理加速方法能解决稍多的问题或者能以稍少的预算解决同样多的问题。但差距非常小。这直接支持了“性能对激活函数选择不敏感”的结论。SoftPlus的微弱优势可能归因于其更好的数值稳定性和光滑性使得基于梯度的Sobolev训练过程更顺畅。图6RBF核函数对比 情况与NN类似。Cubic, Multiquadratic, Gaussian三条曲线紧密缠绕Gaussian曲线同样有极其微弱的领先优势。这再次印证了鲁棒性。Gaussian RBF的领先很可能是因为其无限阶可导的性质与Sobolev学习对梯度匹配的要求完美契合使得训练出的代理模型梯度场更平滑。核心结论的实践意义鲁棒性是福音对于算法使用者来说你不需要成为一个调参大师来精心挑选激活函数或RBF核。框架本身对这部分选择不挑剔降低了应用门槛。默认推荐当没有先验知识或时间进行详细测试时直接选择SoftPlus对于NN和Gaussian对于RBF作为默认选项是一个稳健且性能略有保障的策略。性能瓶颈不在函数本身这些曲线的高度最终解决的问题比例和上升速度更多地取决于Sobolev学习框架本身、优化器的设置、超参数如学习率、正则化系数以及初始采样策略。函数选择的影响是二阶的。5. 实战避坑指南与进阶思考根据我复现类似方法的经验有几个地方容易出问题值得你特别注意。5.1 梯度估计的质量是生命线Sobolev学习严重依赖梯度估计的准确性。如果初始的simplex gradient估计误差很大那么代理模型从一开始就会学习到一个错误的梯度场后续的加速引导可能会南辕北辙。避坑技巧初始采样策略不要只用最基础的单纯形。可以考虑使用拉丁超立方采样LHS或 Sobol 序列在搜索空间内采集更多的初始点例如5*(n1)个然后用这些点通过多元线性回归或更稳健的方法如 Savitzky-Golay 滤波结合局部差分来估计每个点的梯度。虽然这会增加初始成本但能极大提升代理模型的初始质量往往事半功倍。梯度估计方法对于高维问题n1个点构成的单纯形估计的梯度可能非常不准确。可以探索使用中心差分需要2n次评估或智能扰动的方法。在每次进行昂贵评估后可以围绕该点额外进行一些廉价的、有方向的扰动来专门估计梯度虽然增加了单次迭代成本但提升了模型质量。损失函数中的权重β如果梯度估计噪声大务必调低Sobolev损失中梯度项的权重β。可以通过验证集来调整α和β的比例。一个简单的启发式方法是β σ_f^2 / σ_g^2其中σ_f是函数值的噪声标准差估计σ_g是梯度估计的噪声标准差估计。5.2 代理模型的复杂性与过拟合代理模型尤其是NN并非越复杂越好。一个过于复杂的模型在少量数据上很容易完美拟合函数值和梯度包括噪声致严重的过拟合。这样的模型在训练点附近表现极好但在未探索区域的行为会变得荒谬误导优化器。避坑技巧模型正则化对于NN强烈使用L2权重衰减weight decay和Dropout即使在浅层网络中也有效。对于RBF使用岭回归Ridge Regression或添加多项式项并配合正则化。早停法划分一小部分数据作为验证集例如20%监控验证集上的Sobolev损失。当验证损失不再下降甚至开始上升时立即停止训练。控制模型容量对于NN隐藏层神经元数量不宜过多例如从2n到10n之间尝试。对于RBF形状参数ε需要通过交叉验证仔细选择。5.3 优化器在代理模型上的配置在代理模型上进行的“廉价优化”也需要配置。常见的错误是让这个优化过程过于“粗糙”或过于“精细”。过于粗糙如果代理模型上的优化迭代次数太少maxiter太小可能无法充分挖掘当前代理模型指引的下降方向浪费了模型的信息。过于精细如果优化精度设置过高xatol/fatol太小会在代理模型这个“近似地图”上做过度的局部搜索而代理模型在远离数据点的区域可能根本不准确导致计算资源的浪费。实操建议将代理模型上的优化视为一个快速的“方向探测”步骤。设置一个中等程度的迭代次数如50-200次和相对宽松的容忍度。我们的目标不是在这个模型上找到精确解而是找到一个有潜力的、值得用真实函数去评估的候选区域。5.4 何时更新与重建代理模型是每获得一个新数据点就更新一次模型在线学习还是积累一定数量如5个新点后批量更新是每次都从头开始训练还是采用增量学习频繁更新模型能更快地适应新信息但计算开销大。批量更新计算效率高但信息滞后。增量训练对于NN可以在之前训练好的模型权重基础上继续训练学习率调小。对于RBF需要重新求解线性系统。我的经验在优化初期函数景观探索不足模型变化大建议每获得1-2个新点就更新一次。到了优化后期搜索集中在局部区域模型变化小可以积累更多点再更新或者只对模型进行微调fine-tune。对于NN增量训练通常效果很好且高效。对于RBF如果问题规模不大每次重建也完全可以接受。最后这个基于Sobolev学习的代理加速框架其强大之处在于将导数信息哪怕是近似的融入了模型训练的先验中。这使得它比单纯拟合函数值的代理模型稳健得多。而我们在函数选择上观察到的鲁棒性恰恰说明了这个框架的成熟度——它不再依赖于某个特定“魔法组件”的细节其性能由更根本的“利用梯度信息进行学习”这一机制所驱动。当你下次面对一个昂贵黑箱函数的优化问题时不妨试试这个思路从实现一个简单的Sobolev学习的SoftPlus NN代理开始它很可能会给你带来惊喜。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2640982.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…