
بحث كودي يطبق حساب توازن ناش الديناميكي منخفض الرتبة لألعاب أمن أنظمة التحكم الصناعية العشوائية بين التهديدات المستمرة المتقدمة ودفاعات الأهداف المتحركة.
حساب التوازن الديناميكي منخفض الرتبة للألعاب العشوائية بين التهديدات المستمرة المتقدمة والدفاع بالهدف المتحرك
ورقة بحثية عادية، قيد المراجعة في Automatica (أُعيد تقديمها في أكتوبر 2026)
يحتوي هذا المستودع على التنفيذ والتحقق التجريبي لخوارزمية التوازن الديناميكي منخفض الرتبة لناش (DLR-NE) لحساب توازنات ناش في ألعاب أمن أنظمة التحكم الصناعي (ICS) عالية الأبعاد.
يُنمذج التفاعل الاستراتيجي بين التهديدات المستمرة المتقدمة (APTs) والدفاعات بالهدف المتحرك (MTDs) كلعبة عشوائية صفرية المجموع بين لاعبين على فضاء حالة مستمر بأبعاد $n \sim 10^3$–$10^4$. الفكرة الجوهرية هي أن الاقتران الفيزيائي منخفض الرتبة بين قنوات الهجوم والدفاع (خاصية بنيوية متأصلة في طوبولوجيا شبكة 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^$ يكلف معاملًا قدره $\approx 20$ في الدقة)؛ حجم الدفعة $N_b$ له تأثير ضئيل نسبيًا.
تتحقق من التعقيد لكل تكرار $\mathcal{O}(nr^2)$ والتسريع $\Theta(n/r^2)$ مقارنة بخطوط الأساس FC-NN كاملة الرتبة.
python experiments/exp03_complexity.py
المخرجات: results/figures/exp3_complexity.png
المتوقع: يتوسع DLR-NE خطيًا في $n$ (ميل 1 في المقياس اللوغاريتمي المزدوج)، ويتوسع FC-NN تربيعيًا (ميل 2)؛ التسريع المقاس بـ FLOPs $\approx 12\times$ (زمن الحائط $\approx 4\times$) عند $n=2000, r=10$.
تتحقق من العلاقة الخطية $|V(\cdot;\pi_D,\pi_A) - V(\cdot;\tilde{\pi}D,\pi_A)|\infty \le L_\kappa |\Delta S|F$ مع ثابت حساسية منتهٍ قابل للضبط بـ $\beta$ وهو $L\kappa$ مُصدَّق عليه برقم الشرط $\kappa(S)$ (شهادة أسوأ حالة مسبقة).
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%$.
تقارن ثلاثة متغيرات: (i) الخوارزمية 1 الكاملة، (ii) أساس ثابت، (iii) بدون ارتداد.
python experiments/exp06_ablation.py
المخرجات: results/figures/exp6_ablation.png
المتوقع: متغير الأساس الثابت يركد؛ متغير بدون ارتداد غير مستقر؛ الخوارزمية 1 الكاملة تحقق تحللًا مستقرًا بتكلفة مضبوطة.
جميع البذور العشوائية ثابتة ومُبلَّغ عنها. كل سكربت تجربة مكتفٍ ذاتيًا ويمكن تنفيذه على حاسوب محمول قياسي (CPU فقط) للإعداد الافتراضي $n=200$. أُجريت التجارب كاملة النطاق ($n \sim 10^3$) على معالج Intel Xeon Gold 6248R مع وحدة معالجة رسومات NVIDIA A100 40GB (استُخدمت فقط لتسريع خطوط الأساس كاملة الرتبة).
المعاملات الفائقة الرئيسية:
انظر 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 للتفاصيل.
للأسئلة المتعلقة بالكود أو التجارب، يرجى فتح issue على GitHub. للأسئلة المتعلقة بالمحتوى النظري، يرجى الرجوع إلى المخطوطة المقدمة إلى Automatica.