GameTheory — открытый учебный репозиторий с воспроизводимыми R-примерами по антагонистическим матричным играм и прикладным финансовым моделям принятия решений. Он поддерживает материалы разделов Game Theory, Quizzes и Glossary сайта Math Gamification.
Проект ориентирован на студентов, которые осваивают нормальную форму игры, гарантированный результат в чистых стратегиях и полностью смешанные решения в невырожденных играх 2×2. Основные функции не требуют дополнительных R-пакетов: это позволяет запускать примеры и проверять результаты в стандартной установке R.
Соглашение о знаке. Строки матрицы принадлежат максимизирующему игроку A, столбцы — минимизирующему игроку B. Элемент
a[i, j]интерпретируется как выигрыш игрока A; игра является антагонистической (с нулевой суммой).
Установите R версии 4.0 или новее, склонируйте репозиторий и выполните тесты из его корня. Команда ниже не скачивает сторонних зависимостей и должна закончиться сообщением All GameTheory tests passed.
git clone https://github.com/avladova/GameTheory.git
cd GameTheory
Rscript tests/test_game_theory.RПосле этого запустите любой пример. Первые два примера посвящены антагонистическим матричным играм; примеры 03–06 воспроизводят учебные финансовые кейсы. Числовые данные в них условны и не являются инвестиционной рекомендацией.
Rscript examples/01_matrix_games.R
Rscript examples/02_mixed_strategies_2x2.R
Rscript examples/03_financial_decisions.R
Rscript examples/04_cooperative_investments.R
Rscript examples/05_sequential_finance_game.R
Rscript examples/06_financial_auctions_and_voting.R| Путь | Содержание | Для кого |
|---|---|---|
R/game_theory.R |
Проверяемые функции для анализа матричных игр с нулевой суммой | Студенты и преподаватели |
R/financial_decision_games.R |
Базовые функции для сценарных решений, коалиций, последовательных игр, аукционов и голосования | Студенты и преподаватели |
examples/03_financial_decisions.R – examples/06_financial_auctions_and_voting.R |
Четыре финансовых учебных примера с условными данными | Семинары и самостоятельная работа |
tests/test_financial_decision_games.R |
Автоматические проверки финансовых примеров | Авторы и сопровождающие |
examples/ |
Небольшие воспроизводимые сценарии с интерпретацией | Самостоятельное изучение и семинары |
tests/test_game_theory.R |
Автоматические проверки эталонных и пограничных случаев | Авторы и сопровождающие |
docs/course-map.md |
Карта модулей, результатов обучения и связей с сайтом | Преподаватели и редакторы |
docs/exercise-bank.md |
Задания с уровнем сложности и самопроверкой | Студенты и создатели квизов |
docs/site-content-plan.md |
Готовые рекомендации по обновлению страниц сайта | Редакторы сайта |
audit/ |
Внутренние записи аудита и дорожная карта изменений | Сопровождение проекта |
| Функция | Назначение | Ограничения |
|---|---|---|
analyze_zero_sum_game() |
Вычисляет максимин, минимакс, строки/столбцы чистых оптимальных стратегий и все седловые точки | Матрица не менее 2×2 с конечными числовыми значениями |
has_saddle_point() |
Возвращает TRUE, если в игре существует чистая седловая точка |
Те же, что у analyze_zero_sum_game() |
solve_mixed_2x2() |
Находит полностью смешанное решение и значение игры | Только невырожденные игры 2×2 без чистой седловой точки |
expected_payoff() |
Проверяет ожидаемый выигрыш для заданных смешанных стратегий | Вероятности должны быть неотрицательны и суммироваться к единице |
financial_decision_criteria() |
Считает критерии выбора в условиях неопределённости | Строки – альтернативы, столбцы – состояния рынка |
net_present_value() |
Рассчитывает NPV по заданным денежным потокам и ставке | Денежные потоки начинаются в момент t0 |
shapley_value() |
Рассчитывает вектор Шепли по функции стоимости коалиций | Требуются стоимости всех коалиций |
two_stage_backward_induction() |
Решает двухшаговую игру совершенной информации | Требуется таблица терминальных выигрышей |
auction_outcome() и weighted_vote() |
Моделируют учебный аукцион и взвешенное голосование | Не заменяют правовой или инвестиционный анализ |
source(file.path("R", "game_theory.R"))
payoffs <- matrix(
c(4, 2,
3, 1,
5, 0),
nrow = 3,
byrow = TRUE
)
analysis <- analyze_zero_sum_game(payoffs)
analysis$value # 2
analysis$saddle_points # строка 1, столбец 2Алгоритм сначала находит минимальный выигрыш в каждой строке, затем выбирает из них наибольший (maximin). Аналогично он находит максимальный выигрыш в каждом столбце и выбирает из них наименьший (minimax). Равенство этих величин означает наличие седловой точки в чистых стратегиях.
Репозиторий сознательно разделяет вычисления для антагонистических игр и более широкую теорию игр. Нахождение равновесий Нэша в биматричных играх, исключение доминируемых стратегий и решение матричных игр общего размера с помощью линейного программирования предусмотрены как следующие модули развития.
Пользователь должен самостоятельно интерпретировать модель: программа проверяет числовые условия, но не может определить, правильно ли реальная ситуация переведена в стратегии и выигрыши.
Новый пример следует помещать в examples/ и начинать с явного source(file.path("R", "game_theory.R")). Если пример раскрывает новую математическую функцию, она сначала добавляется в R/game_theory.R, затем покрывается эталонным и пограничным тестом в tests/. Учебная тема должна быть отражена в docs/course-map.md и связана хотя бы с одним термином и одним упражнением.
Вопросы и предложения по содержанию следует оформлять через Issues репозитория. Перед повторным использованием материалов необходимо согласовать условия с владельцем репозитория.
Концепции нормальной и развернутой формы, равновесия и смешанных стратегий следуют стандартной терминологии из учебника Осборна и Рубинштейна. Для краткого прикладного введения можно использовать книгу Лейтон-Брауна и Шохама.
- Osborne, M. J., & Rubinstein, A. (1994). A Course in Game Theory. MIT Press. Страница книги.
- Leyton-Brown, K., & Shoham, Y. (2008). Essentials of Game Theory. Morgan & Claypool. Страница книги.