Автор работы: Пользователь скрыл имя, 13 Июня 2013 в 18:44, курсовая работа
Теория игр – раздел математики, предметом которого является изучение математических моделей принятия оптимальных решений в условиях конфликта.
ИГРОЙ называется всякая конфликтная ситуация, изучаемая в теории игр и представляющая собой упрощенную, схематизированную модель ситуации. От реальной конфликтной ситуации игра отличается тем, что не включает второстепенные, несущественные для ситуации факторы и ведется по определенным правилам, которые в реальной ситуации могут нарушаться
Классификацию игр можно проводить: по количеству игроков, количеству стратегий, характеру взаимодействия игроков, характеру выигрыша, количеству ходов, состоянию информации и т.д.
void MainWindow::UpdateTableColumn(
{
this->ui->tableWidget->
}
/*
Функция определения следующего хода для игрока 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->setItem
}
}
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);
}
}
Рисунок 6. Встроенная справочная система.
Информация о работе Описание и программирование матричных игр