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?1?2(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?=W1?Lupbc??+W2?Ldownbc??+W3?Lphysicsmass??+W4?Lphysicsmomentum??
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?=Nphysics?1?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??=Nupbc??1?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??=Ndownbc??1?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框架求解一維非定常淺水方程的性能,具體結果如下:

  1. 假設的均勻梯形渠道中流量和水位突然變化的場景
    PINN框架和HEC - RAS輸出的速度和水位剖面吻合良好,所有橫截面速度和水位的平均絕對誤差分別為0.002743 m/s和0.001219 m。
    在這里插入圖片描述
    PINN能高精度求解流量基一維淺水方程,預測水位的平均絕對誤差與速度基PINN相近,約為0.0012 m,但流量的平均絕對誤差比速度大,這是因為流量尺度更大且未進行歸一化。
    在這里插入圖片描述

  2. 休斯頓賽普拉斯溪下游的實際案例
    PINN框架和HEC - RAS輸出對比,流量預測的平均絕對誤差在0.0833 - 0.10083 m3/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模型,使其能處理涉及各種水工結構的復雜河流系統,減少對額外理論或經驗方程的依賴。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903226.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903226.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903226.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity Post Processing 小記 【使用泛光實現燈光亮度效果】

一、前言 本篇適用于Unity 2018 - 2019及以上版本,以默認渲染管線為例。文章內容源于個人研究嘗試與網絡資料收集,可能存在不準確之處。初衷是因新版本制作時老的Bloom插件失效,經研究后分享開啟Bloom效果的方法。若在項目中使用Post Proces…

牟乃夏《ArcGIS Engine地理信息系統開發教程》學習筆記3-地圖基本操作與實戰案例

目錄 一、開發環境與框架搭建 二、地圖數據加載與文檔管理 1. 加載地圖文檔(MXD) 2. 動態添加數據源 三、地圖瀏覽與交互操作 1. 基礎導航功能 2. 書簽管理 3. 量測功能 四、要素選擇與屬性查詢 1. 屬性查詢 2. 空間查詢 五、視圖同步與鷹眼…

Qt指ModbusTcp協議的使用

Modbus 是一套通信“語言”(協議),而 RS485 / RS232 / TCP 是通信“管道”(物理接口)。 編寫modubusTcp程序,避免不了調試,首先用到的兩個工具助手 poll是主機,slave是從機。主機也就是發送數據…

探索大語言模型(LLM):自監督學習——從數據內在規律中解鎖AI的“自學”密碼

文章目錄 自監督學習:從數據內在規律中解鎖AI的“自學”密碼一、自監督學習的技術內核:用數據“自問自答”1. 語言建模:預測下一個單詞2. 掩碼語言模型(MLM):填補文本空缺3. 句子順序預測(SOP&a…

CentOS7.9安裝Python 3.10.11并包含OpenSSL1.1.1t

1. 安裝編譯 Python 所需的依賴包 yum -y install gcc make zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel wget2. 安裝 OpenSSL 1.1.1 或更新版本 (自定義路徑安裝的 OpenSSL 1.1.1 不會影響系統原有的…

qt事件過濾與傳遞機制

當點擊 QLabel 時,正常情況下并不會直接觸發 MyWidget 的 mousePressEvent 函數,原因在于事件的傳遞機制和事件過濾器的存在。下面詳細分析這個過程: 事件傳遞機制 在 Qt 里,事件的傳遞是從子控件往父控件冒泡的。不過&#xff…

ubuntu 安裝ollama后,如何讓外網訪問?

官網下載linux版本:https://ollama.com/download/linux 1、一鍵安裝和運行 curl -fsSL https://ollama.com/install.sh | sh 2、下載和啟動deepseek-r1大模型 ollama run deepseek-r1 這種方式的ollama是systemd形式的服務,會隨即啟動。默認開啟了 …

kotlin與MVVM結合使用總結(三)

1. MVVM 架構詳細介紹及源碼層面理解 整體架構 MVVM(Model - View - ViewModel)架構是為了解決視圖和數據模型之間的耦合問題而設計的。它通過引入 ViewModel 作為中間層,實現了視圖和數據的分離,提高了代碼的可維護性和可測試性…

A系統使用iframe嵌套B系統時登錄跨域問題!

我這邊兩個項目都是獨立的,問題是做了跨域配置之后點擊登錄接口調用成功但是頁面沒有跳轉進去 顯示以下報錯 這個錯誤明確指出了問題的核心原因:由于跨站點Cookie設置未正確聲明SameSiteNone,導致瀏覽器攔截了Cookie。這是現代瀏覽器&#x…

消息唯一ID算法參考

VUE // src/utils/idGenerator.js/*** 雪花算法風格的 ID 生成器**//*** 前綴 w代表web端,m代表手機端**/ const DEFAULT_PREFIX = w; const DEFAULT_TOTAL_LENGTH = 16; const CHARS

《WebGIS之Vue零基礎教程》(5)計算屬性與偵聽器

1 計算屬性 1) 什么是計算屬性 :::info 計算屬性就是基于現有屬性計算后的屬性 ::: 2) 計算屬性的作用 計算屬性用于對原始數據的再次加工 3) 案例 :::warning **需求** 實現如下效果 ::: 使用表達式實現 html Document 請輸入一個字符串: 反轉后的字符串: {{msg.split(…

洞悉 NGINX ngx_http_access_module基于 IP 的訪問控制實戰指南

一、模塊概述 ngx_http_access_module 是 NGINX 核心模塊之一,用于基于客戶端 IP 地址或 UNIX 域套接字限制訪問。它通過簡單的 allow/deny 規則,對請求進行最先匹配原則的過濾。與基于密碼(auth_basic)、子請求(auth…

數據中臺-數據質量管理系統:從架構到實戰

一、數據質量管理系統核心優勢解析? ? (一)可視化驅動的敏捷數據治理? 在數據治理的復雜流程中,Kettle 的 Spoon 圖形化界面堪稱一把利器,為數據工程師們帶來了前所未有的便捷體驗。想象一下,你不再需要花費大量時間和精力去編寫冗長且復雜的 SQL 腳本,只需通過簡單…

數據分析之 商品價格分層之添加價格帶

在分析貨品數據的時候,我們會對商品的價格進行分層匯總,也叫價格帶,?? 一、價格帶的定義?? ??價格帶(Price Band)??:將商品按價格區間劃分(如0-50元、50-100元、100-200元等&#xff…

Maven 依賴范圍(Scope)詳解

Maven 依賴范圍&#xff08;Scope&#xff09;詳解 Maven 是一個強大的項目管理工具&#xff0c;廣泛用于 Java 開發中構建、管理和部署應用程序。在使用 Maven 構建項目時&#xff0c;我們經常需要引入各種第三方庫或框架作為項目的依賴項。通過在 pom.xml 文件中的 <depe…

vue3實現v-directive;vue3實現v-指令;v-directive不觸發

文章目錄 場景&#xff1a;問題&#xff1a;原因&#xff1a;? 場景&#xff1a; 列表的操作列有按鈕&#xff0c;通過v-directive指令控制按鈕顯隱&#xff1b;首次觸發了v-directive指令&#xff0c;控制按鈕顯隱正常&#xff1b;但是再次點擊條件查詢后&#xff0c;列表數…

數據結構【樹和二叉樹】

樹和二叉樹 前言1.樹1.1樹的概念和結構1.2樹的相關術語1.3樹的表示方法1.4 樹形結構實際運用場景 2.二叉樹2.1二叉樹的概念和結構2.2二叉樹具備以下特點&#xff1a;2.3二叉樹分類 3.滿二叉樹4.完全二叉樹5.二叉樹性質6.附&#xff1a;樹和二叉樹圖示 前言 歡迎蒞臨姜行運主頁…

css面板視覺高度

css面板視覺高度 touch拖拽 在手機端有時候會存在實現touch上拉或者下拉的樣式操作 此功能實現可以參考&#xff1a; https://blog.csdn.net/u012953777/article/details/147465162?spm1011.2415.3001.5331 面板視覺高度 前提需求&#xff1a; 1、展示端分為兩部分&…

【Linux系統】詳解Linux權限

文章目錄 前言一、學習Linux權限的鋪墊知識1.Linux的文件分類2.Linux的用戶2.1 Linux下用戶分類2.2 創建普通用戶2.3 切換用戶2.4 sudo&#xff08;提升權限的指令&#xff09; 二、Linux權限的概念以及修改方法1.權限的概念2.文件訪問權限 和 訪問者身份的相關修改&#xff08…

路由器的基礎配置全解析:靜態動態路由 + 華為 ENSP 命令大全

&#x1f680; 路由器的基礎配置全解析&#xff1a;靜態&動態路由 華為 ENSP 命令大全 &#x1f310; 路由器的基本概念&#x1f4cd; 靜態路由配置&#x1f4e1; 動態路由協議&#xff1a;RIP、OSPF、BGP&#x1f5a5; 華為 ENSP 路由器命令大全&#x1f539; 路由器基本…