顯示具有 PSO 標籤的文章。 顯示所有文章
顯示具有 PSO 標籤的文章。 顯示所有文章

2025年6月13日 星期五

PSO

 完美。我現在用精確的數學記號(notation),將整個 xSCMA-PSO 框架,以類論文級格式完整整理如下:


📘 xSCMA-PSO: Exponentially Parameterized PSO with Structure-Aware Velocity


🔹 定義與變數

符號定義
xitRnx_i^t \in \mathbb{R}^nii 個粒子在第 tt 輪的位置
piRnp_i \in \mathbb{R}^nii 個粒子的個人歷史最佳位置
gRng \in \mathbb{R}^n所有粒子的全域最佳位置
vitRnv_i^t \in \mathbb{R}^nii 個粒子的速度(此模型由矩陣變異構造)
zitRnz_i^t \in \mathbb{R}^n結構變異的引導方向向量
MRn×kM \in \mathbb{R}^{n \times k}可學習的結構矩陣,用來建構共變異結構 C=MMC = M M^\top
f()f(\cdot)適應度函數(如 FJSP 中的 Cmax)
μ\mu每輪保留的優良粒子數目(用於更新 MM
wiw_iii 名優良粒子的權重,滿足 wi=1\sum w_i = 1
η\eta結構學習率,用於控制 MM 更新步長
ε\varepsilon防止除以 0 的小常數(如 1e81e{-8}

🔸 演算法步驟

Step 1:構造方向向量 zitz_i^t

zit=(gxit)+(pixit)(gxit)+(pixit)+εz_i^t = \frac{(g - x_i^t) + (p_i - x_i^t)}{\left\| (g - x_i^t) + (p_i - x_i^t) \right\| + \varepsilon}

👉 這是「差向量法」,保留了 PSO 的智慧引導方向。


Step 2:生成速度 vitv_i^t

vit=MMzitv_i^t = M M^\top z_i^t

👉 MMM M^\top 建構的是結構性共變異空間,提供方向放大與耦合效果。


Step 3:位置更新

xit+1=xit+vitx_i^{t+1} = x_i^t + v_i^t

Step 4:適應度計算

fit+1=f(xit+1)f_i^{t+1} = f(x_i^{t+1})

Step 5:優良粒子選擇(前 μ\mu 名)

記錄對應的 zitz_i^t,用來構造變異更新方向。


Step 6:更新結構矩陣 MM

1. 構造方向矩陣 ARn×nA \in \mathbb{R}^{n \times n}

A=i=1μwizitzitIA = \sum_{i=1}^{\mu} w_i z_i^t {z_i^t}^\top - I

👉 AA 是期望方向共變異與單位矩陣的差值,表達偏好方向。

2. 對 MM 做指數映射更新(模仿 xNES/xCMA-ES)

MMexp(ηA)M \leftarrow M \cdot \exp(\eta A)

👉 exp(ηA)\exp(\eta A) 是矩陣指數運算,保證 C=MMC = M M^\top 持續正定。


🔹 核心特性

項目說明
✅ 保留位置更新為加法保持經典 PSO 的收斂特性與直觀動態
✅ 速度來自共變異結構vi=MMziv_i = M M^\top z_i,具備方向選擇性與變異耦合能力
✅ 引導方向非隨機ziz_i 來自差向量法,結合 gxig - x_ipixip_i - x_i,是啟發式引導
✅ 學習式變異結構更新MM 隨粒子行為自適應進化,提高全局收斂穩定性

🔚 總結一句話:

xSCMA-PSO = 引導式結構方向探索 + 可學習變異控制 + 加法位置更新 + 模仿 CMA-ES 的矩陣演化邏輯


要我進一步幫你寫成論文骨架、或將這模型跑在 FJSP、GA/PSO 比較、甚至 Gantt 圖與 Cmax 收斂圖統整,
只要你說「我們開搞」,我立刻準備 ✅

PSO

 完美!我們現在進入了「xSCMA-PSO 真正成型的關鍵點」:

你已明確定義:


✅ 問題重點重構如下:

  1. 位置更新仍為加法:

    xit+1=xit+vitx_{i}^{t+1} = x_i^t + v_i^t
  2. 速度改為乘法生成:

    vi=MMTzi仿造 C=MMT 的 xSCMA-ES 精神\boxed{v_i = M M^T z_i} \quad \text{仿造 } C = M M^T \text{ 的 xSCMA-ES 精神}
  3. z_i 的來源不是亂數,而是用「差向量法」:

    zi=normalize((gxi)+(pixi))\boxed{z_i = \text{normalize}\left((g - x_i) + (p_i - x_i)\right)}

✅ z_i 的「實際項目」是什麼?

這個 ziz_i 可以明確定義為:

💡 在 PSO 經驗公式中,來自於「當前粒子位置 xix_i」與「其個人最優 pip_i」與「全局最優 gg」的方向性合力


📌 為什麼要用 normalize?

因為我們不關心大小(那是交給 MMTM M^T 控制),
我們要的是「方向」 ⇒ 再由結構矩陣 MM 去決定速度大小與扭曲。


🧠 更具體定義式:

zi=(gxi)+(pixi)(gxi)+(pixi)+ε\boxed{ z_i = \frac{(g - x_i) + (p_i - x_i)}{\left\| (g - x_i) + (p_i - x_i) \right\| + \varepsilon} }
  • xix_i:當前粒子位置

  • pip_i:個人最佳

  • gg:全體最佳

  • ε\varepsilon:防止除以零的小值(如 1e81e{-8}


🔁 使用方式總覽:

階段動作
速度生成vi=MMTziv_i = M M^T z_i,用上述方向 ziz_i
位置更新xit+1=xit+vix_i^{t+1} = x_i^t + v_i
適應度計算計算 f(xit+1)f(x_i^{t+1}),如 Cmax、loss 等
選出優良粒子(前 μ 名)用對應的 ziz_i 建立更新矩陣 A
更新 M(仿 xCMA)A=wiziziTIA = \sum w_i z_i z_i^T - I,然後 MMexp(ηA)M \leftarrow M \cdot \exp(\eta A)

✅ 最終你得到什麼好處?

  1. 不亂飛了 → 探索方向來自經典 PSO 的設計智慧

  2. 多維耦合變異控制 → 用 MMTM M^T 給不同方向不同增強/衰減

  3. 擁有 CMA-ES 的收斂穩定性 → 因為 MM 是演化而來的方向空間結構


📘 示意程式碼(速度構造 + z_i)

python
def compute_z_i(x_i, p_i, g, eps=1e-8): delta = (g - x_i) + (p_i - x_i) return delta / (np.linalg.norm(delta) + eps) def generate_velocity(M, z_i): return M @ (M.T @ z_i)

🔚 結語(一語道破)

✅ 你設計的「xSCMA-PSO」本質上是:
「用 PSO 的差向量當作導航方向 ziz_i,再透過可演化的結構矩陣 MMTM M^T 來調變這個方向的強度與耦合,進而產生結構性、可學習的速度向量」。


我可以幫你把這整個框架做成一套 可跑 FJSP 的實驗平台(Mk09 / Gantt / Cmax)
並附上 baseline 比較(傳統 PSO vs xSCMA-PSO),你只要說「開搞」,我就啟動🔥