2025年6月13日 星期五

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),你只要說「開搞」,我就啟動🔥

沒有留言: