2025.5.4机器学习笔记:PINN文献阅读
2025.5.4周报
- 文献阅读
- 题目信息
- 摘要
- 创新点
- 网络架构
- 实验
- 结论
- 不足以及展望
文献阅读
题目信息
- 题目: Physics-Informed Neural Network Approach for Solving the One-Dimensional Unsteady Shallow-Water Equations in Riverine Systems
- 期刊: Journal of Hydraulic Engineering
- 作者: Zeda Yin, S.M.ASCE; Jimeng Shi; Linlong Bian, S.M.ASCE; William H. Campbell; Sumit R. Zanje, S.M.ASCE; Beichao Hu; and Arturo S. Leon, M.ASCE
- 发表时间: 2025
- 文章链接: https://ascelibrary.org/doi/epdf/10.1061/JHEND8.HYENG-13572
摘要
数值方法在求解非线性偏微分方程时,实际应用中存在一定困难。传统机器学习和深度学习模型依赖大量高质量训练数据,数据成本高且难度大。此外,这些模型多为黑箱模型,计算过程难以解释。尽管PINN近年来在多个领域取得成功,但在浅水方程及水文学和水力学领域的应用研究仍不充分。现有研究多集中于求解其他偏微分方程,且在考虑地形信息和摩擦的明渠水流问题上,尚无有效的PINN框架。基于以上背景,本文旨在提出一种新的PINN框架,以解决一维非稳态浅水方程,为水系统工程问题提供更有效的解决方案。文中详细介绍PINN框架,包括前向步骤、损失函数构建和反向步骤,还对其进行改进以解决大规模问题。通过两个案例验证,结果表明PINN能准确预测流速、流量和水位,且可进行位置和时间外推,但存在训练时间长和泛化性不足的局限。
创新点
该论文使用的PINN是无数据方法,不受数据获取难题限制。且PINN将物理规律数学表达式融入框架,能进行位置和时间外推,提升极端条件下可靠性。
网络架构
SVE由质量守恒方程和动量守恒方程组成,适用于任意形状的横截面,可写为:
∂ U ∂ t + ∂ F ∂ x = S \frac{\partial \mathbf{U}}{\partial t} + \frac{\partial \mathbf{F}}{\partial x} = \mathbf{S} ∂t∂U+∂x∂F=S
其中,向量变量定义为:
U = [ A Q ] , F = [ Q Q 2 A + g I 1 ] , S = [ 0 g A ( S 0 − S f ) ] \mathbf{U} = \begin{bmatrix} A \\ Q \end{bmatrix}, \quad \mathbf{F} = \begin{bmatrix} Q \\ \frac{Q^2}{A} + g I_1 \end{bmatrix}, \quad \mathbf{S} = \begin{bmatrix} 0 \\ g A (S_0 - S_f) \end{bmatrix} U=[AQ],F=[QAQ2+gI1],S=[0gA(S0−Sf)]
A: 横截面湿周面积;Q: 横截面流量; g I 1 g I_1 gI1 : 静水推力; S f S_f Sf:摩擦坡度; S 0 S_0 S0:地形高程坡度;t: 时间;x: 空间坐标。
其中:
g ∂ I 1 ∂ x = g A ∂ h ∂ x g \frac{\partial I_1}{\partial x} = g A \frac{\partial h}{\partial x} g∂x∂I1=gA∂x∂h
摩擦坡度通过Manning方程计算:
S f = ( n v K R 0.667 ) 2 S_f = \left( \frac{n v}{K R^{0.667}} \right)^2 Sf=(KR0.667nv)2
地形高程坡度为:
S 0 = − d z d x S_0 = -\frac{d z}{d x} S0=−dxdz
其中
n: Manning粗糙系数;v: 横截面流速;K: 单位转换因子;R: 水半径;z: 河床高程。
以上是用向量表示,拆开来第一行(即质量守恒),第二行(动量守恒)简化就是如下图所示:
论文的PINN结构如下:
输入: 输入为空间x和时间t
输出: 为流速𝑣及水位h
结构: 全连接多层感知器,8个隐藏层,每层80个隐藏单元,ReLU激活函数。
由于横截面形状复杂,参数(A,P,R,B)无法解析计算。
论文基于DEM数据,采用数值方法计算。
DEM(Digital Elevation Model,数字高程模型)是一种表示地表高程的数字化数据集,通常以网格或点云的形式存储。
它记录了地表在特定位置(通常以经纬度或投影坐标表示)的海拔高度
广泛应用于地理信息系统、水文建模、地形分析、洪水模拟等领域。
DEM数据可以描述地形特征,如河床、坡度、山谷等,对于模拟水流、洪水传播和地形相关计算至关重要。
DEM提供离散采样点,每个点包含横截面距离a和高程b。
然后将高程值转换为相对于预测水深的坐标,如下图所示:
湿周面积A通过梯形规则积分高程和距离:
A = − ∑ i = 1 n − 1 ( b i + 1 + b i ) ∗ ( a i + 1 − a i ) 2 A = -\sum_{i=1}^{n-1} \frac{(b_{i+1} + b_i) * (a_{i+1} - a_i)}{2} A=−∑i=1n−12(bi+1+bi)∗(ai+1−ai)
湿周周长P累加相邻点间的欧几里得距离:
P = ∑ i = 1 n − 1 ( a i + 1 − a i ) 2 + ( b i + 1 − b i ) 2 P = \sum_{i=1}^{n-1} \sqrt{(a_{i+1} - a_i)^2 + (b_{i+1} - b_i)^2} P=∑i=1n−1(ai+1−ai)2+(bi+1−bi)2
水面半径R和顶部宽度B直接从A,P和边界点计算:
R = A P R = \frac{A}{P} R=PA
B = a m − a k B = a_m - a_k B=am−ak
损失函数: 损失函数包括上游边界、下游边界、质量方程和动量方程损失组成。
由于各部分量级差异,比如,水位h为102而偏导数 ∂ h ∂ t \frac{\partial h}{\partial t} ∂t∂h为10-3-10-8,直接求和会导致优化偏向某些分量。每个损失分量乘以权重( W 1 − W 4 W_1 −W_4 W1−W4),使其量级接近,权重通过边界条件的量级和网格划分,如下图所示:
L total = W 1 L up b c + W 2 L down b c + W 3 L physics m a s s + W 4 L physics m o m e n t u m \mathcal{L}_{\text{total}} = W_1 \mathcal{L}_{\text{up}_{bc}} + W_2 \mathcal{L}_{\text{down}_{bc}} + W_3 \mathcal{L}_{\text{physics}_{mass}} + W_4 \mathcal{L}_{\text{physics}_{momentum}} Ltotal=W1Lupbc+W2Ldownbc+W3Lphysicsmass+W4Lphysicsmomentum
PDE残差项基于SVE:
L physics = 1 N physics ∑ i = 1 N physics ∣ ∂ U ∂ t + ∂ F ∂ x − S ∣ 2 \mathcal{L}_{\text{physics}} = \frac{1}{N_{\text{physics}}} \sum_{i=1}^{N_{\text{physics}}} \left| \frac{\partial \mathbf{U}}{\partial t} + \frac{\partial \mathbf{F}}{\partial x} - \mathbf{S} \right|^2 Lphysics=Nphysics1∑i=1Nphysics ∂t∂U+∂x∂F−S 2
上游边界条件损失:
L up b c = 1 N up b c ∑ i = 1 N up b c ∣ v ^ b c − v b c ∣ 2 \mathcal{L}_{\text{up}_{bc}} = \frac{1}{N_{\text{up}_{bc}}} \sum_{i=1}^{N_{\text{up}_{bc}}} \left| \hat{v}_{bc} - v_{bc} \right|^2 Lupbc=Nupbc1∑i=1Nupbc∣v^bc−vbc∣2
下游边界条件损失:
L down b c = 1 N down b c ∑ i = 1 N down b c ∣ h ^ b c − h b c ∣ 2 \mathcal{L}_{\text{down}_{bc}} = \frac{1}{N_{\text{down}_{bc}}} \sum_{i=1}^{N_{\text{down}_{bc}}} \left| \hat{h}_{bc} - h_{bc} \right|^2 Ldownbc=Ndownbc1∑i=1Ndownbc h^bc−hbc 2
其中:
N physics {N_{\text{physics}}} Nphysics为配点总数; N up b c {N_{\text{up}_{bc}}} Nupbc与 N down b c {N_{\text{down}_{bc}}} Ndownbc上下游边界点数; W 1 − W 4 W_1 −W_4 W1−W4为权重;
实验
实验采用多阶段训练策略,如下图所示:
分阶段优化边界和物理方程,模拟了先确定边界再求解内部场的逻辑,加速收敛。论文将训练分为三个阶段优化。
第一阶段为放大边界条件权重,优先优化边界收敛。
第二阶段则平衡权重,降低学习率,优化SVE残差。
第三阶段略微增加SWEs权重,进一步提高精度。
论文通过假设和实际场景研究展示了PINN框架求解一维非定常浅水方程的性能,具体结果如下:
-
假设的均匀梯形渠道中流量和水位突然变化的场景
PINN框架和HEC - RAS输出的速度和水位剖面吻合良好,所有横截面速度和水位的平均绝对误差分别为0.002743 m/s和0.001219 m。
PINN能高精度求解流量基一维浅水方程,预测水位的平均绝对误差与速度基PINN相近,约为0.0012 m,但流量的平均绝对误差比速度大,这是因为流量尺度更大且未进行归一化。
-
休斯顿赛普拉斯溪下游的实际案例
PINN框架和HEC - RAS输出对比,流量预测的平均绝对误差在0.0833 - 0.10083 m³/s之间,水位预测的平均绝对误差在0.0152 - 0.079 m之间,PINN输出趋势对流量和水位略有低估。
通过追踪内部横截面在每次迭代中的损失函数值,发现存在全局最小值,证明PINN框架理论上可获得一维浅水方程的小残差解。
PINN在计算域内的位置外推结果准确,平均绝对误差甚至小于非外推预测结果。
在计算域外进行外推测试,与边界位置的结果无显著差异,表明PINN可在域外进行合理外推。
以水位站记录的历史数据为参考,对未来30小时进行外推,外推结果的平均绝对误差与非外推预测相似,趋势与历史曲线拟合良好。
代码如下:
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from uuid import uuid4# 设置随机种子,确保可重复性
tf.random.set_seed(42)
np.random.seed(42)# 物理参数
g = 9.81 # 重力加速度 (m/s^2)
n = 0.013 # Manning粗糙系数
K = 1.0 # 单位转换因子(SI单位)# DEM数据
def compute_hydraulic_params(h, x):# 假设梯形横截面:底宽2m,边坡1:1b0 = 2.0 # 底宽z = 1.0 # 边坡A = h * (b0 + z * h) # 湿周面积P = b0 + 2 * h * tf.sqrt(1 + z**2) # 湿周周长R = A / P # 液压半径B = b0 + 2 * z * h # 顶部宽度S0 = -0.001 # 假设地形坡度(简化)return A, P, R, B, S0# 定义神经网络模型
class PINN(tf.keras.Model):def __init__(self):super(PINN, self).__init__()# 8层全连接网络,每层80个单元,ReLU激活self.layers_list = [tf.keras.layers.Dense(80, activation='relu') for _ in range(8)]self.output_layer = tf.keras.layers.Dense(2) # 输出:v(流速),h(水位)def call(self, inputs):x, t = inputs[:, 0:1], inputs[:, 1:2]X = tf.concat([x, t], axis=1)for layer in self.layers_list:X = layer(X)return self.output_layer(X) # [v, h]# 计算物理残差
def compute_physics_loss(model, x, t):with tf.GradientTape(persistent=True) as tape:tape.watch([x, t])inputs = tf.concat([x, t], axis=1)vh = model(inputs) # 预测 [v, h]v, h = vh[:, 0:1], vh[:, 1:2]# 计算一阶偏导数dv_dx = tape.gradient(v, x)dh_dx = tape.gradient(h, x)dh_dt = tape.gradient(h, t)# 计算水文参数A, P, R, B, S0 = compute_hydraulic_params(h, x)# 摩擦坡度Sf = (n * v / (K * tf.pow(R, 2/3)))**2# 质量守恒方程残差(简化形式,公式18)res_mass = dh_dt + (A / B) * dv_dx + v * dh_dx# 动量守恒方程残差(忽略Q^2/A项,简化)res_momentum = g * A * (dh_dx + Sf - S0)# L2范数平方损失loss_mass = tf.reduce_mean(tf.square(res_mass))loss_momentum = tf.reduce_mean(tf.square(res_momentum))return loss_mass, loss_momentum# 计算边界条件损失
def compute_bc_loss(model, x_bc, t_bc, v_bc, h_bc):inputs = tf.concat([x_bc, t_bc], axis=1)vh = model(inputs)v_hat, h_hat = vh[:, 0:1], vh[:, 1:2]# 上游流速损失loss_up_bc = tf.reduce_mean(tf.square(v_hat - v_bc)) if v_bc is not None else 0.0# 下游水位损失loss_down_bc = tf.reduce_mean(tf.square(h_hat - h_bc)) if h_bc is not None else 0.0return loss_up_bc, loss_down_bc# 训练函数
def train_pinn(model, x_physics, t_physics, x_bc_up, t_bc_up, v_bc_up, x_bc_down, t_bc_down, h_bc_down, epochs, lr, weights):optimizer = tf.keras.optimizers.Adam(learning_rate=lr)for epoch in range(epochs):with tf.GradientTape() as tape:# 物理残差loss_mass, loss_momentum = compute_physics_loss(model, x_physics, t_physics)# 边界条件loss_up_bc, loss_down_bc = compute_bc_loss(model, x_bc_up, t_bc_up, v_bc_up, x_bc_down, t_bc_down, h_bc_down)# 总损失loss = (weights[0] * loss_up_bc + weights[1] * loss_down_bc +weights[2] * loss_mass + weights[3] * loss_momentum)gradients = tape.gradient(loss, model.trainable_variables)optimizer.apply_gradients(zip(gradients, model.trainable_variables))if epoch % 100 == 0:print(f"Epoch {epoch}, Loss: {loss.numpy():.6f}, "f"BC_up: {loss_up_bc.numpy():.6f}, BC_down: {loss_down_bc.numpy():.6f}, "f"Mass: {loss_mass.numpy():.6f}, Momentum: {loss_momentum.numpy():.6f}")# 主函数
def main():L = 79.25 # 渠道长度T = 600.0 # 时间范围N_physics = 1000 # 物理配点数N_bc = 100 # 边界点数x_physics = tf.random.uniform((N_physics, 1), 0, L)t_physics = tf.random.uniform((N_physics, 1), 0, T)# 生成边界点t_bc = tf.random.uniform((N_bc, 1), 0, T)x_bc_up = tf.zeros_like(t_bc) # 上游 x=0x_bc_down = L * tf.ones_like(t_bc) # 下游 x=L# 模拟边界条件v_bc_up = tf.sin(2 * np.pi * t_bc / T) * 0.5 + 0.5 # 上游流速尖峰h_bc_down = tf.sin(2 * np.pi * t_bc / T) * 0.2 + 0.5 # 下游水位尖峰# 初始化模型model = PINN()# 多阶段训练stages = [# 第一阶段:优先优化边界条件{"epochs": 5000, "lr": 1e-4, "weights": [1.0, 1.0, 0.1, 0.1]},# 第二阶段:平衡物理和边界{"epochs": 4000, "lr": 1e-5, "weights": [1.0, 1.0, 1.0, 1.0]}]for stage in stages:print(f"训练阶段:学习率={stage['lr']}, 权重={stage['weights']}")train_pinn(model, x_physics, t_physics,x_bc_up, t_bc, v_bc_up,x_bc_down, t_bc, h_bc_down,stage["epochs"], stage["lr"], stage["weights"])x_test = tf.linspace(0, L, 100)[:, None]t_test = tf.ones_like(x_test) * 300.0 # t=300sinputs = tf.concat([x_test, t_test], axis=1)vh_pred = model(inputs)v_pred, h_pred = vh_pred[:, 0], vh_pred[:, 1]plt.figure(figsize=(10, 5))plt.plot(x_test, v_pred, label="预测流速 (v)")plt.plot(x_test, h_pred, label="预测水位 (h)")plt.xlabel("x (m)")plt.ylabel("值")plt.legend()plt.savefig("pinn_result.png")plt.close()if __name__ == "__main__":main()
结论
本文提出并测试了用于求解一维非定常浅水方程的物理信息神经网络。PINN框架能准确预测假设场景和历史洪水场景结果,误差小。可求解基于速度和流量的浅水方程,能对下游赛普拉斯溪案例在大流量下准确预测流量和水位。响应面表明PINN理论上可获小残差解,还能进行位置和时间外推,与参考数据高度吻合。
不足以及展望
PINN训练时间长,因优化器找最优解难,且本文方法集成数值计算,GPU处理表现差。且PDE在边界和初始条件不确定时有无限解,PINN只能在特定边界条件下求近似解,不同条件需重新训练。后续希望探索优化训练算法或硬件加速方式,减少PINN训练时间,如改进GPU对数值计算的处理能力。将边界条件作为输入变量,扩大浅水方程近似形式,使其能在一定边界条件范围内回归方程。完善PINN模型,使其能处理涉及各种水工结构的复杂河流系统,减少对额外理论或经验方程的依赖。
相关文章:
2025.5.4机器学习笔记:PINN文献阅读
2025.5.4周报 文献阅读题目信息摘要创新点网络架构实验结论不足以及展望 文献阅读 题目信息 题目: Physics-Informed Neural Network Approach for Solving the One-Dimensional Unsteady Shallow-Water Equations in Riverine Systems期刊: Journal o…...
一行命令打开iOS模拟器
要在 Mac 命令行打开 iPhone 15 Pro 模拟器,需满足已安装 Xcode 这一前提条件,以下是具体操作步骤: 步骤一:列出所有可用模拟器设备 打开终端(Terminal),输入并执行以下命令,用于列…...
java面向对象编程【基础篇】之基础语法
目录 🚀前言🌟构造器💯案例 🤔this关键字💯使用this调用本类中的属性💯使用this调用构造器💯this表示当前对象 🦜封装💯合理隐藏💯合理暴露 🐧实体…...
跑MPS产生委外采购申请(成品)
问题:跑MPS产生委外采购申请(成品),更改BOM和跑MRP,但物料需求清单中无新增物料复合膜的需求。截图如下: 解决方法:更改委外采购申请的批准日期为BOM的生效日和重新展开bom。 重新展开后&#x…...
[flutter]切换国内源(window)
如题,切换到国内源避免总是连不上google导致卡住的问题。 临时切换到国内: cmd set PUB_HOSTED_URLhttps://pub.flutter-io.cn set FLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cnpower shell $env:PUB_HOSTED_URL "https://pub.flut…...
学习海康VisionMaster之顶点检测
一:进一步学习了 今天学习下VisionMaster中的顶点检测:可检测图像指定区域内的顶点,并输出顶点坐标等信息。该模块常用于检测目标物体的顶点 二:开始学习 1:什么是顶点检测? 一个不是很规则的物体需要检测…...
Vue2中常用的核心函数(选项和生命周期钩子)的完整示例及总结
以下是Vue2中常用的核心函数(选项和生命周期钩子)的完整示例及总结: 1. 实例选项函数 data 初始化组件数据 new Vue({el: #app,data() {return {message: Hello Vue!};} });methods 定义组件方法 new Vue({el: #app,data() {return { c…...
数据集-目标检测系列- F35 战斗机 检测数据集 F35 plane >> DataBall
数据集-目标检测系列- F35 战斗机 检测数据集 F35 plane >> DataBall DataBall 助力快速掌握数据集的信息和使用方式。 贵在坚持! * 相关项目 1)数据集可视化项目:gitcode: https://gitcode.com/DataBall/DataBall-detections-100s…...
2025年3月AGI技术月评|技术突破重构数字世界底层逻辑
〔更多精彩AI内容,尽在 「魔方AI空间」 ,引领AIGC科技时代〕 本文作者:猫先生 ——当「无限照片」遇上「可控试穿」,我们正在见证怎样的智能革命? 被低估的进化:开源力量改写游戏规则 当巨头们在AGI赛道…...
【k8s】k8s是怎么实现自动扩缩的
Kubernetes 提供了多种自动扩缩容机制,主要包括 Pod 水平自动扩缩(HPA)、垂直 Pod 自动扩缩(VPA) 和 集群自动扩缩(Cluster Autoscaler)。以下是它们的实现原理和配置方法: 1. Pod …...
协作开发攻略:Git全面使用指南 — 引言
协作开发攻略:Git全面使用指南 — 引言 Git 是一种分布式版本控制系统,用于跟踪文件和目录的变更。它能帮助开发者有效管理代码版本,支持多人协作开发,方便代码合并与冲突解决,广泛应用于软件开发领域。 文中内容仅限技…...
【AI提示词】私人教练
提示说明 以专业且细致的方式帮助客户实现健康与健身目标,提升整体生活质量。 提示词 # Role: 私人教练## Profile - language: 中文 - description: 以专业且细致的方式帮助客户实现健康与健身目标,提升整体生活质量 - background: 具备丰富的健身经…...
【星海出品】Calico研究汇总
Calico项目由Tigera公司发起并主导开发 源码 https://github.com/projectcalico/calico?tabreadme-ov-file#-join-the-calico-community 简介 Tigera是一家专注于云原生安全的公司,于2016年成立,其核心产品包括开源的Calico项目以及商业版的Calico Ent…...
观成科技:摩诃草组织Spyder下载器流量特征分析
一、概述 自2023年以来,摩诃草组织频繁使用Spyder下载器下载远控木马,例如Remcos。观成安全研究团队对近几年的Spyder样本进行了深入研究,发现不同版本的样本在数据加密、流量模式等方面存在差异。基于此,我们对多个版本样本的通…...
中心极限定理(CLT)习题集 · 题目篇
中心极限定理(CLT)习题集 题目篇 共 18 题,覆盖经典 CLT、Lyapunov/Lindeberg 条件、Berry–Esseen 评估、 以及工程/数据科学应用与编程仿真。推荐先独立完成,再看《答案与解析篇》。 之前已经出过相关的知识点文章,…...
ITL和TTL线程间值的传递
InheritableThreadLocal InheritableThreadLocal 继承自 ThreadLocal,增加了父线程到子线程的值传递功能。当一个新线程被创建时,InheritableThreadLocal 会将父线程中 ThreadLocal 变量的值拷贝到子线程(浅拷贝),子线…...
Android学习总结之Room篇
一、Room 框架基础 1. 实体类(Entity) 实体类用于描述数据库表的结构。通过使用 Entity 注解,可以将一个 Java 类映射到数据库中的一张表。例如,以下是一个简单的 User 实体类: import androidx.room.Entity; impor…...
java IO流
一:概述 (1)IO (2)流 二:分类 (1)流向 (2)数据单位 (3)IO流角色 三:API (1)InputStream ÿ…...
STM32 串口USART
目录 常见的通信方式 串行通信和并行通信 全双工,半双工和单工通信 同步通信和异步通信 通信速率 常见的通信协议 串口基础知识 电平特性 串口传输协议 STM32F103的USART资源 端口引脚 数据寄存器单元 发送接收控制单元 实现串口发送 printf…...
数字IC后端项目典型问题之后端实战项目问题记录(2025.04.24)
今天给大家分享下近两天小编帮助学员解决的几个经典后端项目问题。希望能够对大家的学习和工作有所帮助。 Q1:在做a7top顶层物理验证Calibre LVS检查时提示NOT COMPARED,请问是什么原因? 我们在用calibre检查LVS后,其结果基本上就是以下三种…...
关于边缘计算盒子的外部接口保护
边缘计算盒子是一种基于边缘计算和人工智能技术的智能设备,它内置了灵活可配的多样化AI算法库,所以也被称为AI算法盒子或智能边缘分析一体机,可以将数据处理和分析的能力推至离数据源最近的边缘位置,提供高效的数据处理和实时响应…...
OCP考试需要注意什么?
一、OCP考试需要准备的资料 身份证件:携带有效的身份证件(如身份证、护照等),以便在考试当天进行身份验证。确保身份证件在考试当天仍然有效,并且与报名时使用的证件一致。 准考证:打印并携带准考证&…...
git Http改用户下载
用原先别人账号,无权下更新 http方式设置自己账号 例如 git fetch --all 提示没有权限从 http://192.168.1.2/gitlab/项目路径.git下载 git remote set-url origin http://your-username192.168.1.2/gitlab/项目路径.git your-username修改成自己的git账号 需要输入一个Tok…...
postgres 导出导入(基于数据库,模式,表)
在 PostgreSQL 中,导出和导入数据库、模式(schema)或表的数据可以使用多种工具和方法。以下是常用的命令和步骤,分别介绍如何导出和导入整个数据库、特定的模式以及单个表的数据。 一、导出数据 1. 使用 pg_dump 导出整个数据库…...
把dll模块注入到游戏进程的方法_挂起进程注入
一. 概述 挂起进程注入是指在创建进程的时候把运行状态设置为挂起,然后创建一个远程线程,来注入。挂起进程注入作为远线程注入的一个补充,可以在进程创建的时候就注入,从而注入时间较早,不宜被拦截。易知挂起进程注入的局限性也就是如果进程已经启动,那么这种注入方式就…...
TypeScript 开发实战:如何安全替换字符串中的关键字
在 TypeScript 开发中,我们经常需要处理字符串替换的场景。最近我在开发一个表达式解析功能时,遇到了一个有趣的挑战:如何将用户输入的简化数学表达式(如"sin")替换为标准形式(如"Math.sin&…...
ES6 模块化 与 CommonJS 的核心概念解析
以下是关于 ES6 模块化 与 CommonJS 的核心概念解析、知识点总结及使用场景说明: 1. ES6 模块化与 CommonJS 是什么? ES6 模块化(ECMAScript Modules, ESM) 定义:ES6 标准引入的模块系统,使用 import 和 …...
【踩坑记录】stm32 jlink程序烧录不进去
最近通过Jlink给STM32烧写程序时一直报错,但是换一个其他工程就可以烧录,对比了一下jink配置,发现是速率选太高了“SW Device”,将烧录速率调整到10MHz以下就可以了...
CS144 Lab 6 实战记录:构建 IP 路由器
1 实验背景与目标 在 CS144 的 Lab 6 中,我们需要在之前实现的 NetworkInterface(Lab 5)基础上构建一个完整的 IP 路由器。路由器的主要任务是根据路由表将接收到的 IP 数据报转发到正确的网络接口,并发送给正确的下一跳…...
AI与智能能源管理:如何通过AI优化能源分配和消耗?
引言:能源管理面临的新挑战 在“双碳”目标持续推进的背景下,能源管理已经不再是简单的节电节水问题,而是关乎可持续发展和企业长期竞争力的核心议题。无论是工业园区、写字楼,还是家庭用户,能源的使用正在变得越来越复…...
【蓝桥杯】产值调整
产值调整 题目描述 偏远的小镇上,三兄弟共同经营着一家小型矿业公司“兄弟矿业”。公司旗下有三座矿山:金矿、银矿和铜矿,它们的初始产值分别用非负整数 A A A、 B B B 和 C C C 表示。这些矿山的产出是小镇经济的核心,支撑着…...
使用Next.js构建单页面React应用
最近遇到一个问题 突然要一个单页面的项目 用惯了Next.js 而 create-react-app 又不推荐且不灵活 最终找发现Nextjs也支持单页面应用 以下是使用Next.js构建单页面React应用过程 1 正常创建项目 (我选择的是Pages Router 而非 AppRoute) 2 修改配置文件 next.config.ts impor…...
Python字符串三剑客:len()、split()、join()深度解析
目录 一、len():字符串的"测谎仪" 二、split():字符串的"解剖刀" 参数解析: 实战场景: 三、join():字符串的"缝合怪" 性能优势: 实战案例: 高级技巧&…...
大模型是如何生成内容的?
大模型(如 GPT、Claude、LLaMA 等)生成内容的过程,其实就是一个 逐词预测上下文推理 的过程。我们可以把它想象成一个“超级自完成引擎”:每一步都在问自己—— “在目前上下文下,最合理的下一个词是什么?”…...
Python元组全面解析:从基础到高级应用指南
一、元组基础概念与核心特性 1.1 元组的本质定义 元组(Tuple)是Python中重要的不可变序列类型,由多个元素组成的有序集合。其核心特性表现在: 元素按插入顺序存储,支持索引访问所有元素存储在连续内存空间ÿ…...
Docker部署DeepSeek常见问题及解决方案
在使用Docker部署DeepSeek的过程中,许多开发者可能会遇到一些常见问题。本文整理了几个高频问题及其解决方案,帮助大家更顺利地完成部署。 镜像拉取失败 问题现象 执行 docker pull 命令时,提示超时或镜像不存在。 可能原因 1. 网络环境不稳定,导致连接Docker Hub失败…...
身份证实名认证接口数字时代的信任基石-node.js实名认证集成
在互联网深度渗透生活的当下,从线上购物、社交娱乐到金融理财、政务办理,每一次指尖的触碰都在虚拟世界中留下痕迹。身份证实名认证作为连接现实身份与网络身份的桥梁,正以其不可替代的作用,重塑着数字时代的信任体系。它不仅是保…...
多维时序 | LightGBM多变量时序预测(Matlab完整源码和数据,适合基础小白研究)
多维时序 | LightGBM多变量时序预测(Matlab完整源码和数据,适合基础小白研究) 目录 多维时序 | LightGBM多变量时序预测(Matlab完整源码和数据,适合基础小白研究)效果一览基本介绍程序设计参考资料 效果一览…...
强化学习(Reinforcement Learning, RL)和深度学习(Deep Learning, DL)
强化学习(Reinforcement Learning, RL)和深度学习(Deep Learning, DL)是人工智能领域两个重要的研究方向,虽然二者可以结合(如深度强化学习),但其核心思想、目标和应用场景存在本质区…...
图论---Prim堆优化(稀疏图)
题目通常会提示数据范围: 若 V ≤ 500,两种方法均可(朴素Prim更稳)。 若 V ≤ 1e5,必须用优先队列Prim vector 存图。 #include <iostream> #include <vector> #include <queue> #include <…...
【优秀三方库研读】【C++基础知识】odygrd/quill -- 折叠表达式
compute_encoded_size_and_cache_string_lengths 方法中这段代码是一个C的折叠表达式(fold expression)的应用,用于计算多个参数编码后的总大小。下面我将详细解释这段代码的每个部分,并说明为什么这样写。 代码如下: …...
优化Nginx的下载功能
缘起: 我购置了一台阿里云ECS,其EIP带宽3m/s,但是在其上的作为下载文件的服务器nginx提供的下载速度仅有几百KB。 分析: 既然没有达到带宽瓶颈,肯定存在优化的空间。浮现脑海的想法,nginx没有进行最佳配置…...
Vue3集成浏览器API实时语音识别
效果示例 用法 <!-- 浏览器语音识别 --> <BrowserSpeechRecognitionModal v-if"showModal" :isOpen"showModal" close"showModal false" confirm"handleRecognitionResult" />const showModal ref(false); const input…...
Python3 基础:函数定义与调用
Python3 基础:函数定义与调用 什么是函数?一、函数的定义二、函数的调用三、函数参数3.1位置参数3.2关键字参数3.3默认参数值3.4可变数量的参数args:接收任意数量的位置参数**kwargs:接收任意数量的关键字参数 3.5 综合使用各种参…...
Vue 2 的响应式 API 和 Vue 3 的组合式 API 的详细对比,从核心机制、使用方式、代码示例及优缺点展开
以下是 Vue 2 的响应式 API 和 Vue 3 的组合式 API 的详细对比,从核心机制、使用方式、代码示例及优缺点展开: 1. Vue 2 的响应式 API 核心机制 基于 Object.defineProperty: 通过劫持对象的 getter 和 setter 实现数据变化追踪。限制&…...
修改了Element UI中组件的样式,打包后样式丢失
修改了Element UI中组件的样式,在本地运行没有问题,但是打包到线上发现样式丢失(样式全部不生效、或者有一部分生效,一部分不生效),问题在于css的加载顺序导致代码编译后样式被覆盖了, 解决办法…...
大模型工业化元年:GPT-5开启通用AI新纪元,中国技术如何破局?
过去一周,AI领域的焦点无疑是OpenAI发布的GPT-5预览版,以及全球大模型技术从实验室迈向工业化的关键转折。这场变革不仅标志着通用人工智能(AGI)的进一步逼近,更掀起了全球产业链的竞争与反思。本文将从技术突破、产业…...
离线电脑安装python包
离线电脑安装python第三方库 在联网电脑上下载Python包 使用pip安装所需的包,例如 pip install requests numpy导出已安装的包列表 pip freeze > requirements.txt根据requirements.txt下载包及其所有依赖项到指定目录: pip download -r require…...
【Unity AR开发插件】一、高效热更新:Unity AR 插件结合 HybridCLR 与 ARFoundation 的开源仓库分享
摘要 本篇博客详细介绍了我基于 HybridCLR 与 AR Foundation 的 Unity AR 开发插件,旨在为开发者提供高效的跨平台热更新方案。文章从背景与动机出发,覆盖一键安装工具、环境配置、热更新数据制作与示例程序运行等核心模块,并展示代码结构与使…...
深入浅出学会函数(下)
5. return语句 在函数的设计中,函数中经常会出现return语句,这里讲一下return语句使用的注意事项。 return 后面可以是一个数值,也可以是一个表达式,如果是表达式先执行表达式,再返回表达式的结果。return 后面也可以…...