Автор работы: Пользователь скрыл имя, 17 Ноября 2011 в 08:04, курсовая работа
Теория игр – раздел математики, предметом которого является изучение математических моделей принятия оптимальных решений в условиях конфликта.
ИГРОЙ называется всякая конфликтная ситуация, изучаемая в теории игр и представляющая собой упрощенную, схематизированную модель ситуации. От реальной конфликтной ситуации игра отличается тем, что не включает второстепенные, несущественные для ситуации факторы и ведется по определенным правилам, которые в реальной ситуации могут нарушаться
}
/*
Функция определения следующего хода для игрока 2
*/
int MainWindow::PlayerTwo()
{
int a2, Min;
Min = this->win_pltwo[this->a][0];
if(this->pl == 1)
a2 = n;
else
a2 = m;
int id = 0;
for(int i = 0; i < a2; i++)
if(this->win_pltwo[a][i] < Min)
{
Min = this->win_pltwo[a][i];
id = i;
}
return id;//Min
}
void MainWindow::StartBtn()
{
this->m = this->ui->tableWidget->
this->n = this->ui->tableWidget->
/*
Предположим, что:
*/
this->nol = true;//Есть элементы равные 0
this->otr = false;//Отрицательных элементов нет
this->min = this->ui->tableWidget->item(0, 0)->text().toInt();//
/*
Заполнение пользовательского
*/
this->array = new int*[m];
for(int i = 0; i < m; i++)
{
this->array[i] = new int[n];
for(int j = 0; j < n; j++)
{
if(this->ui->tableWidget->
this->array[i][j] = this->ui->tableWidget->item(i, j)->text().toInt();
else
this->array[i][j] = 0;
if(this->array[i][j])
this->nol = false;
if(this->array[i][j] < 0)
this->otr = true;
if(this->array[i][j] < min)
min = this->array[i][j];
}
}
/*
Итеративный метод Брауна-
*/
if(this->nol)//Все элементы матрицы - 0
{
QMessageBox::warning(this, QString::fromLocal8Bit("
QString::fromLocal8Bit("Все элементы матрицы равны 0!"),
QMessageBox::Cancel);
//QString::fromAscii()
}
else
{
if(this->otr)//если есть отрицательные элементы
{
for(int j = 0; j < this->m; j++)
for(int i = 0; i < this->m; i++)
this->array[i][j] = array[i][j] - this->min;
//Вывод окончательной матрицы
for(int j = 0; j < this->m; j++)
for(int i = 0; i < this->n; i++)
{
QTableWidgetItem *item = new QTableWidgetItem(0);
QString s;
item->setText(s.setNum(this->
this->ui->tableWidget->
}
}
a = 1;
/*Игрок который ходит первым*/
if(this->ui->player1->
this->pl = 1;
else
this->pl = 2;
/*Начальна стратегия*/
this->st = this->ui->strateg->text().
/*Количество итераций*/
this->kl = this->ui->iteration->text().
for(int i = 0; i < this->n; i++)
this->win_plone[0][i] = 0;
do
{
if(this->pl == 2)//Ходит второй игрок
{
for(int i = 0; i < this->n; i++)//Формирование матрицы выигрышей 1 игрока
this->win_plone[a][i] = this->array[st][i] + this->win_plone[a - 1][i];//
st1 = this->PlayerOne();
for(int i = 0; i < this->m; i++)//Формирование матрицы выигрышей 2 игрока
this->win_pltwo[a][i] = this->array[i][st1] + this->win_pltwo[a - 1][i];//
st = this->PlayerTwo();
}
else
{
for(int i = 0; i < this->m; i++)//Формирование матрицы выигрышей 1 игрока
this->win_plone[a][i] = this->array[i][st] + this->win_plone[a - 1][i];//
st1 = this->PlayerOne();
for(int i = 0; i < this->n; i++)//Формирование матрицы выигрышей 2 игрока
this->win_pltwo[a][i] = this->array[st1][i] + this->win_pltwo[a - 1][i];//
st = this->PlayerTwo();
}
this->ui->outTable->
/*
Внесение данных в таблицу
*/
char buf[50] = "";
for(int i = 0; i < this->n; i++)
sprintf(buf, "%s %i", buf, this->win_plone[a][i]);
//qDebug("%s", buf);
this->setOutTblItem(a - 1, 1, QString::fromLocal8Bit(buf));/
sprintf(buf, "%i", st1);
this->setOutTblItem(a - 1, 0, QString::fromLocal8Bit(buf));/
sprintf(buf, "%i", st);//Стратегия второго игрока
this->setOutTblItem(a - 1, 2, QString::fromLocal8Bit(buf));
sprintf(buf, "");
for(int i = 0; i < this->m; i++)
sprintf(buf, "%s %i", buf, this->win_pltwo[a][i]);
//Выйграш второго игрока
this->setOutTblItem(a - 1, 3, QString::fromLocal8Bit(buf));
//V - вывод наибольшего суммарного выигрыша 1 игрока
sprintf(buf, "%i", this->win_plone[a][st1]);
this->setOutTblItem(a - 1, 4, QString::fromLocal8Bit(buf));
//W - вывод наибольшего суммарного выигрыша 2 игрока
sprintf(buf, "%i", this->win_pltwo[a][st]);
this->setOutTblItem(a - 1, 5, QString::fromLocal8Bit(buf));
//Y - приближенное значение цены игры
sprintf(buf, "%.2f", (float)(this->win_plone[a][
->win_pltwo[a][st])/ (a * 2));
this->setOutTblItem(a - 1, 6, QString::fromLocal8Bit(buf));
/**/
a++;
}while(a <= kl);
}
}
Работа программы начинается с её настройки. Для начала нужно указать размер входной таблицы (переключатели 1, Рисунок 7.2.1). Далее записать исходные данные в таблицу (2, Рисунок 7.2.1). В случае, если данные в ячейку таблицы не будут внесены, то пустой элемент таблицы будет приравнен к нулю. Затем указать какой игрок первым начинает ходить(3, Рисунок 7.2.1), его начальную стратегию (4, Рисунок 7.2.1) и количество ходов, которые надо просчитать (5, Рисунок 7.2.1). Для начала расчета необходимо нажать кнопку «Начать» (6, Рисунок 7.2.1). Результаты расчетов будут выведены в таблицу (8, Рисунок 7.2.1). Кнопка «По умолчанию» (7, Рисунок 7.2.1) заполняет таблицу пользователей значениями, которые были в ней при старте программы.
Рисунок
7.2.1. Основные элементы
управления программой.
Программа
имеет поддержку тем
Программа имеет встроенную справочную систему (Рисунок 7.2.2), которая находится на вкладке «Справка». В ней можно найти подробное описание принципа работы программы, и примеры задач, решаемых данным программным средством.
Рисунок 7.2.2. Встроенная справочная система.
В данной работе мы изучили некоторые методы приближённого решения матричных игр: монотонный итеративный алгоритм решения матричных игр, и итерационный метод Брауна-Робинсона.
В ходе разработки данного проекта были приобретены практические навыки решения матричных игр.
Итогом работы над данным курсовым проектом стала программа, написанная на объектно-ориентированном языке С++ реализующая итерационный метод Брауна – Робинсона для решения матричных игр. С помощью данной программы можно решать сельскохозяйственные задачи (о прибыли в зависимости от того, какое выдалось лето), производственные задачи (о планировании оптимального производства и расчет прибыли от продукции) и простеньки игры для двух человек (игра в «Пальцы»).
Информация о работе Описание и программирование матричных игр