Игра называется кооперативной, если в ней игрокам разрешается обсуждать перед игрой свои стратегии и договариваться о совместных действиях (добровольный обмен между игроками информацией, совместный выбор стратегий, передача игроками части выигрыша друг другу и т.п.);
Иначе говоря, игроки могут образовывать коалиции. Теория кооперативных игр исследует типы коалиций, образующихся в процессе игры и условия, необходимые для их устойчивого существования.
Кооперативной называется игра, в которой группы игроков - коалиции - могут объединять свои усилия. Этим она отличается от игр, в которых коалиции неприемлемы и каждый обязан играть за себя.
Теория игр занимается изучением конфликтов, то есть ситуаций, в которых группе людей необходимо выработать какое-либо решение, касающееся их всех. Некооперативная теория игр изучает то, как должны действовать игроки, чтобы прийти к тому или иному результату, кооперативная же теория игр изучает вопрос о том, какие исходы достижимы и условия достижения этих исходов. Некооперативной игрой называется математическая модель взаимодействия нескольких сторон (игроков), в процессе которого они не могут формировать коалиции и координировать свои действия. Некооперативная игра в нормальной форме предполагает следующий порядок разыгрывания.
1. Игроки одновременно и независимо друг от друга
выбирают из множеств
свои стратегии. Вектор стратегий
всех игроков представляет собой
ситуацию в игре.
. Каждый игрок получает выигрыш, определяемый
значением функции
, на этом взаимодействие между ними прекращается.
Нормальная
форма игры описывает статическое взаимодействие игроков, не предусматривая
возможности последовательных ходов, накопления информации о действиях соперника
и повторяющегося взаимодействия. Для моделирования этих аспектов используется
развернутая форма игры. Некооперативная игра в развернутой форме с множеством
игроков
представляется с использованием ориентированного
<#"787330.files/image021.gif">, соответствующей нетерминальной позиции, определен
игрок
, совершающий в ней ход и множество ходов этого игрока
. Каждому ходу s
соответствует ребро, выходящее из вершины
. Для учета несовершенства информации, имеющейся у
игроков, нетерминальные вершины могут объединяться в информационные множества
<#"787330.files/image021.gif">, соответствующей терминальной позиции, определены
функции выигрыша всех игроков
.
Игра предполагает следующий порядок разыгрывания:
. Игра начинается из начальной позиции.
.
В любой нетерминальной позиции
игрок,
имеющий в ней право хода, выбирает ход s
, в
результате чего игра попадает в следующую позицию, в которую входит ребро,
соответствующее ходу S. Если эта позиция является нетерминальной, то
повторяется п. 2.
.
Если игра попадает в терминальную позицию υ, то все игроки получают выигрыши
, и игра
завершается.
Принципы оптимальности Основным принципом оптимальности стратегий для некооперативных игр в нормальной форме является равновесие Нэша <#"787330.files/image027.jpg">
Рисунок 2. - Игровой процесс
Рисунок 3. - Игровой процесс

В результате выполнения курсовой работы по дисциплине «Интеллектуальные информационные системы» на тему «Программирование игр и головоломок» были рассмотрены основы математической теории игр, показаны возможные представления игр и их классификация.
Разработан и реализован вариант игры «Быки и коровы». Игры бывают разные, и стратегии у них разные, у каждой игры она индивидуальная. Для игры «Быки и коровы» главной задачей компьютера является - отгадать число, которое загадал пользователь за минимально возможное количество ходов.
Созданная игра является одной из самых примитивных, но в процессе ее разработки, я смог больше узнать о базовых концепциях программирования интеллектуальных информационных систем под операционную систему Windows.
Программирование игр - довольно сложный процесс, и самая большая
сложность заключается в том, чтобы запрограммировать компьютер на различные
ответные реакции на действия со стороны пользователя. Тем не менее, это
довольно увлекательный процесс. Для начала надо на бумаге попытаться написать
некий алгоритм действий, который будет выполняться в игре, а затем уже пробовать
этот алгоритм изобразить в виде кода.
1. Колобашкина Л.В., Алюшин М.В. - Информационные технологии принятия решений в условиях конфликта, 2010 г. - 164 с.
. Н. Н. Писарук - Введение в теорию игр, 2013 г. - 239 с.
. Н. Н. Воробьева - Бесконечные антагонистические игры, 1963 г. - 195 с.
. Джеймс Карс - Книга “Конечных и Бесконечных Игр” - 113 с.
. Н. С. Садовин, Т. Н. Садовина - Основы теории игр, 2011 г. - 120 с.
. Васин А. А., Морозов В. В. - Теория игр и модели математической экономики. - М., 2005г. - 127 с.
. Петросян Л. А., Зенкевич Н.А., Семина Е.А. - Теория игр: Учеб. пособие для ун-тов, 1998 г. - 304 с.
. Д.
Андерхилл, С. Барретт, П. Бернелл, П. Бернем, и др. Общая редакция: д.э.н.
Осадчая И.М. Политика. Толковый словарь. - М., 2001 г. - 235 с.
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>GetCows(int n[4], int m[4])
{c = 0;(int i = 0; i < 4; i++)(int j = 0; j < 4; j++)(n[i] == m[j] && i != j) c++;c;
}GetBulls(int n[4], int m[4])
{b = 0;(int i = 0; i < 4; i++)(n[i] == m[i]) b++;b;
}main()
{m[4] = { 1, 2, 3, 4 };temp[4], n[4], number, bulls, cows, w, t, s, c, attempts = 1;();("Zagadayte chislo: ");("%d", &number);[0] = number / 1000;[1] = number % 1000 / 100;[2] = number % 100 / 10;[3] = number % 10;= GetBulls(n, m);= GetCows(n, m);("[%d%d%d%d]\t[bulls: %d]\t[cows: %d]\n", m[0], m[1], m[2], m[3], bulls, cows);= 0;= 5;= bulls + cows;(bulls + cows != 4)
{++;(w == 4)
{= 0;++;
}[0] = m[0]; temp[1] = m[1]; temp[2] = m[2]; temp[3] = m[3];[w] = c;++;= GetBulls(n, temp);= GetCows(n, temp);("[%d%d%d%d]\t[bulls: %d]\t[cows: %d]\n", temp[0], temp[1], temp[2], temp[3], bulls, cows);(bulls + cows > s)
{[w - 1] = c;++;= bulls + cows;
}
}= 0;= 0;= bulls;(bulls != 4)++;(t == 4)++;= 0;(w == t) t++;[0] = m[0]; temp[1] = m[1]; temp[2] = m[2]; temp[3] = m[3];= temp[w];[w] = temp[t];
temp[t] = c;++;
bulls = GetBulls(n, temp);("[%d%d%d%d]\t[bulls: %d]\n", temp[0], temp[1], temp[2], temp[3], bulls, cows);(bulls > s)= m[w];[w] = m[t - 1];[t - 1] = c;++;= 0;= bulls;("Chislo ugadano: %d%d%d%d\n", m[0], m[1], m[2], m[3]);("Kolichestvo popytok: %d", attempts);
getch();
}