Описание и программирование матричных игр

Автор работы: Пользователь скрыл имя, 13 Июня 2013 в 18:44, курсовая работа

Описание

Теория игр – раздел математики, предметом которого является изучение математических моделей принятия оптимальных решений в условиях конфликта.
ИГРОЙ называется всякая конфликтная ситуация, изучаемая в теории игр и представляющая собой упрощенную, схематизированную модель ситуации. От реальной конфликтной ситуации игра отличается тем, что не включает второстепенные, несущественные для ситуации факторы и ведется по определенным правилам, которые в реальной ситуации могут нарушаться
Классификацию игр можно проводить: по количеству игроков, количеству стратегий, характеру взаимодействия игроков, характеру выигрыша, количеству ходов, состоянию информации и т.д.

Работа состоит из  1 файл

Копия Отчет_Курсовая.doc

— 1.42 Мб (Скачать документ)

 

void MainWindow::UpdateTableColumn(int value)

{

    this->ui->tableWidget->setColumnCount(value);

}

 

/*

  Функция определения  следующего хода для игрока 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->rowCount();

    this->n = this->ui->tableWidget->columnCount();

 

    /*

      Предположим, что:

    */

    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->item(i, j)->text() != "")

                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->array[i][j], 10));

                    this->ui->tableWidget->setItem(i, j, item);

                }

        }

        a = 1;

 

        /*Игрок который ходит первым*/

 

        if(this->ui->player1->isChecked())

            this->pl = 1;

        else

            this->pl = 2;

 

        /*Начальна стратегия*/

        this->st = this->ui->strateg->text().toInt() - 1;

 

        /*Количество итераций*/

        this->kl = this->ui->iteration->text().toInt();

 

        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->setRowCount(a);

 

            /*

              Внесение данных в таблицу

            */

            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][st1] + this 
->win_pltwo[a][st])/ (a * 2));

            this->setOutTblItem(a - 1, 6, QString::fromLocal8Bit(buf));

            /**/

            a++;

        }while(a <= kl);

    }

}

 

 

Рисунок 6. Встроенная справочная система.


Информация о работе Описание и программирование матричных игр