Программирование Игр Стратегий

Posted on by  admin

Как сделать игру. Программирование компьютерных игр. Курсы создания игр, школа создания игр, создание своей игры, 3D игр, браузерных игр, мобильных игр, PHP и MySQL. Самый простой способ научиться создавать собственные компьютеные игры за две недели!. Blitz3D SDK, браузерной стратегии (на мотив игры Travian) и создания игр на современном высокотехнологичном движке Unity3D. Наш обучающий центр существует уже более пяти лет. Форум программистов игр. Обсуждение технологий DirectX, OpenGL и других.

Приведение матричной антагонистической игры к задачам линейного программирования В данном статье описано сведение матричной игры к задаче линейного программирования. Алгоритм поиска решения матричной антагонистической игры, заданной платежной матрицей, имеющей размерность m×n при больших значениях m и n, сводится к алгоритму симплекс-метода решения пары взаимодвойственных задач линейного программирования. Покажем, как привести конечную матричную антагонистическую игру к двум взаимодвойственных задачам линейного программирования. Пусть антагонистическая игра задана платёжной матрицей A, имеющей размерность m×n, и эта игра является не вполне определённой. Необходимо найти решение игры, т.е. Определить оптимальные смешанные стратегии первого и второго игроков: P.= (p 1., p 2., p m.), Q.= (q 1., q 2., q n.) где P.

и Q. векторы, компоненты которых p i. и p j. характеризуют вероятности применения чистых стратегий i и j соответственно первым и вторым игроками и соответственно для них выполняются соотношения: p 1. + p 2. + + p m.

= 1, q 1. + q 2. + + q n. = 1 Найдём сначала оптимальную стратегию первого игрока P.

Эта стратегия должна обеспечить выигрыш первому игроку не меньше V, т.е. ≥V, при любом поведении второго игрока, и выигрыш, равный V, при его оптимальном поведении, т.е. При стратегии Q. Цена игры V нам пока неизвестна.

Без ограничения общности, можно предположить её равной некоторому положительному числу V0. Действительно, для того, чтобы выполнялось условие V 0, достаточно, чтобы все элементы матрицы A были неотрицательными. Этого всегда можно добиться с помощью аффинных преобразований: прибавляя ко всем элементам матрицы A одну и ту же достаточно большую положительную константу М; при этом цена игры увеличится на М, а решение не изменится. Итак, будем считать V 0.

Программирование

Предположим, что первый игрок A применяет свою оптимальную стратегию P., а второй игрок B свою чистую стратегию j -ю, тогда средний выигрыш (математическое ожидание) первого игрока A будет равен: Оптимальная стратегия первого игрока (A ) обладает тем свойством, что при любом поведении второго игрока (B) обеспечивает выигрыш первому игроку, не меньший, чем цена игры V; значит, любое из чисел a j не может быть меньше V (≥ V). Следовательно, при оптимальной стратегии, должна выполняться следующая система неравенств: (1.8.1) Разделим неравенства (1.8.1) на положительную величину V (правые части системы (1.8.1)) и введём обозначения: (1.8.2) y 1 ≥ 0, y 2 ≥ 0,., y m ≥ 0, (1.8.3) Тогда условия (1.8.1) запишутся в виде: (1.8.4) где y 1,y 2.y m - неотрицательные переменные. В силу (1.8.2) и того, что p 1. + p 2. + + p m.

= 1 переменные y 1, y 2., y m удовлетворяют условию, которое обозначим через F: (1.8.5) Поскольку первый игрок свой гарантированный выигрыш (V) старается сделать максимально возможным (V→ max), очевидно, при этом правая часть (1.8.5) - →min - принимает минимальное значение. Таким образом, задача решения антагонистической игры для первого игрока свелась к следующей математической задаче: определить неотрицательные значения переменных, чтобы они удовлетворяли системе функциональных линейных ограничений в виде неравенств (1.8.4), системе общих ограничений (1.8.3) и минимизировали целевую функцию F: F = y 1 + y 2 +.

+ y m→ min Это типичная задача линейного программирования (двойственная) и она может быть решена симплекс - методом. Таким образом, решая задачу линейного программирования, мы можем найти оптимальную стратегию P.= (p 1., p 2., p m.) игрока A. Найдём теперь оптимальную стратегию Q.= (q 1., q 2., q n.) игрока B. Всё будет аналогично решению игры для игрока A, с той разницей, что игрок B стремиться не максимизировать, а минимизировать выигрыш (по сути дела его проигрыш), а значит, не минимизировать, а максимизировать величину, т.к. Вместо условий (1.8.4) должны выполняться условия: (1.8.6) где (1.8.7) x 1 ≥ 0, x 2 ≥ 0,., x n ≥ 0 (1.8.8) Требуется так выбрать переменные x 1, x 2,., x n, чтобы они удовлетворяли условиям (1.8.6), (1.8.8) и обращали в максимум линейную функцию цели F /:. Таким образом, задача решения антагонистической игры для второго игрока свелась к следующей математической задаче: определить неотрицательные значения переменных x 1, x 2,., x n, чтобы они удовлетворяли системе функциональных линейных ограничений в виде неравенств (1.8.6), системе общих ограничений (1.8.8) и максимизировать целевую функцию F /: F' = x 1 + x 2 +.

Программирование Игр Стратегии

+ x n → min Это типичная задача линейного программирования (прямая) и она может быть решена симплекс - методом. Таким образом, решая прямую задачу линейного программирования, мы можем найти оптимальную стратегию Q.= (q 1., q 2., q n.) игрока B. Подведём итог. Задача второго игрока минимизация проигрыша V Задача первого игрока максимизация выигрыша V Целевая функция F /= x 1+ x 2+ x 3+.+ x n = → max F = y 1+ y 2+ y 3+.+ y m = → min Функциональные ограничения Общие (прямые) ограничения x 1 ≥ 0, x 2 ≥ 0,., x n ≥ 0 y 1 ≥ 0, y 2 ≥ 0,., y m ≥ 0 Задачи обоих игроков образуют пару симметричных взаимодвойственных задач линейного программирования, и, поэтому нет необходимости решать обе эти задачи, т.к.

Игры Стратегии Играть

Найдя решение одной из них, можно найти и решение другой. Примечание Из сведения задачи решения конечной матричной антагонистической игры к задаче линейного программирования (ЗЛП) можно сделать заключение по поводу существования решения антагонистической игры m × n, не опираясь. Пусть задача о нахождении оптимальной стратегии P.= (p 1., p 2., p m.) игрока A сведена к задаче линейного программирования с условиями неравенствами (1.8.4) и минимизируемой функцией (1.8.5). Всегда ли существует её решение? Известно, что решение задачи линейного программирования может и не существовать; оно отсутствует, если: 1. Функциональные и общие условия - равенства или неравенства - вообще не имеют допустимых неотрицательных решений; 2.

Допустимые решения существуют, но среди них нет оптимального, так как минимизируемая функция не ограничена снизу. Все преобразования можно получить через онлайн-калькулятор Посмотрим, как обстоит дело в нашем случае. Допустимые решения ЗЛП в нашем случае всегда существуют. Действительно, с помощью аффинных преобразований сделаем элементы платёжной матрицы A строго положительными, например, прибавив достаточно большое положительное число М к каждому элементу платёжной матрицы, и обозначим наименьший элемент матрицы A через μ: μ = min min a ij i j Положим теперь y 1 = 1/μ, y 2 = y 3 =. Нетрудно видеть, что эта система значений переменных х 1, х 2, х 3., х m представляют собой допустимое решение ЗЛП - все они неотрицательны, и их совокупность удовлетворяет условиям (1.8.4). Теперь убедимся, что линейная функция (1.8.5) не может быть неограниченной снизу. Действительно, все y 1, y 2, y 3., y m неотрицательны, а коэффициенты при них в в выражении (1.8.5) положительные (равные единицам), значит, функция F в формуле (1.8.5) тоже неотрицательна, значит, она ограничена снизу (нулём) и решение задачи линейного программирования (а следовательно, и игры m × n) существует.

Решить игру с матрицей: 1. В соответствии с алгоритмом определим, существуют ли в ней доминируемые стратегии, чтобы исключить их. Доминируемых стратегий нет. Поскольку матрица содержит отрицательные числа, то нужно добиться, чтобы все её элементы были неотрицательны, прибавив ко всем её элементам число, равное модулю наименьшего числа матрицы. Минимальный элемент матрицы равен - 0,1, его модуль равен 0,1. Прибавим ко всем элементам платёжной матрицы число, равное 0,1, в результате получим: Умножим все элементы полученной матрицы на 10, чтобы удобнее проводить последующие вычисления.

Проведённые аффинные преобразования на оптимальных стратегиях не скажутся, а цену игры мы восстановим, сделав обратные преобразования (разделим полученную сумму на 10 и отнимем 0,1). Припишем строкам вероятности p 1, p 2, p 3. Тогда среднее значение (математическое ожидание) выигрыша игрока A при применении игроком B своей первой стратегии равен 1p 1 + 7p 2 + 5p 3 (первый столбец поэлементно умножаем на вероятности p 1, p 2, p 3 и полученные произведения суммируем).

Это выигрыш не может быть меньше гарантированной цены игры V: 1p 1 + 7p 2 + 5p 3 ≥ V. Аналогично для других стратегий игрока B. Разделим обе части неравенства на V и введём обозначения y i = p i/ V (i = 1, 2, 3.): Игрок A стремиться повысить цену игры (V→ max). Поэтому F → min. Получили задачу линейного программирования: F = y 1 + y 2 + y 3 → min Аналогично припишем столбцам вероятности q 1, q 2, q 3. Тогда средний проигрыш игрока B при применении игроком A его первой стратегии равен 1q 1 + 4q 2 + 6q 3 (1-ю строку поэлементно умножаем на вероятности q 1,q 2, q 3 и полученные произведения суммируем).

Онлайн Игры Стратегии

Этот проигрыш не может быть больше цены игры V: 1q 1 + 4q 2 + 6q 3 ≤ V. Аналогично для других стратегий игрока A. Разделим обе части неравенств на V и введём обозначения x i = q i / V ( i = 1, 2, 3) Игрок B стремится понизить цену игры (V→min), поэтому F / → max. Получили задачу линейного программирования: F' = x 1 + x 2 + x 3 → max Полученные задачи являются взаимно двойственными задачами линейного программирования. Решим любую из них. Окончательный результат - таблица имеет следующий вид: у1 3/28 p1= 3/8 у2 0 p2= 0 у3 5/28 p3= 5/8 F / 2/7 V= 3 1/2 х1 1/7 q1= 1/2 х2 0 q2= 0 х3 1/7 q3= 1/2 F 2/7 V= 3 1/2 Итак, оптимальные стратегии: Р.=(3/8; 0; 5/8), Q.=(1/2; 0; 1/2), цена игры: для модифицированной задачи V= 3,5, а для исходной задачи V / = 3,5/10-0,1 = 0,25.

Comments are closed.