Автор работы: Пользователь скрыл имя, 17 Ноября 2011 в 08:04, курсовая работа
Теория игр – раздел математики, предметом которого является изучение математических моделей принятия оптимальных решений в условиях конфликта.
ИГРОЙ называется всякая конфликтная ситуация, изучаемая в теории игр и представляющая собой упрощенную, схематизированную модель ситуации. От реальной конфликтной ситуации игра отличается тем, что не включает второстепенные, несущественные для ситуации факторы и ведется по определенным правилам, которые в реальной ситуации могут нарушаться
Преимущества С++ по сравнению с аналогичными программными продуктами.
Система программирования с++, рассчитана на программирование различных приложений и предоставляет большое количество компонентов для этого.
К тому же работодателей интересует, прежде всего, скорость и качество создания программ, а эти характеристики может обеспечить только среда визуального проектирования, способная взять на себя значительные объемы рутинной работы по подготовке приложений, а также согласовать деятельность группы постановщиков, кодировщиков, тестеров и технических писателей. Возможности QT C++ полностью отвечают подобным требованиям и подходят для создания систем любой сложности.
В
приложении приведена реализация итеративного
метода Брауна-Робинсона решения
матричных игр в среде
Пользователь вводит матрицу выигрышей размера , где , .
Далее машина запрашивает информацию о том, кто из игроков начинает игру, какую стратегию он выбирает и количество итераций.
Во второй таблице выводятся результаты разыгрывании игры за определённое число итераций.
Пользователь
вводит время начала работы и время
продолжительности работы. Количество
окошек и максимальное время ожидания
в очереди. Информация об очередях хранятся
в массивах объединенных в структуры
данных.
В программном модуле будет три основные функции: функция определения следующего хода для первого игрока (PlayerOne()), функция определения следующего хода для второго игрока (PlayerTwo) и функция решения матричной игры итерационным методом Брауна-Робинсона (реакция на нажатие кнопки StartBtn).
Рисунок 1. Блок схема работы функции ‘PlayerOne’
/*Функция определения следующего хода для игрока 1*/
int MainWindow::PlayerOne()
{
int a2, Max;
Max = this->win_plone[this->a][0];
if(this->pl == 1)
a2 = m;
else
a2 = n;
int id = 0;
for(int i = 0; i < a2; i++)
if(this->win_plone[a][i] > Max)
{
Max = this->win_plone[a][i];
id = i;
}
return id;// Max
}
/*Функция определения следующего хода для игрока 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 игрока
Информация о работе Описание и программирование матричных игр