Автор работы: Пользователь скрыл имя, 13 Июня 2013 в 18:44, курсовая работа
Теория игр – раздел математики, предметом которого является изучение математических моделей принятия оптимальных решений в условиях конфликта.
ИГРОЙ называется всякая конфликтная ситуация, изучаемая в теории игр и представляющая собой упрощенную, схематизированную модель ситуации. От реальной конфликтной ситуации игра отличается тем, что не включает второстепенные, несущественные для ситуации факторы и ведется по определенным правилам, которые в реальной ситуации могут нарушаться
Классификацию игр можно проводить: по количеству игроков, количеству стратегий, характеру взаимодействия игроков, характеру выигрыша, количеству ходов, состоянию информации и т.д.
x1=1/2x0+1/2 =1/2(1, 0, 0)+1/2(0, 1, 0)=(1/2, 1/2, 0);
c1=1/2c0+1/2 =1/2(0, 1, 2)+1/2(4, 2, 1)=(2, 3/2, 3/2).
Итерация1. Так как e1 не равно 0, то процесс продолжается дальше. Теперь за начальные условия примем найденные значения векторов x1, c1. С их помощью вычисляем , которые с большей точностью будут близки к истинным оптимальным стратегиям игрока 1.
Итак, пусть x1=(1/2, 1/2, 0), c1=(2, 3/2, 3/2).
Найдём множество индексов , на которых игрок 1 может получить наименьший выигрыш: , значит, J1={2,3}. Для этих индексов выигрыш равен 3/2. Это есть значение нижней оценки цены игры, т. е. . Заметим, что .
Далее найдём компоненты векторов . Для этого рассмотрим подыгру . В силу симметричности матрицы ее решением будет вектор (1/2, 1/2), т. е. 1/2a1+1/2a2+0a3=
=(4/2, 3/2, 3/2).
Вычислим коэффициент e2. Для этого решим подыгру (2´3): . Стратегии игроков совпадают, поэтому e2=0. В этом случае цена игры совпадает со своим нижним значением, т. е. . Возвращаемся к предыдущему шагу.
Итак, оптимальной стратегией игрока 1 является x*=x1=(1/2, 1/2, 0) и .Задача решена.
На первый взгляд алгоритм практически трудно реализовать, так как не известно, какого размера будет получена матрица для подыгры ГN. Но на самом деле с вероятностью 1 на каждом шаге придётся решать подыгру размера не больше чем m´2.[9]
Инженерами-программистами алгоритм был реализован на языке программирования Фортран-IV. Вычислительные эксперименты, проведённые на ЭЦВМ ЕС-1030, показали, что для игр размерности от 25´25 до 100´100, элементы, матрицы выигрышей которых были заполнены случайными числами, алгоритм позволяет найти искомое приближение за 100-1000 итераций, причём их число слабо зависит от размера матрицы. Для решения одной задачи машина затрачивает не дольше 8 минут. Ими же были разработаны различные модификации алгоритма. [9]
При решении поставленной задачи оптимально использовать для представления информационных материалов язык C++, который является языком высокого уровня и позволяет быстро и эффективно создавать приложения.
Для реализации "такой-то программы" была выбрана среда программирования Nokia QT версии 4.5.0 фирмы Nokia, так как она предоставляет наиболее широкие возможности для программирования приложений для различных платформ.
С++ – это язык для быстрого создания приложений. Высокопроизводительный инструмент визуального построения приложений включает в себя настоящий компилятор кода и предоставляет средства визуального программирования, несколько похожие на те, что можно обнаружить в Microsoft Visual Basic или в других инструментах визуального проектирования. В QT также входят локальные библиотеки для работы с базами данных, библиотеки визуальных компонентов, и прочее хозяйство, необходимое для того, чтобы чувствовать себя совершенно уверенным при профессиональной разработке информационных систем или просто кросплатформеных приложений.
Прежде всего, QT c++ предназначен для профессиональных разработчиков, желающих очень быстро разрабатывать. QT cодержит большой набор компонентов и классов, поэтому в QT должны быть прежде всего заинтересованы те, кто разрабатывает продукты на продажу. С другой стороны небольшие по размерам и быстро исполняемые модули означают, что требования к клиентским рабочим местам существенно снижаются – это имеет немаловажное значение и для конечных пользователей.
Преимущества С++ по сравнению с аналогичными программными продуктами.
Система программирования с++, рассчитана на программирование различных приложений и предоставляет большое количество компонентов для этого.
К тому же работодателей
интересует, прежде всего, скорость и
качество создания программ, а эти
характеристики может обеспечить только
среда визуального
В приложении приведена реализация итеративного метода Брауна-Робинсона решения матричных игр в среде программирования QT 4.5.0 для платформы win32, на языке C++.
Пользователь вводит матрицу выигрышей размера , где , .
Далее машина запрашивает информацию о том, кто из игроков начинает игру, какую стратегию он выбирает и количество итераций.
Во второй таблице выводятся результаты разыгрывании игры за определённое число итераций.
Матрица, вводимая пользователем, будет записываться в динамически создаваемый массив типа int(целочисленный): int **array. Параметры, задаваемые пользователем в ходе работы программы будут храниться в классовых переменных. Результаты расчета программы будут заноситься в двумерные массивы(win_plone[150][10], win_pltwo[150][10]), после чего выводиться в организованном виде в таблице.
В программном модуле будет три основные функции: функция определения следующего хода для первого игрока (PlayerOne()), функция определения следующего хода для второго игрока (PlayerTwo) и функция решения матричной игры итерационным методом Брауна-Робинсона (реакция на нажатие кнопки StartBtn).
Рисунок 1. Блок схема работы функции ‘PlayerOne’
Рисунок 2. Блок схема работы функции ‘PlayerTwo’
Рисунок 3. Блок схема работы основной программы
Рисунок 4. Проектирование формы.
Основные компоненты и их назначение:
Для более приятного диалога с программой был использован интерфейс под названием «Plastique», использованный в операционной системе «Kubuntu».
Для более удобного использования компоненты сгруппированы на панелях с заголовками.
Рисунок 5. Сравнение программы со стандартным оформлением и с оформлением «Plastique»
Для написания программы были использованы библиотеки Nokia QT версии 4.5.0 скомпилированные и настроенные на платформу win32 операционной системы Windows.
Программа базируется на типе проекта «GUI приложение QT» (рис. 7.1), и использованными стандартными модулями.
Рисунок 7.1. Создание проекта.
На форме расположены необходимые для работы программы компоненты. Основные использованные классы компонентов:
Рисунок 7.2. Иерархия расположения компонентов на форме.
Main.cpp:
#include <QtGui/QApplication>
#include <QWindowsVistaStyle>
#include <QFile>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
/*
Загрузка таблицы стилей
*/
QFile file(".\\style.txt");
if(file.open(QIODevice::
{
QByteArray line;
while (!file.atEnd())
line += file.readLine();
//Применение таблицы стилей
a.setStyleSheet(QString::
}
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "windows.h"
#include "QWindowsVistaStyle.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void changeEvent(QEvent *e);
private:
int **array;//матрица пользоателя
int m, n;//размерность матрицы пользователя
bool nol;//Все элеметы равны 0?
bool otr;//Наличие отрицательных элементов
int min, max;//Минимальный и максимальный элементы
DWORD win_plone[150][10], win_pltwo[150][10];//Массивы для выигрышей игроков 1 и 2
int a;//Счетчик итераций
int pl;//Игрок
short st,st1,st2;//Стратегии
short kl;//Количество итераций
int PlayerOne();
int PlayerTwo();
void setOutTblItem(int row, int col, QString text);
Ui::MainWindow *ui;
private slots:
void StartBtn();
void SetDefArray();
void UpdateTableRows(int value);
void UpdateTableColumn(int value);
};
#endif // MAINWINDOW_H
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QMessageBox.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
//Инициализация графического интерфейса
ui->setupUi(this);
/*
Установка количества строк и столбцов таблицы
*/
this->ui->tableWidget->
this->ui->tableWidget->
/*
Установка
начальных значений для
*/
this->ui->spinBox->setValue(3)
this->ui->spinBox_2->setValue(
QHeaderView *h = new QHeaderView(Qt::Horizontal);
h->setDefaultSectionSize(50);
this->ui->tableWidget->
//Активна вкладка "Программа"
this->ui->toolBox->
//Заполнение матрицы значениями по умолчанию
this->SetDefArray();
//Загрузка стартовой страницы справки
this->ui->textBrowser->
//Подключение событий
this->ui->spinBox->connect(
this->ui->spinBox_2->connect(
this->ui->defArrayBtn->
this->ui->startBtn->connect(
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void MainWindow::SetDefArray()
{
short a[3][3] =
{
{0,4,2},
{3,1,0},
{1,2,3}
};
this->ui->tableWidget->
this->ui->tableWidget->
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
{
QTableWidgetItem *item = new QTableWidgetItem(0);
QString s;
item->setText(s.setNum(a[i][j]
this->ui->tableWidget->
}
}
void MainWindow::setOutTblItem(int row, int col, QString text)
{
QTableWidgetItem *item = new QTableWidgetItem(0);
item->setText(text);
item->setTextAlignment(Qt::
item->setFlags(Qt::
this->ui->outTable->setItem(
}
void MainWindow::UpdateTableRows(
{
this->ui->tableWidget->
}
Информация о работе Описание и программирование матричных игр