Автор работы: Пользователь скрыл имя, 08 Октября 2013 в 22:16, курсовая работа
Данный курсовой проект предназначен для решения задач линейного программирования. Для этого было необходимо произвести расчеты, используя ручной метод решения задачи симплекс методом, табличный процессор MS Excel из пакета программ Microsoft Office, а также необходимо было написать программу в среде Microsoft Visual Basic.
Для решения задач линейного программирования симплекс методом в любом из вышеперечисленных способов возникает ряд неудобств, например: при решении задачи вручную при подсчетах таблиц можно ошибиться и неправильно решить задачу, при решении задачи в табличном процессоре Microsoft Excel существует необходимость переписывать формулы при составлении новой таблицы, написание программы в среде Microsoft Visual Basic очень утомительное и занимает слишком много времени.
Введение 4
1. ОБЩАЯ ЧАСТЬ 5
1.1 Общая задача линейного программирования, применение её для решения различных типов вычислительных задач. 5
1.2.Применение процессора Microsoft Excel для расчета задач линейного программирования 10
1.3. Использование технических и программных средств для решения задач линейного программирования 16
1.3.1.Microsoft Visual Basic 6.0 22
1.3.2 Microsoft Office 24
1.4. Алгоритм нахождения оптимального решения задач линейного программирования 26
2. СПЕЦИАЛЬНАЯ ЧАСТЬ 27
2.1. Задание для курсового проекта 27
2.1.1.Приведение задачи к каноническому виду 28
2.2. Нахождение начального опорного решения (НОР) 29
2.3. Нахождение оптимального решения 30
2.4. Алгоритмы и их описание 33
2.5. Описание программы 42
2.6. Описание процесса отладки программы обработка ошибок программы 44
2.7. Инструкция пользователю 48
3.Заключение 50
Целью данного курсового проекта являлось создание программы по оптимизации задач линейного программирования, c целью автоматизации. Также, было необходимо разработать программу для решения задачи линейного программирования симплексным методом. Использование современных программных средств и приложений позволило упростить задачу, производить выполнение целого комплекса задач одновременно, исключая ручной расчет.
Таким образом, используя возможности MS Excel, где решение численными методами целого ряда математических задач выполняется в табличной форме, а вычисления производятся с использованием математических формул и средств программирования Visual Basic была разработана программа, позволяющая решить задачу ЛП симплексным методом.
Данную программу решения задачи ЛП симплексным методом можно усовершенствовать по мере необходимости, подстраивать под нужды конечного потребителя (пользователя), использовать новые функциональные возможности VB.
Приложение№1.Начало
Рис 25 Общий вид формы
Рис 26 Просчет первой таблицы
Приложение№1.Продолжение
Рис 28 Просчет третьей таблицы
Приложение№1.Окончание
Рис 29 Просчет четвертой таблицы
Рис 30 Вывод сообщения о нахождении решения
Приложение№2. Начало
Private DATA() As Double 'массив эл-тов расчетной таблицы
Private Q() As Double 'массив столбца Q
Private Cb() As Double 'массив эл-тов базового плана
Private X() As String 'массив обозначений строк
Private it As Integer 'индекс текущей таблицы
Private s As Integer 'генеральная строка
Private r As Integer 'генеральный столбец
Private Finish As Boolean 'значение остановки поиска решения
Private tables As Integer 'кол-во таблиц
Private Sub Command1_Click() ‘следующая таблица
Command1.Enabled = False
Command3.Enabled = True
If Check1.Value = 1 Then
Command1.Enabled = True
Command3.Enabled = False
End If
If Proverka Then
Call Cel_line
Call Next_Table
Call ShowData
Call Clear
If Finish = False And Check1.Value = 1 Then
Call Cel_line
End If
Else
MsgBox "Таблица не заполнена или заполнена не до конца!", vbExclamation, "Info"
End If
End Sub
Private Sub Command2_Click() ‘назад
Command1.Enabled = True
Command3.Enabled = True
If it > 0 Then
it = it - 1
Call Clear
Call ShowData
If Check1.Value = 1 Then
Call Cel_line
End If
End If
End Sub
Приложение№2. Продолжение
Private Sub Command3_Click() 'просчет генер. столбца и строки
Call Cel_line
Command1.Enabled = True
Command3.Enabled = False
End Sub
Private Sub Next_Table() 'Расчёт след таблицы
'ReDim - переопределяет область
памяти для хранения
If Finish = False Then
ReDim Preserve DATA(1 To 5, 11, tables + 1)
ReDim Preserve Q(1 To 3, tables + 1)
ReDim Preserve Cb(1 To 3, tables + 1)
ReDim Preserve X(1 To 3, tables + 1)
tables = tables + 1
For i = 1 To 3
For j = 0 To 10
If i = s Then
DATA(i, j, it + 1) = DATA(i, j, it) / DATA(s, r, it)
Else
DATA(i, j, it + 1) = DATA(i, j, it) - (DATA(i, r, it) * DATA(s, j, it)) / DATA(s, r, it)
End If
Next j
Next i
Cb(1, it + 1) = Cb(1, it)
Cb(2, it + 1) = Cb(2, it)
Cb(3, it + 1) = Cb(3, it)
Cb(s, it + 1) = Text_UP(r).Text
X(1, it + 1) = X(1, it)
X(2, it + 1) = X(2, it)
X(3, it + 1) = X(3, it)
X(s, it + 1) = Text0(r).Text
it = it + 1
End If
End Sub
Private Sub Cel_line() 'поиск текущей целевой строки
If Proverka Then
Finish = False
If it = 0 Then Call FirstData
Call Celevaya
For i = 0 To 10
Text5(i).Text = Round(DATA(5, i, it), 2)
Text4(i).Text = Round(DATA(4, i, it), 2)
Next i
Call Find_Col
If r <> 0 Then
Call Calc_Q
Call Find_Row
Else
Приложение№2. Продолжение
MsgBox "Решение найдено!", vbExclamation, "Info"
Finish = True
End If
Else
MsgBox "Таблица не заполнена или заполнена не до конца!", vbExclamation, "Info"
End If
End Sub
Private Sub Find_Col() 'поиск главного столбца
Max = DATA(5, 1, it)
max_i = 1
For i = 2 To 10
If Option1.Value = True Then
If DATA(5, i, it) > 0 Then
If DATA(5, i, it) > Max Then
Max = DATA(5, i, it)
max_i = i
End If
End If
Else
If DATA(5, i, it) < 0 Then
If DATA(5, i, it) < Max Then
Max = DATA(5, i, it)
max_i = i
End If
End If
End If
Next i
If max_i = 1 Then
If Option1.Value = True Then
If DATA(4, 1, it) > 0 Then
Text1(max_i).BackColor = &HC0E0FF
Text2(max_i).BackColor = &HC0E0FF
Text3(max_i).BackColor = &HC0E0FF
r = max_i
Else
r = 0
End If
Else
If DATA(4, 1, it) < 0 Then
Text1(max_i).BackColor = &HC0E0FF
Text2(max_i).BackColor = &HC0E0FF
Text3(max_i).BackColor = &HC0E0FF
r = max_i
Else
r = 0
End If
End If
Else
Text1(max_i).BackColor = &HC0E0FF
Приложение№2. Продолжение
Text2(max_i).BackColor = &HC0E0FF
Text3(max_i).BackColor = &HC0E0FF
r = max_i
End If
End Sub
Private Sub Calc_Q() 'расчёт столбца Q
For i = 1 To 3
If DATA(i, r, it) <> 0 Then
Q(i, it) = DATA(i, 0, it) / DATA(i, r, it)
Else
Q(i, it) = Empty
End If
Text_Q(i).Text = Q(i, it)
Next i
End Sub
Private Sub Celevaya() 'формула расчета целевой строки
For i = 0 To 10
DATA(4, i, it) = Cb(1, it) * DATA(1, i, it) + Cb(2, it) * DATA(2, i, it) + Cb(3, it) * DATA(3, i, it)
DATA(5, i, it) = DATA(4, i, it) - Text_UP(i)
Next i
End Sub
Private Sub Find_Row() 'поиск главной строки
Dim Plus(1 To 3) As Double
n = 0
For i = 1 To 3
If Q(i, it) > 0 Then
Plus(i) = Q(i, it)
n = n + 1
Min = Plus(i)
Min_i = i
Else
Plus(i) = 0
End If
Next i
If n <> 0 Then
For i = 1 To 3
If Plus(i) <> 0 Then
If Plus(i) < Min Then
Min = Q(i, it)
Min_i = i
End If
End If
Next i
s = Min_i
Приложение№2. Продолжение
Select Case Min_i
Case 1
For i = 1 To 10
If r = i Then
Text1(i).BackColor = &H8080FF
Else
Text1(i).BackColor = &HC0E0FF
End If
Next i
Case 2
For i = 1 To 10
If r = i Then
Text2(i).BackColor = &H8080FF
Else
Text2(i).BackColor = &HC0E0FF
End If
Next i
Case 3
For i = 1 To 10
If r = i Then
Text3(i).BackColor = &H8080FF
Else
Text3(i).BackColor = &HC0E0FF
End If
Next i
End Select
Else
MsgBox "Решений нет, т.к Q отрицательны", vbExclamation, "Info"
Finish = True
End If
End Sub
Private Sub ClearTexts() ‘очистка чисел в текстовых полях
For i = 0 To 7
Text1(i).Text = ""
Text2(i).Text = ""
Text3(i).Text = ""
Text4(i).Text = ""
Text_UP(i).Text = ""
Next i
Text_UP(0).Text = 0
For i = 1 To 3
Text_Baz(i) = 0
Next i
Text_X(1) = "A8"
Text_X(2) = "A9"
Text_X(3) = "A10"
Приложение№2. Продолжение
it = 0
ReDim DATA(1 To 5, 11, 0)
ReDim Q(1 To 3, 0)
ReDim Cb(1 To 3, 0)
ReDim X(1 To 3, 0)
Text1(8).Text = "1"
Text1(9).Text = "0"
Text1(10).Text = "0"
Text2(8).Text = "0"
Text2(9).Text = "1"
Text2(10).Text = "0"
Text3(8).Text = "0"
Text3(9).Text = "0"
Text3(10).Text = "1"
For i = 1 To 3
Cb(i, it) = 0
Q(i, it) = 0
Next i
For i = 0 To 10
Text4(i).Text = ""
Text5(i).Text = ""
Next i
X(1, it) = "A8"
X(2, it) = "A9"
X(3, it) = "A10"
Text_X(1).Text = "A8"
Text_X(2).Text = "A9"
Text_X(3).Text = "A10"
Text_Baz(1).Text = "0"
Text_Baz(2).Text = "0"
Text_Baz(3).Text = "0"
Text_Q(1).Text = "0"
Text_Q(2).Text = "0"
Text_Q(3).Text = "0"
r = 0
s = 0
Label1.Caption = "Таблица: " & it
Text0(0).Text = "X" & it
tables = 0
Call Clear
End Sub
Приложение№2. Продолжение
Private Sub Command4_Click() ‘очистка
Command1.Enabled = True
Command3.Enabled = True
Call ClearTexts
Call vvod
End Sub
Private Sub Command6_Click() ‘значения по умолчанию
Command1.Enabled = True
Command3.Enabled = True
Call Nach_dan
Call zapret_vvoda
End Sub
Private Sub Command7_Click() ‘выход
a = MsgBox("Вы действительно хотите выйти?", vbYesNo, "Exit")
If a = vbYes Then
Unload Me
End If
End Sub
Private Sub Form_Activate()
Option2.SetFocus
Text_UP(0).Visible = False
Call zapret_vvoda
End Sub
Private Sub Form_Load()
Call Nach_dan
End Sub
Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer) ‘переход по полям Tab
If KeyAscii = vbKeyReturn Then
SendKeys "{tab}"
KeyAscii = 0
End If
End Sub
Private Sub Text2_KeyPress(Index As Integer, KeyAscii As Integer) ‘переход по полям Tab
If KeyAscii = vbKeyReturn Then
SendKeys "{tab}"
KeyAscii = 0
End If
End Sub
Private Sub Text3_KeyPress(Index As Integer, KeyAscii As Integer) ‘переход по полям Tab
Приложение№2. Продолжение
If KeyAscii = vbKeyReturn Then
SendKeys "{tab}"
KeyAscii = 0
End If
End Sub
Private Sub Text_UP_KeyPress(Index As Integer, KeyAscii As Integer) ‘переход по полям Tab
If KeyAscii = vbKeyReturn Then
SendKeys "{tab}"
KeyAscii = 0
End If
End Sub
Private Function Proverka() As Boolean 'функция проверки пустых полей
Dim result As Boolean
result = True
For i = 0 To 10
If Text1(i).Text = "" Then result = False
If Text2(i).Text = "" Then result = False
If Text3(i).Text = "" Then result = False
If Text_UP(i).Text = "" Then result = False
Next i
Proverka = (result)
End Function
Private Sub Nach_dan() 'процедура возврата начальных данных и параметров
' redim Перераспределяет область
памяти для хранения
it = 0
ReDim DATA(1 To 5, 11, 0)
ReDim Q(1 To 3, 0)
ReDim Cb(1 To 3, 0)
ReDim X(1 To 3, 0)
'i-line j-row s-строка r-столбец
Text_UP(0).Text = "0"
Text_UP(1).Text = "1"
Text_UP(2).Text = "-5"
Text_UP(3).Text = "-6"
Text_UP(4).Text = "-4"
<p class="Body_0020Text_