Алгоритм Брауна Робинсона на VB Net

E-gold         Реклама     Заработок     Разработка программ     Заказ работ   ENG 

     

Главная

Программы

Металловедение

Книги

Магазин

Visual Basic

Design

Заказ работ

Великие люди

Система E-gold

Реклама

Ресурсы

Гостевая книга

 

 

Срочно нужны консультации, реферат, курсовая или дипломная работа?


 

В разделе Книги приведен список книг в элетронном формате на различную тематику

 

Решение матричных игр посредством

алгоритма Брауна-Робинсона на Visual Basic (VB NET)

 

Изучение данного алгоритма и составление алгоритма началось с заказа, который я получил ... естественно для выполнения за WM … Но данная тема меня заинтересовала и я решил еще создать простую программу для демонстрации работы алгоритма.

Справедливости ради надо сказать, что теоретическая сторона данного решения и алгоритм на языке Паскаль были очень хорошо освещены в курсовой работе ….

Для того, чтобы иметь представление о важности данного алгоритма начнем немного с теории матричных игр.

«Теория игр – раздел математики, предметом которого является изучение математических моделей принятия оптимальных решений в условиях конфликта... Download ».

Математическая теория игр способна не только указать оптимальный путь к решению некоторых проблем, но и прогнозировать их исход. Матричные игры серьёзно изучаются специалистами, так как они довольно просты и к ним могут быть сведены игры общего вида. Поэтому теория матричных игр  хорошо развита, существуют различные методы поиска решения игр.

Но в большинстве случаев решение матричных игр представляет собой трудный и громоздкий процесс. Есть примеры, когда даже для матриц размера 3´3, процесс поиска решения довольно трудоёмкий.

Кроме того, выигрыши игроков в каждой ситуации не всегда определяются точными измерениями. В процессе сбора данных об изучаемом явлении, анализа этих данных и введения при построении модели различных предположений накапливаются ошибки. Они же могут выражаться числами в матрице выигрышей. Поэтому точность в определении значения игры и оптимальных стратегий игроков оправдана не всегда.

А также, следует заметить, что погрешность в оценке игроком своего выигрыша не может привести к практически серьёзным последствиям и небольшое отклонение игрока от оптимальной стратегии не влечёт за собой существенного изменения в его выигрыше. Остальное читайте тут ….

Поэтому возникает потребность в разработке численных методов решения матричных игр. В настоящее время в теории игр известны несколько способов приближенного решения матричных игр. 

Условие выполнения задания было следующим:

 


Рис.1 Блок – схема работы программы

 

Дан экселевский файл номерами кластеров («export.xls»). Программа должна прочитать из данного файла данные столбцы, выбрать неповторяющиеся числа (кластера), упорядочить их – это будет 1-ый игрок нашей матрицы.

В программу нужно будет кол-во ввести коэффициент для каждого кластера.

Затем вводится кол-во денежных сумм и сами суммы – это будет 2 – ой игрок нашей матрицы.

Элементами матрицы будут доходы от каждой денежной суммы с соответствующим кластером, который расчитывается по следующей формуле:

 

K*Xj-exp^(0,001*Xj)

Общая блок – схема приведена на рис. 1.

 

В итоге родилась программа «BrawnRob, интерфейс которой приведен на рис. 2.

 

 

Рис. 2. Интерфейс программы «BrawnRob»

 

Работа программы начинается с нажатия кнопки «Input DATA». Программа считывает числа из файла «export.xls», отбрасывает все повторяющиеся числа и сортирует оставшиеся числа. В окне «Номер кластера» появляются наши отсортированные числа, затем программа запрашивает ввод коэффициентов К, количества денежных сумм и сами денежные суммы, которые отображаются в соответствующих окнах (Рис. 3).

Рис.3 Ввод информации

 

 

Нажатие на кнопку «Start» выводит введенную матрицу, запускает алгоритм Брауна-Робинсона решения матричной игры и отображает результат выполненной работы в соответствующих окнах программы (Рис. 4)

 

Рис.4 Результат работы программы «BrawnRob»

 

 

Для наглядности, большего быстродействия и ясности алгоритма программы я разработал более упрощенную программу, в которой требуется ввести размерность матрицы и сами элементы матрицы, после чего введенная матрица будет отображена на экране и можно будет запускать алгоритм Брауна - Робинсона.

На Рис. 5 приведен начальный вид программы.

 

 

Рис.5 Начальный вид упрощенной программы «BrawnRob»

 

При нажатии на кнопку “Input DATA” программа запрашивает размерность матрицы (количество строк и колонок) – Рис. 5 и 6.

 

Рис.5 Ввод количества столбцов матрицы

 

 

Рис.6 Ввод количества строк матрицы

 

После чего вводим элементы матрицы (Рис. 7), кто начинает и стратегию.

 

Рис.7 Ввод элементов матрицы

 

Нажатие на кнопку «Start» выводит введенную матрицу, запускает алгоритм Брауна-Робинсона решения матричной игры и отображает результат выполненной работы в соответствующих окнах программы (Рис. 8)

 

Рис.8 Результат работы упрощенной программы «BrawnRob»

 

 

Программу скачать тут «BrawnRob».

 

 

Код упрощенной программы BrawnRob» на VB Net имеет следующий вид:

 

 

Dim i, j, k As Integer

    Dim z As String

    Dim Check

 

    Public Sub MySub() 'простая программа (программа по заказу в Form1)

        n = InputBox("Введите количество колонок матрицы n = ", "Ввод количества колонок n")

        m = InputBox("Введите количество строк  матрицы m = ", "Ввод количества строк m")

        ListBox1.Items.Add(n)

        ListBox2.Items.Add(m)

 

        For i = 1 To m

            For j = 1 To n

                Matrix(i, j) = InputBox("Введите элемент матрицы  матрицы [" & i & "," & j & "]", "Ввод элемента матрицы")

            Next j

        Next i

 

 

        For i = 1 To m

            z = " "

            For j = 1 To n

                z = z & Int(Matrix(i, j)) & vbTab

            Next j

            ListBox12.Items.Add(z)

        Next i

    End Sub

 

 

    Private Sub Read_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Read.Click

        'Wb1.Navigate("http://artmetals.narod.ru/")

        MySub()

    End Sub

 

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

 

        pl = InputBox("Игру начинает ", "Введите 1 или 2")  'игру начинает 1-ый игрок

        st = InputBox("Выбор стратегии ", "Введите 1 или 2")  'игра начинается с 1-ой стратегией

        kl = 10 'количество иттераций

        a = 1

        win_one(0, 1) = 0

        win_two(0, 1) = 0

        Do

            ListBox4.Items.Add(a)

            ListBox5.Items.Add(st) 'формирование таблицы: номер итерации, стратегия 1игр.

            If pl = 2 Then

                For i = 1 To n

                    win_one(a, i) = Matrix(st, i) + win_one(a - 1, i) 'формирование матрицы выигрышей 1 игр.

                    ListBox5.Items.Add(win_one(a, i))  '          вывод на экран})

                Next i

 

                st1 = igr_one() '           определение ответной стратегии 2 игр.

 

 

                ListBox7.Items.Add(st1)  '        вывод на экран

 

                For i = 1 To m

                    win_two(a, i) = Matrix(i, st1) + win_two(a - 1, i) '   {формирование матрицы выигрышей 2 игр.

                    ListBox8.Items.Add(win_two(a, i))  '      вывод на экран

                Next i

 

 

                ListBox9.Items.Add(win_one(a, st1))  ' вывод наибольшего суммарного выигрыша 1 игр.

                st = igr_two() '                    определение ответной стратегии 1 игр.

                ListBox10.Items.Add(win_two(a, st))  'вывод наибольшего суммарного выигрыша 2 игр.

                ListBox11.Items.Add(win_one(a, st1) + win_two(a, st) / (a * 2))  'приближенное значение цены игры

            Else

                For i = 1 To m

                    win_one(a, i) = Matrix(i, st) + win_one(a - 1, i) 'формирование матрицы выигрышей 1 игр.

                    ListBox6.Items.Add(win_one(a, i))

                Next i

 

 

                st1 = igr_one() '               определение ответной стратегии 2 игр.

 

 

                ListBox7.Items.Add(st1)

 

                For i = 1 To n

                    win_two(a, i) = Matrix(st1, i) + win_two(a - 1, i) 'формирование матрицы выигрышей 2 игр.

                    ListBox8.Items.Add(win_two(a, i))

                Next i

 

 

                ListBox9.Items.Add(win_one(a, st1)) 'вывод наибольшего суммарного выигрыша 1 игр.

                st = igr_two() 'определение ответной стратегии 1 игр.

                ListBox10.Items.Add(win_two(a, st)) 'вывод наибольшего суммарного выигрыша 2 игр.

                ListBox11.Items.Add(win_one(a, st1) + win_two(a, st) / (a * 2)) 'приближенное значение цены игры

            End If

            a = a + 1 ' увеличение счетчика итераций

 

        Loop While a < kl

 

    End Sub

 

 

    Function igr_one() 'функция определения следующего хода для игрока 1

        Dim a1, a2, max As Integer

        max = win_one(a, 1)

        igr_one = 1

        If pl = 1 Then a2 = m Else a2 = n

        For a1 = 1 To a2

 

            If win_one(a, a1) > max Then

                max = win_one(a, a1)

                igr_one = a1

            End If

        Next a1 ' check

    End Function

 

 

    Function igr_two() '    Функция определения следующего хода для игрока }

        Dim a1, a2, min As Integer

        min = win_two(a, 1)

        igr_two = 1

        If pl = 1 Then a2 = n Else a2 = m

        For a1 = 1 To a2

            If win_two(a, a1) < min Then

                min = win_two(a, a1)

                igr_two = a1

            End If

        Next a1 ' check

    End Function

 

    Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked

        Process.Start("http://artmetals.narod.ru/")

 

    End Sub

End Class

 

 

 

 

В разделе Книги приведен список книг в элетронном формате на различную тематику

 

http://artmetals.narod.ru

Artyomal@rambler.ru

 

 

 

artyomal@rambler.ru

 

 Rambler's Top100

 

Сайт создан в системе uCoz