Современные численные методы в объектно-ориентированном изложении на C#

Объектно-ориентированный подход к теории игр

Разбить на страницы
Показывать лекцию целиком

Цель лекции: Рассмотреть объектно-ориентированое моделирование матричных игр. Реализовать проверку смешанных стратегий с помощью вычислительных экспериментов.

На прошлой лекции мы рассматривали игру в "крестики-нолики", в которой принимали участие два различных агента. В настоящей лекции мы рассмотрим элементы теории игр. Теория игр - это прикладная математическая дисциплина, в которой изучаются методы нахождения оптимальных решений в условиях неопределенности и ситуациях противодействия со стороны других игроков. Современную математическую форму теория игр приобрела после известного труда Дж. фон Неймана и О. Моргенштерна "Теория игр и экономическое поведение", вышедшего в 1944 году. В настоящее время теория игр находит свое применение в экономических науках, в социальных науках, биологии, а также и в математических дисциплинах, таких как, математическая статистика, функциональный анализ и других.

В отличии от задач оптимизации, где необходимо найти оптимальное решение в заданных условиях, в теории игр необходимо найти оптимальное решение в условиях противодействия со стороны других игроков.

В теории игр рассматривается большое количество постановок различных игр. Мы рассмотрим подробно самую известную постановку в теории игр - антагонистичную игру двух лиц.

Обозначим через $$I$$ множество всех игроков. Мы будем рассматривать конечное число игроков. Мы будем различать игроков по номерам$$I=\{1,2,\dots,N\}.$$ Предположим, что каждый игрок $$i\in I$$ имеет в своем распоряжении определенное множество стратегий, которое мы обозначим через $$S_i$$.

Процедура игры происходит следующим образом: каждый игрок выбирает одну стратегию из своего множества стратегий $$s_i\in S_i$$. Вектор выбранных стратегий всех игроков обозначим через$$s=(s_1,s_2,\dots,s_N).$$ Вектор $$s$$ называется ситуацией в игре. Множество всех возможных ситуаций можно ввести по формуле$$S=\prod\limits_{i\in I}S_i.$$ В каждой сложившейся ситуации игроки получают определенные выигрыши. Договоримся считать, что выигрыш может быть и отрицательным, что означает проигрыш. Выигрыш игрока $$i$$ в ситуации $$s$$ обозначим через $$H_i(s)$$. Функция $$H_i$$, определенная на множестве всех ситуаций$$H_i:S\to\Bbb{R}$$ называется функцией выигрыша $$i$$ -го игрока. Мы будем измерять выигрыши действительными числами, хотя не всегда выигрыш может быть измерен числом.

Бескоалиционной игрой называется система$$\Gamma=\langle I,\{S\}_{i\in I},\{H_i\}_{i\in I}\rangle,$$ где $$I$$, $$S_i$$ являются множествами, а $$H_i$$ - функции на множестве $$S$$, принимающие вещественные значения.

Наиболее часто встречается ситуация, когда сумма выигрышей всех игроков во всех ситуациях является постоянной, что соответствует тому, что игроки по сути делят между собой фиксированную сумму. Игра называется игрой с постоянной суммой, если$$\sum\limits_{i\in I}H_i(s)=const$$ при всех ситуациях $$s\in S$$.

Мы будем рассматривать антагонистичные игры. Игра называется антагонистичной, если число игроков равно двум, т.е. $$I=\{1,2\}$$, а значения функций выигрыша в сумме равны нулю$$H_1(s)=-H_2(s),\ s\in S.$$

Если в теории оптимизации основной задачей является нахождения оптимальных решений, то в теории игр аналогом этого является нахождения ситуации равновесия. Ситуация $$s^*\in S$$ называется ситуацией равновесия в игре, если ни одному из игроков не выгодно отступать от этой стратегии. формально это можно записать следующей формулой $$s^*=(s^*_1,s^*_2)$$$$H_1(s_1,s^*_2)\le H_1(s^*_1,s^*_2)\le H_1(s^*_1,s_2),\ s\in S.$$

Если множества стратегий конечны, то антагонистичные игры удобно записывать в матричном виде. Пусть множество стратегий первого игрока равно $$n>1$$, а второго - $$m>1$$, тогда запишем в виде матрицы значения функции выигрышей$$A=\left(% \begin{array}{cccc} a_{11} a_{12} \dots a_{1n} \\ a_{21} a_{22} \dots a_{2n} \\ \dots \dots \dots \dots \\ a_{m1} a_{m2} \dots a_{mn} \\ \end{array}% \right)$$ Игра в этом случае состоит в том, что первый игрок выбирает строку, а второй игрок (одновременно!) выбирает столбец. Число, стоящее на пересечении выбранных строки и столбца, означает выигрыш первого игрока и проигрыш второго игрока.

В матричной игре ситуация $$(i^*,j^*)$$ называется равновесной, если$$a_{ij^*}\le a_{i^*j^*}\le a_{i^*j}$$ для всех $$i=1,\dots,m$$ и $$j=1,\dots,n$$. В теории игр доказывается, что для существования ситуации равновесия необходимо и достаточно, чтобы было выполнено равенство$$\max\limits_i\min\limits_j a_{ij}=\min\limits_{j}\max\limits_ia_{ij}=c.$$ Число $$c$$ в этом случае называется ценой игры. Если бы в каждой игре существовала бы ситуация равновесия, то игры бы не имели смысл. К счастью или к сожалению, но во многих играх ситуации равновесия не существует. Самый простой пример - игра в "чет--нечет". Матрица этой игры такова$$A=\left(% \begin{array}{cc} 0 1 \\ 1 0 \\ \end{array}% \right).$$ Фундаментальным результатом теории игр является тот факт, что любая матричная игра имеет ситуацию равновесия в смешанных стратегиях. Смешанной стратегией называется случайная величина, значениями которой являются стратегии игрока. Смешанная стратегия - это распределение вероятностей на множестве допустимых стратегий, которую можно представить вектором с неотрицательными компонентами, сумма которых равна единице.

При смешанном расширении понятия матричной игры, игроки выбирают свои смешанные стратегии: первый игрок$$X=(x_1,\dots,x_m),\ x_i\ge0,\ \sum\limits_{i=1}^mx_i=1,$$ $$Y=(y_1,\dots,y_m),\ y_i\ge0,\ \sum\limits_{i=1}^my_i=1,$$ Выигрыш в смешанных расширениях рассчитывается как математическое ожидание. Выигрыш первого игрока равен$$\sum\limits_{i=1}^m\sum\limits_{j=1}^na_{ij}x_iy_j$$

Теорема 21.1. В матричной игре с матрицей выигрышей $$A$$ имеет место$$\max\limits_X\min\limits_j(XA_{.j})=\min\limits_Y\max\limits_i(A_{i.}Y.)$$ При чем внешние экстремумы достигаются на оптимальных смешанных стратегиях.

В этой теореме $$A_{i.}$$ обозначает $$i$$ -ую строку, а $$A_{j.}$$ - $$j$$ -ый столбец.

Несмотря на наличие этой теоремы вопрос конкретного определения оптимальных стратегий является очень сложным.

Мы в нашем курсе проведем моделирование матричной игры и проверим ряд известных решений некоторых игр. Начнем с программирования класса матричной игры.

$$\begin{verbatim} class TGame { protected double[,] A; protected int m = 0, n = 0; Random rnd; public TGame() { rnd = new Random(); } public double Calc(double[] X, double[] Y, int Count) { double res = 0; int i, j; for (int k = 0; k < Count; k++) { i = Release(X, m); j = Release(Y, n); res += GetAij(i, j); } return res / (double)Count; } \end{verbatim}$$ $$\begin{verbatim} public int Release(double[] Z, int N) { double p = rnd.NextDouble(); double a = 0; for (int i = 1; i <= N; i++) { a += Z[i]; if (p <= a) { return i; } } return N; } public double GetAij(int i, int j) { return A[i, j]; } public double GetC(double[] X, double[] Y) { double res = 0; int i, j; for (i = 1; i <= m; i++) { for (j = 1; j <= n; j++) { res += A[i, j] * X[i] * Y[j]; } } return res; } } \end{verbatim}$$

Теперь создадим два наследных класса, в которых мы реализуем две матричные игры.

$$\begin{verbatim} class TGame1 : TGame { public TGame1() : base() { m = 2; n = 2; A = new double[3, 3]; A[1, 1] = 0; A[1, 2] = 1; A[2, 1] = 1; A[2, 2] = 0; } } class TGame2 : TGame { public TGame2() : base() { m = 3; n = 3; A = new double[4, 4]; A[1, 1] = 0; A[1, 2] = 1; A[1, 3] = -2; A[2, 1] = -1; A[2, 2] = 0; A[2, 3] = 3; A[3, 1] = 2; A[3, 2] = -3; A[3, 3] = 0; } } \end{verbatim}$$

Класс $$TGame1$$ - это самая простая нетривиальная игра. По сути это игра в "чет--нечет". В этой игре нет равновесных чистых стратегий, а в смешанных стратегиях эта игра имеет следующее решение$$X=\left(\frac{1}{2},\frac{1}{2}\right),$$ $$Y=\left(\frac{1}{2},\frac{1}{2}\right).$$ Вторая игра, реализованная в классе $$TGame2$$, представляет собой более сложную игру со следующей платежной матрицей$$A=\left(% \begin{array}{ccc} 0 1 -2 \\ -1 0 3 \\ 2 -3 0 \\ \end{array}% \right)$$ В этой игре также нет состояния равновесия, но есть решение в смешанных стратегиях одинаковое для обоих игроков:$$X=\left(\frac{1}{2},\frac{1}{3},\frac{1}{6}\right),$$ $$Y=\left(\frac{1}{2},\frac{1}{3},\frac{1}{6}\right).$$ Цена этой игры равна нулю.

Проверим эти решения с помощью наших классов.

$$\begin{verbatim} double[] X; double[] Y; TGame1 Game1 = new TGame1(); X = new double[3] {0, 0.5, 0.5 }; Y = new double[3] {0, 0.5, 0.5 }; Console.WriteLine("Game1: theory = {0}, Res = {1}", Game1.GetC(X, Y), Game1.Calc(X, Y, 1000000)); TGame2 Game2 = new TGame2(); X = new double[4] { 0, 0.5, 1.0 / 3.0, 1.0 / 6.0 }; Y = new double[4] { 0, 0.5, 1.0 / 3.0, 1.0 / 6.0 }; Console.WriteLine("Game2: theory = {0}, Res = {1}", Game2.GetC(X, Y), Game2.Calc(X, Y, 1000000)); \end{verbatim}$$

После запуска мы получим примерно следующее:

$$\begin{verbatim} Game1: theory = 0.5, Res = 0.500092 Game2: theory = 0, Res = -0.00097 \end{verbatim}$$

Ключевые термины

Антагонистичная игра - игра двух игроков с нулевой суммой.

Ситуация в игре - набор выбранных стратегий всех игроков.

Ситуация равновесия - такая ситуация, при которой ни один из игроков не заинтересован в изменении стратегии.

Смешанная стратегия - случайная величина, значениями которой являются стратегии игрока.

Теория игр - прикладная математическая дисциплина, в которой изучаются методы нахождения оптимальных решений в условиях неопределенности и ситуациях противодействия со стороны других игроков.

Краткие итоги: Рассмотрены постановки игр. Для матричных игр приведено объектно-ориентированное моделирование игр. С помощью статистического моделирования исследованы некоторые матричные игры.

Страницы:

Цель лекции: Рассмотреть объектно-ориентированое моделирование матричных игр. Реализовать проверку смешанных стратегий с помощью вычислительных экспериментов.

На прошлой лекции мы рассматривали игру в "крестики-нолики", в которой принимали участие два различных агента. В настоящей лекции мы рассмотрим элементы теории игр. Теория игр - это прикладная математическая дисциплина, в которой изучаются методы нахождения оптимальных решений в условиях неопределенности и ситуациях противодействия со стороны других игроков. Современную математическую форму теория игр приобрела после известного труда Дж. фон Неймана и О. Моргенштерна "Теория игр и экономическое поведение", вышедшего в 1944 году. В настоящее время теория игр находит свое применение в экономических науках, в социальных науках, биологии, а также и в математических дисциплинах, таких как, математическая статистика, функциональный анализ и других.

В отличии от задач оптимизации, где необходимо найти оптимальное решение в заданных условиях, в теории игр необходимо найти оптимальное решение в условиях противодействия со стороны других игроков.

В теории игр рассматривается большое количество постановок различных игр. Мы рассмотрим подробно самую известную постановку в теории игр - антагонистичную игру двух лиц.

Обозначим через $$I$$ множество всех игроков. Мы будем рассматривать конечное число игроков. Мы будем различать игроков по номерам$$I=\{1,2,\dots,N\}.$$ Предположим, что каждый игрок $$i\in I$$ имеет в своем распоряжении определенное множество стратегий, которое мы обозначим через $$S_i$$.

Процедура игры происходит следующим образом: каждый игрок выбирает одну стратегию из своего множества стратегий $$s_i\in S_i$$. Вектор выбранных стратегий всех игроков обозначим через$$s=(s_1,s_2,\dots,s_N).$$ Вектор $$s$$ называется ситуацией в игре. Множество всех возможных ситуаций можно ввести по формуле$$S=\prod\limits_{i\in I}S_i.$$ В каждой сложившейся ситуации игроки получают определенные выигрыши. Договоримся считать, что выигрыш может быть и отрицательным, что означает проигрыш. Выигрыш игрока $$i$$ в ситуации $$s$$ обозначим через $$H_i(s)$$. Функция $$H_i$$, определенная на множестве всех ситуаций$$H_i:S\to\Bbb{R}$$ называется функцией выигрыша $$i$$ -го игрока. Мы будем измерять выигрыши действительными числами, хотя не всегда выигрыш может быть измерен числом.

Бескоалиционной игрой называется система$$\Gamma=\langle I,\{S\}_{i\in I},\{H_i\}_{i\in I}\rangle,$$ где $$I$$, $$S_i$$ являются множествами, а $$H_i$$ - функции на множестве $$S$$, принимающие вещественные значения.

Наиболее часто встречается ситуация, когда сумма выигрышей всех игроков во всех ситуациях является постоянной, что соответствует тому, что игроки по сути делят между собой фиксированную сумму. Игра называется игрой с постоянной суммой, если$$\sum\limits_{i\in I}H_i(s)=const$$ при всех ситуациях $$s\in S$$.

Мы будем рассматривать антагонистичные игры. Игра называется антагонистичной, если число игроков равно двум, т.е. $$I=\{1,2\}$$, а значения функций выигрыша в сумме равны нулю$$H_1(s)=-H_2(s),\ s\in S.$$

Если в теории оптимизации основной задачей является нахождения оптимальных решений, то в теории игр аналогом этого является нахождения ситуации равновесия. Ситуация $$s^*\in S$$ называется ситуацией равновесия в игре, если ни одному из игроков не выгодно отступать от этой стратегии. формально это можно записать следующей формулой $$s^*=(s^*_1,s^*_2)$$$$H_1(s_1,s^*_2)\le H_1(s^*_1,s^*_2)\le H_1(s^*_1,s_2),\ s\in S.$$

Если множества стратегий конечны, то антагонистичные игры удобно записывать в матричном виде. Пусть множество стратегий первого игрока равно $$n>1$$, а второго - $$m>1$$, тогда запишем в виде матрицы значения функции выигрышей$$A=\left(% \begin{array}{cccc} a_{11} a_{12} \dots a_{1n} \\ a_{21} a_{22} \dots a_{2n} \\ \dots \dots \dots \dots \\ a_{m1} a_{m2} \dots a_{mn} \\ \end{array}% \right)$$ Игра в этом случае состоит в том, что первый игрок выбирает строку, а второй игрок (одновременно!) выбирает столбец. Число, стоящее на пересечении выбранных строки и столбца, означает выигрыш первого игрока и проигрыш второго игрока.

В матричной игре ситуация $$(i^*,j^*)$$ называется равновесной, если$$a_{ij^*}\le a_{i^*j^*}\le a_{i^*j}$$ для всех $$i=1,\dots,m$$ и $$j=1,\dots,n$$. В теории игр доказывается, что для существования ситуации равновесия необходимо и достаточно, чтобы было выполнено равенство$$\max\limits_i\min\limits_j a_{ij}=\min\limits_{j}\max\limits_ia_{ij}=c.$$ Число $$c$$ в этом случае называется ценой игры. Если бы в каждой игре существовала бы ситуация равновесия, то игры бы не имели смысл. К счастью или к сожалению, но во многих играх ситуации равновесия не существует. Самый простой пример - игра в "чет--нечет". Матрица этой игры такова$$A=\left(% \begin{array}{cc} 0 1 \\ 1 0 \\ \end{array}% \right).$$ Фундаментальным результатом теории игр является тот факт, что любая матричная игра имеет ситуацию равновесия в смешанных стратегиях. Смешанной стратегией называется случайная величина, значениями которой являются стратегии игрока. Смешанная стратегия - это распределение вероятностей на множестве допустимых стратегий, которую можно представить вектором с неотрицательными компонентами, сумма которых равна единице.

При смешанном расширении понятия матричной игры, игроки выбирают свои смешанные стратегии: первый игрок$$X=(x_1,\dots,x_m),\ x_i\ge0,\ \sum\limits_{i=1}^mx_i=1,$$ $$Y=(y_1,\dots,y_m),\ y_i\ge0,\ \sum\limits_{i=1}^my_i=1,$$ Выигрыш в смешанных расширениях рассчитывается как математическое ожидание. Выигрыш первого игрока равен$$\sum\limits_{i=1}^m\sum\limits_{j=1}^na_{ij}x_iy_j$$

Теорема 21.1. В матричной игре с матрицей выигрышей $$A$$ имеет место$$\max\limits_X\min\limits_j(XA_{.j})=\min\limits_Y\max\limits_i(A_{i.}Y.)$$ При чем внешние экстремумы достигаются на оптимальных смешанных стратегиях.

В этой теореме $$A_{i.}$$ обозначает $$i$$ -ую строку, а $$A_{j.}$$ - $$j$$ -ый столбец.

Несмотря на наличие этой теоремы вопрос конкретного определения оптимальных стратегий является очень сложным.

Мы в нашем курсе проведем моделирование матричной игры и проверим ряд известных решений некоторых игр. Начнем с программирования класса матричной игры.

$$\begin{verbatim} class TGame { protected double[,] A; protected int m = 0, n = 0; Random rnd; public TGame() { rnd = new Random(); } public double Calc(double[] X, double[] Y, int Count) { double res = 0; int i, j; for (int k = 0; k < Count; k++) { i = Release(X, m); j = Release(Y, n); res += GetAij(i, j); } return res / (double)Count; } \end{verbatim}$$ $$\begin{verbatim} public int Release(double[] Z, int N) { double p = rnd.NextDouble(); double a = 0; for (int i = 1; i <= N; i++) { a += Z[i]; if (p <= a) { return i; } } return N; } public double GetAij(int i, int j) { return A[i, j]; } public double GetC(double[] X, double[] Y) { double res = 0; int i, j; for (i = 1; i <= m; i++) { for (j = 1; j <= n; j++) { res += A[i, j] * X[i] * Y[j]; } } return res; } } \end{verbatim}$$

Теперь создадим два наследных класса, в которых мы реализуем две матричные игры.

$$\begin{verbatim} class TGame1 : TGame { public TGame1() : base() { m = 2; n = 2; A = new double[3, 3]; A[1, 1] = 0; A[1, 2] = 1; A[2, 1] = 1; A[2, 2] = 0; } } class TGame2 : TGame { public TGame2() : base() { m = 3; n = 3; A = new double[4, 4]; A[1, 1] = 0; A[1, 2] = 1; A[1, 3] = -2; A[2, 1] = -1; A[2, 2] = 0; A[2, 3] = 3; A[3, 1] = 2; A[3, 2] = -3; A[3, 3] = 0; } } \end{verbatim}$$

Класс $$TGame1$$ - это самая простая нетривиальная игра. По сути это игра в "чет--нечет". В этой игре нет равновесных чистых стратегий, а в смешанных стратегиях эта игра имеет следующее решение$$X=\left(\frac{1}{2},\frac{1}{2}\right),$$ $$Y=\left(\frac{1}{2},\frac{1}{2}\right).$$ Вторая игра, реализованная в классе $$TGame2$$, представляет собой более сложную игру со следующей платежной матрицей$$A=\left(% \begin{array}{ccc} 0 1 -2 \\ -1 0 3 \\ 2 -3 0 \\ \end{array}% \right)$$ В этой игре также нет состояния равновесия, но есть решение в смешанных стратегиях одинаковое для обоих игроков:$$X=\left(\frac{1}{2},\frac{1}{3},\frac{1}{6}\right),$$ $$Y=\left(\frac{1}{2},\frac{1}{3},\frac{1}{6}\right).$$ Цена этой игры равна нулю.

Проверим эти решения с помощью наших классов.

$$\begin{verbatim} double[] X; double[] Y; TGame1 Game1 = new TGame1(); X = new double[3] {0, 0.5, 0.5 }; Y = new double[3] {0, 0.5, 0.5 }; Console.WriteLine("Game1: theory = {0}, Res = {1}", Game1.GetC(X, Y), Game1.Calc(X, Y, 1000000)); TGame2 Game2 = new TGame2(); X = new double[4] { 0, 0.5, 1.0 / 3.0, 1.0 / 6.0 }; Y = new double[4] { 0, 0.5, 1.0 / 3.0, 1.0 / 6.0 }; Console.WriteLine("Game2: theory = {0}, Res = {1}", Game2.GetC(X, Y), Game2.Calc(X, Y, 1000000)); \end{verbatim}$$

После запуска мы получим примерно следующее:

$$\begin{verbatim} Game1: theory = 0.5, Res = 0.500092 Game2: theory = 0, Res = -0.00097 \end{verbatim}$$

Ключевые термины

Антагонистичная игра - игра двух игроков с нулевой суммой.

Ситуация в игре - набор выбранных стратегий всех игроков.

Ситуация равновесия - такая ситуация, при которой ни один из игроков не заинтересован в изменении стратегии.

Смешанная стратегия - случайная величина, значениями которой являются стратегии игрока.

Теория игр - прикладная математическая дисциплина, в которой изучаются методы нахождения оптимальных решений в условиях неопределенности и ситуациях противодействия со стороны других игроков.

Краткие итоги: Рассмотрены постановки игр. Для матричных игр приведено объектно-ориентированное моделирование игр. С помощью статистического моделирования исследованы некоторые матричные игры.

Вернуться к учебному плану