
Исследовательский код, реализующий вычисление динамического низкорангового равновесия Нэша для стохастических игр безопасности ICS между продвинутыми постоянными угрозами и защитой с использованием подвижных целей.
Вычисление динамического низкорангового равновесия для стохастических игр между продвинутыми постоянными угрозами и защитой с подвижной целью
Обычная статья, на рассмотрении в Automatica (повторно подана в октябре 2026 г.)
Этот репозиторий содержит реализацию и экспериментальную валидацию алгоритма динамического низкорангового равновесия Нэша (DLR-NE) для вычисления равновесий Нэша в высокоразмерных играх безопасности систем промышленного управления (ICS).
Стратегическое взаимодействие между продвинутыми постоянными угрозами (APT) и защитой с подвижной целью (MTD) моделируется как стохастическая игра с нулевой суммой для двух игроков в непрерывном пространстве состояний размерности $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$ и согласуется с теоретическим предсказанием Эккарта–Янга–Мирского.
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)$ и ускорение $\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 с GPU NVIDIA A100 40GB (использовался только для ускорения полноранговых базовых методов).