Лабораторная работа №1 / Отчёт
.docxБАЛТИЙСКАЯ АКАДЕМИЯ РЫБОПРОМЫСЛОВОГО ФЛОТА
Кафедра АСОиУ
Лабораторная работа №1
Целочисленное линейное программирование.
Вариант 18
Выполнил: Шнайдер А. Группа: АС-32(2) Проверил: Ампилогов В.А.
Калиниград 2007
Лабораторная работа №1
Тема: Целочисленное линейное программирование.
Цель работы: знакомство с задачами целочисленного линейного программирования, изучение различных методов решения в системе компьютерной математики.
Задание:
18(4). Сокровища короля Тута находятся в музее в Новом Орлеане. План музея, состоящего га нескольких комнат, соединенных открытыми дверями, показан на рис. 9.3. Сторож, находящийся у двери, может наблюдать за двумя смежными комнатами. Администрация музея заинтересована, чтобы в каждой комнате присутствовал сторож, используя при этом минимальное их число. Сформулируйте задачу в виде задачи ЦЛП и найдите ее оптимальное решение.
Порядок выполнеия:
-
Пронумеруем все проходыи комнаты:
-
По рисунку определим комнаты, которые можно охранять, находясь в данном проходе:
Проход |
1 комната |
2 комната |
1 |
1 |
2 |
2 |
2 |
3 |
3 |
3 |
4 |
4 |
4 |
5 |
5 |
5 |
6 |
6 |
6 |
7 |
7 |
7 |
8 |
8 |
8 |
4 |
Private Sub Form_Load()
For j = 1 To 8
a(j, 1) = j
a(j, 2) = j + 1
Next j
a(8, 2) = 4
End Sub
-
При поммощи булевой алгебры найдём все возможные варианты расположения охранников:
For i = 0 To 255
Dim Nakop As String
r = i
Nakop = ""
While r > 1
Nakop = Str(r Mod 2) + Nakop
Nakop = Trim(Nakop)
r = r \ 2
Wend
Nakop = Str(r) + Nakop
Nakop = Trim(Nakop)
While Len(Nakop) < 8
Nakop = "0" + Nakop
Nakop = Trim(Nakop)
Wend
Nakop = Trim(Nakop)
var = Nakop
For j = 1 To 8
If Mid(var, j, 1) = "1" Then
Komn(j) = True
Komn(a(j, 2)) = True
End If
Next j
Okon = True
For j = 1 To 8
If Komn(j) = False Then Okon = False
Next j
If Okon = True Then
Kol = Kol + 1
ReDim Preserve Vozm(Kol)
Vozm(Kol) = var
End If
Okon = False
For j = 1 To 8
Komn(j) = False
Next j
Next i
-
На основании этих вариантов выберем наиболее оптимальный:
Sub Konechnie_Zamuty()
Dim Min(2) As Byte
Dim Tem As Byte
Min(1) = 1
Min(2) = 8
For i = 1 To Kol
For j = 1 To 8
If Mid(Vozm(i), j, 1) = "1" Then Tem = Tem + 1
Next j
If Tem < Min(1) Then
Min(1) = i
Min(2) = Tem
End If
Tem = 0
Next i
For i = 1 To 8
If Mid(Vozm(Min(1)), i, 1) = "1" Then Shape1(i - 1).Visible = True
Next i
End Sub
В результате получаем:
Вывод: Я изучил методы линейного программирования для решения прикладных задач на компьютере.