Срочно нужны консультации, реферат, курсовая или дипломная работа?
В разделе Книги приведен список книг в элетронном формате на
различную тематику
Решение матричных игр посредством
алгоритма Брауна-Робинсона на 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