
高度な持続的脅威と移動標的防御の間の確率的ICSセキュリティゲームに対する動的低ランクナッシュ均衡計算を実装した研究コード。
高度標的型攻撃と移動標的防御の間の確率ゲームに対する動的低ランク均衡計算
通常論文、Automatica にて査読中(2026年10月再投稿)
本リポジトリは、高次元産業制御システム(ICS)セキュリティゲームにおけるナッシュ均衡を計算するための**動的低ランクナッシュ均衡(DLR-NE)**アルゴリズムの実装と実験的検証を含んでいます。
**高度標的型攻撃(APT)と移動標的防御(MTD)**の間の戦略的相互作用は、次元 $n \sim 10^3$–$10^4$ の連続状態空間上の2人ゼロ和確率ゲームとしてモデル化されます。重要な洞察は、攻撃チャネルと防御チャネルの物理的低ランク結合(ICSネットワークトポロジーに固有の構造的性質)により、均衡価値関数の扱いやすい低ランクニューラルネットワーク近似が可能になり、反復あたりの計算量が $\mathcal{O}(n^2)$ から $\mathcal{O}(nr^2)$ に削減され、$\Theta(n/r^2)$ の高速化が達成されることです。
| 定理 | 命題 | 実験 |
|---|---|---|
| 定理1 | 最適価値関数 $V^*$ に対する大域的低ランク近似誤差限界 | 実験1 |
| 定理2 | 明示的な定常状態誤差分解を伴うDLR-NEの幾何収束 | 実験2 |
| 定理3 | 反復あたりの計算量 $\mathcal{O}(nr^2)$ およびフルランクベースラインに対する $\Theta(n/r^2)$ の高速化 | 実験3 |
| 系1 | ゲーム理論的ロバスト性:均衡感度は条件数 $\kappa(S)$ によって制御される | 実験4 |
dlr-ne-ics-security/
├── src/ # Core algorithmic modules
│ ├── environment.py # Synthetic nonlinear power-system dynamics
│ ├── networks.py # Low-rank and full-rank neural networks
│ ├── bellman.py # Bellman operator and greedy Nash policy extractor
│ ├── dlra_vi.py # Algorithm 1: DLR-NE
│ └── utils.py # FLOPs accounting, EYM error, metrics
│
├── experiments/ # Experimental scripts (one per theorem)
│ ├── exp01_truncation_error.py # Theorem 1: Low-rank truncation error
│ ├── exp02_convergence.py # Theorem 2: Convergence of DLR-NE
│ ├── exp03_complexity.py # Theorem 3: Computational complexity
│ ├── exp04_robustness.py # Corollary 1: Game-theoretic robustness
│ ├── exp05_tradeoff.py # Compression-accuracy Pareto frontier
│ └── exp06_ablation.py # Ablation: necessity of basis augmentation
│
├── data/ # Generated datasets (excluded from git)
├── results/ # Figures and logs (excluded from git)
├── notebooks/ # Prototyping and visualization
├── requirements.txt # Python dependencies
└── README.md # This file
# Clone the repository
git clone https://github.com/tz98lab/dlr-ne-ics-security.git
cd dlr-ne-ics-security
# Create a virtual environment (recommended)
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# Install dependencies
pip install -r requirements.txt
numpy>=1.24.0
scipy>=1.10.0
matplotlib>=3.7.0
torch>=2.0.0
すべての実験は自己完結型であり、独立して実行できます。各スクリプトは results/figures/ ディレクトリに図を生成します。
スケールに関する注意: デフォルト設定では迅速なデモンストレーションのために $n=200$ を使用しています。論文で報告されているフルスケールの結果($n \sim 10^3$)を再現するには、各スクリプトの先頭にある
PowerSystemConfigを変更してください(インラインコメントを参照)。
打ち切り誤差 $|V_{\mathrm{full}} - \widehat{V}r|\infty$ がランク $r$ とともに減衰し、Eckart-Young-Mirskyの理論予測と一致することを検証します。
python experiments/exp01_truncation_error.py
出力: results/figures/exp1_truncation_error.png
期待される結果: 測定誤差(青い円)が理論限界 $L_\phi |w_{\mathrm{out}}^*|2 R{\mathcal{X}} \epsilon_{\mathrm{EYM}}(r)$(紫の破線)を追従すること;特異値スペクトルが急速な減衰を示すこと。
収束率 $\gamma$ を伴う幾何収束と、明示的な定常状態誤差近傍 $\varepsilon_{\mathrm{total}}/(1-\gamma)$ を検証します。
python experiments/exp02_convergence.py
出力: results/figures/exp2_convergence.png
期待される結果: 誤差曲線はまず $\gamma^k$ の包絡線に沿って減衰し、その後、内側ループの予算 $s^$ に支配されるプラトーに移行する($s^$ を半減させると精度が約20倍のコストになる);バッチサイズ $N_b$ の影響は比較的無視できる。
反復あたりの計算量 $\mathcal{O}(nr^2)$ と、フルランクFC-NNベースラインに対する $\Theta(n/r^2)$ の高速化を検証します。
python experiments/exp03_complexity.py
出力: results/figures/exp3_complexity.png
期待される結果: DLR-NEは $n$ に対して線形にスケールし(log-logで傾き1)、FC-NNは二次的にスケールする(傾き2);$n=2000, r=10$ において測定FLOPs高速化 $\approx 12\times$(実時間 $\approx 4\times$)。
線形関係 $|V(\cdot;\pi_D,\pi_A) - V(\cdot;\tilde{\pi}D,\pi_A)|\infty \le L_\kappa |\Delta S|F$ を、条件数 $\kappa(S)$ によって保証される有限で $\beta$ 調整可能な感度定数 $L\kappa$(アプリオリな最悪ケース保証)とともに検証します。
python experiments/exp04_robustness.py
出力: results/figures/exp4_robustness.png
期待される結果: 価値偏差は $|\Delta S|_F$ に対して線形であり、その傾きはスペクトル正則化重み $\beta$ の増加とともに減少する;$\kappa(S)$ は $\beta$ を増加させることで圧縮される。
圧縮率と均衡ポリシー効用の間のパレートフロンティアを探索します。
python experiments/exp05_tradeoff.py
出力: results/figures/exp5_tradeoff.png
期待される結果: $r = 5$ にスイートスポット:$\approx 94%$ のパラメータ圧縮で $\approx 2.3%$ の効用損失。
3つの変種を比較します:(i) 完全なアルゴリズム1、(ii) 固定基底、(iii) レトラクションなし。
python experiments/exp06_ablation.py
出力: results/figures/exp6_ablation.png
期待される結果: 固定基底変種は停滞する;レトラクションなし変種は不安定である;完全なアルゴリズム1は制御されたコストで安定した減衰を達成する。
すべての乱数シードは固定され、報告されています。各実験スクリプトは自己完結型であり、デフォルトの $n=200$ 設定では標準的なラップトップ(CPUのみ)で実行できます。フルスケールの実験($n \sim 10^3$)は、Intel Xeon Gold 6248RとNVIDIA A100 40GB GPU(フルランクベースラインの加速にのみ使用)で実施されました。
主要なハイパーパラメータ:
完全なパラメータリストについては src/utils.py と個々の実験スクリプトを参照してください。
このコードを使用する場合は、以下を引用してください:
@article{dlrne2026,
title={Dynamical Low-Rank Equilibrium Computation for Stochastic Games between Advanced Persistent Threats and Moving Target Defense},
author={Tian, Zijian and Zhang, He and Chen, Xinjie and Wang, Wenhai and Liu, Xinggao},
journal={Automatica},
year={2026},
note={Under review}
}
このプロジェクトはMITライセンスの下でライセンスされています。詳細は LICENSE を参照してください。
コードや実験に関する質問は、GitHubでissueを開いてください。 理論的内容に関する質問は、Automatica に投稿された原稿を参照してください。