Задачи линейного программирования
Методическое пособие - Компьютеры, программирование
Другие методички по предмету Компьютеры, программирование
µременных задаются следующими значениями:
t1=9, t2=12, t=12, t=8, t=16. Р1=22, Р2=36, Р3=28.
Хi количество выпускаемой продукции.
Составим математическую модель задачи.
Построим математическую модель этой задачи. Пусть Х1 число изделий вида I, Х2- число изделий вида II, а Х3 - число изделий вида III. Так как машины каждого вида (1,2,3,4,5) могут обрабатывать продукцию не более 9, 12, 12, 8, 16 часов соответственно, то приходим к следующей системе ограничений:
0,5х1 + 0,5х2 +2х3 9
2х1 + х2 + х3 12
2 х1 + 0 + х3 12
х1 + 2 х2 +0,5х3 8
0 + 0,5х2+ х3 16
х1 0
х2 0
х3 0
F max = 22х1 + 36х2 + 28х3
Решаем задачу симплекс методом. Вводим дополнительные неопределенные данные (Х4,Х5,Х6,Х7,Х8), тогда система ограничений имеет следующий вид.
0,5 х1 + 0,5 х2 + 2 х3 + х4 9
2х1 + х2 + х3 + х5 12
2х1 + х3 + х6 12
х1 + 2х2 + 0,5х3 + х7 8
0,5х2 + х3 + х8 16
Заметим, что :
- ограничения системы имеют вид и неравенств, и уравнений;
- требуется максимизировать значение целевой функции.
Правило прямоугольника:
Расчет значений табличных данных ведется по правилу прямоугольника.
Элементы разрешающей строки (строка в которой находится разрешающий элемент) получается из соответствующих элементов прежней строки на разрешающий элемент.
Все элементы разрешающего столбца преобразованной таблицы кроме разрешающего элемента равны нулю.
Все остальные элементы пересчитываются по правилу прямоугольника.
Где:
aij элемент находящийся в i строке, j столбце
akk разрешающий элемент
aki - элемент находящийся в i строке, j столбце
aik - элемент находящийся в i строке, j столбце
После преобразований я получил следующую таблицу:
Решение задания по курсовому проекту вручную
X1X2X3X4X5X6X7X8Св.членX40,50,52100009X52110100012X62010010012X7120,5000108X800,510000116Fmin223628000000X40,2501,875100007X51,500,75010008X62010010012X20,510,250000,504X80,2500,8750000114Fmin401900000-144X30,133010,53300003,733X51,400- 1,40610005,2X61,86600- 0,53301008,266X20,46610- 0,133000,503,067X80,38300- 0,466000110,733Fmin1.46600- 10640000- 214.933
Отсюда мы получаем: X1=0, X2=3.067, X3=3.733, X4=0, X5=5.2, X6 =8.266, X8 =10.733 P= - 214.933
Система уравнения примет вид:
Целевая функция равна:
Fmax = - Fmin
Fmax = 22*х1 + 36*х2 + 28*х3
22*0 + 36* 3,066 + 28*3,733 = 214,933
Мы достигли оптимального решения.
Алгоритм программы
- Вводим данные в таблицу
- Находим разрешающий элемент:
- Берем каждый элемент первой строки и делим на свободный член первой строки.
- Находим среди всех деленных элементов минимальный.
- Берем каждый элемент второй строки и делим на свободный член второй строки.
- Находим среди всех деленных элементов минимальный.
- Берем каждый элемент третей строки и делим на свободный член третей строки.
- Находим среди всех деленных элементов минимальный.
- Берем минимальные элементы первой, второй и третей строки и среди них находим минимальный (это и будет разрешающий элемент).
- Вычисляем всю таблицу методом прямоугольника относительно разрешающего элемента:
- Умножаем разрешающий элемент на элемент решаемой строки.
- Отнимаем произведение соответствующего элемента решаемой строки на элемент разрешающего столбца решаемой строки
- И делим ответ на разрешающий элемент.
- Делим разрешающую строку на разрешающий элемент.
- Берем каждый элемент разрешающей строки и делим на разрешающий элемент.
- Всем элементам, кроме разрешающего элемента, разрешающего столбца присвоить ( 0 )
- Разрешающему элементу присвоить ( 1 ).
- В индексе разрешающей строки присвоить индекс разрешающего столбца.
- Если на F строке существуют отрицательные элементы то вернутся к пункту 2, если отрицательных нет то перейти к пункту 9.
- Проверяем F на оптимальность.
- Подставляем в целевую функцию значения из свободного члена с соответствующим индексом.
- Складываем все элементы.
- Сравниваем ответ целевой функции с элементом свободного члена F строки.
10. Получаем оптимальный план.
Текст программы для ЭВМ с операционной системой Win95/Win98
описание рабочих переменных и констант
Const r = 5 строки
Const n = 7 столбцы
Private p, f, xn(r), fm
Private x(r, n)
Private Sub btnExit_Click()
процедура выхода из пограммы
End
btnExit.Caption = "Готово"
End Sub
присвоение значений переменным
i = 0
u = 1
распределение данных по строкам и столбцам
1: While u <= n
If f(u) < 0 And i = 0 Then
i = u
End If
If f(u) = 0 Then
tr = 0
For j = 1 To r
If u = p(j) Then
tr = 1
End If
Next j
If tr = 0 Then
MsgBox "Система имеет множество решений", vbOKOnly, " -Simplex- "
Exit Sub
End If
End If
u = u + 1
Wend
обработка исходных данных
4: If i = 0 Then
lblTitle = "Оптимальная работа"
вывод данных в текстовое поле проверки
txtControl.Text = "Проверка" & Chr(13) & Chr(10)
For i = 1 To n
jt = 0
For j = 1 To r
If p(j) = i Then jt = x(j, 0)
Next j
Next i
For k = 1 To r
For i = 1 To n
jt = 0
For j = 1 To r
If p(j) = i Then jt = x(j, 0)
Next j
s = s + xn(k)(i) * jt
txtControl.Text = txtControl.Text & Str(xn(k)(i)) & "*" & Str(jt)
If i < n Then txtControl.Text = txtControl.Text & "+"
Next i
txtControl.Text = txtControl.Text & " = " & Str(xn(k)(0)) & Chr(13) & Chr(10)
Next k
btnNext.Caption = "Готово"
btnNext.Enabled = False
lblRes.Visible = True
Exit Sub
End If
jr = i
For j = i + 1 To n
If f(j) < 0 And f(jr) < f(j) Then jr = j
Next j
i = 1
While i <= r
If x(i, jr) > 0 Then GoTo 5
i = i + 1
Wend
MsgBox Str(jr) & " " & Chr(13) & Chr(10) & "Решения нет"
Exit Sub
нахождение разрешающего элемента
5: ir = i<