Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Інститут комп’ютерних наук та інформаційних технологій
Кафедра САП
Звіт
про виконання лабораторної роботи № 1
на тему:
«Багатокритеріальний вибір. Визначення оптимальних альтернатив
за Парето та Слейтером»
з дисципліни «Математичні методи дослідження операцій»
Варіант 11
Львів-2024
Мета роботи: ознайомитись з поняттями оптимальності за Парето та за Слейтером при багатокритеріальному виборі [1-3;6;7].
Хід роботи
Завдання 1. Для кожного рядка (1-3) за варіантом («Додаток А») побудувати таблицю значень альтернатив (A1-A20) в області критеріїв (Q1, Q2), де значення за першим критерієм відповідають першій цифрі числа, за другим критерієм – другій цифрі числа. Аналітично та графічно визначити множину оптимальних рішень за Парето та за Слейтером (6 рисунків).
/
рис.1 Додаток А
1. Побудуємо значення альтернатив в області критеріїв для кожного рядка (Q1, Q2).
Критерії
Альтернативи
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
A16
A17
A18
A19
A20
Q1
7
9
1
3
6
6
2
9
7
4
3
6
8
9
9
9
5
1
2
5
Q2
0
9
7
9
9
3
2
4
3
7
1
2
2
0
2
1
7
5
1
7
табл.1.1 значення альтернатив в області критеріїв для першого рядка
Критерії
Альтернативи
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
A16
A17
A18
A19
A20
Q1
7
9
4
5
3
2
3
4
5
3
9
2
8
1
1
0
3
3
9
0
Q2
4
1
7
1
1
1
7
0
4
0
8
5
1
6
6
2
1
9
6
4
табл.1.2 значення альтернатив в області критеріїв для другого рядка
Критерії
Альтернативи
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
A16
A17
A18
A19
A20
Q1
3
8
1
2
7
6
1
7
7
8
3
0
7
8
0
5
5
4
9
1
Q2
8
0
8
1
0
2
2
9
7
5
6
4
6
3
7
9
7
4
9
1
табл.1.3 значення альтернатив в області критеріїв для третього рядка
2. Визначимо аналітично та графічно множину оптимальних рішень за Парето та за Слейтером.
Критерії
Альтернативи
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
A16
A17
A18
A19
A20
Q1
7
9
1
3
6
6
2
9
7
4
3
6
8
9
9
9
5
1
2
5
Q2
0
9
7
9
9
3
2
4
3
7
1
2
2
0
2
1
7
5
1
7
Парето
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
Слейтер
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
табл.1.4 аналітично визначена множина для першого рядка
Множина оптимальних значень за Парето: А2.
Множина оптимальних значень за Слейтером: А2, А4, A5, A8, A14, A15, A16.
/ /
рис.1.1 Границя Парето рис.1.2 Границя Слейтера
Критерії
Альтернативи
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
A16
A17
A18
A19
A20
Q1
7
9
4
5
3
2
3
4
5
3
9
2
8
1
1
0
3
3
9
0
Q2
4
1
7
1
1
1
7
0
4
0
8
5
1
6
6
2
1
9
6
4
Парето
A11
A11
A11
A1
A1
A1
A3
A1
A1
A1
A3
A2
A3
A3
A16
A1
A11
A1
Слейтер
A11
A11
A1
A1
A1
A11
A1
A11
A1
A3
A11
A3
A3
A1
A1
A3
табл.1.5 аналітично визначена множина для другого рядка
Множина оптимальних значень за Парето: А11, A18.
Множина оптимальних значень за Слейтером: А2, A11, A18, A19.
/ /
рис.1.3 Границя Парето рис.1.4 Границя Слейтера
Критерії
Альтернативи
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
A16
A17
A18
A19
A20
Q1
3
8
1
2
7
6
1
7
7
8
3
0
7
8
0
5
5
4
9
1
Q2
8
0
8
1
0
2
2
9
7
5
6
4
6
3
7
9
7
4
9
1
Парето
A8
A10
A1
A1
A2
A8
A1
A19
A19
A19
A1
A1
A8
A19
A1
A8
A8
A8
A1
Слейтер
A8
A19
A8
A1
A10
A8
A1
A10
A19
A8
A1
A19
A19
A1
A8
A8
A1
табл.1.6 аналітично визначена множина для третього рядка
Множина оптимальних значень за Парето: А19.
Множина оптимальних значень за Слейтером: А8, А16, A19.
/ /
рис.1.5 Границя Парето рис.1.6 Границя Слейтера
Завдання 2. Для рядка, що складається з рядків 1-3 («Додаток А») за варіантом, побудувати таблицю значень альтернатив (A1-A60) в області критеріїв (Q1, Q2), де значення за першим критерієм відповідають першій цифрі числа, за другим критерієм – другій цифрі числа. Аналітично та графічно визначити множину оптимальних рішень за Парето та за Слейтером (2 рисунки).
1. Побудуємо значення альтернатив в області критеріїв для кожного рядка (Q1, Q2).
Критерії
Альтернативи
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
A16
A17
A18
A19
A20
Q1
7
9
1
3
6
6
2
9
7
4
3
6
8
9
9
9
5
1
2
5
Q2
0
9
7
9
9
3
2
4
3
7
1
2
2
0
2
1
7
5
1
7
A21
A22
A23
A24
A25
A26
A27
A28
A29
A30
A31
A32
A33
A34
A35
A36
A37
A38
A39
A40
Q1
7
9
4
5
3
2
3
4
5
3
9
2
8
1
1
0
3
3
9
0
Q2
4
1
7
1
1
1
7
0
4
0
8
5
1
6
6
2
1
9
6
4
A41
A42
A43
A44
A45
A46
A47
A48
A49
A50
A51
A52
A53
A54
A55
A56
A57
A58
A59
A60
Q1
3
8
1
2
7
6
1
7
7
8
3
0
7
8
0
5
5
4
9
1
Q2
8
0
8
1
0
2
2
9
7
5
6
4
6
3
7
9
7
4
9
1
табл.2.1 значення альтернатив в області критеріїв для першого рядка
2. Визначимо аналітично та графічно множину оптимальних рішень за Парето та за Слейтером.
Критерії
Альтернативи
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
A16
A17
A18
A19
A20
Q1
7
9
1
3
6
6
2
9
7
4
3
6
8
9
9
9
5
1
2
5
Q2
0
9
7
9
9
3
2
4
3
7
1
2
2
0
2
1
7
5
1
7
Парето
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
Слейтер
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A21
A22
A23
A24
A25
A26
A27
A28
A29
A30
A31
A32
A33
A34
A35
A36
A37
A38
A39
A40
Q1
7
9
4
5
3
2
3
4
5
3
9
2
8
1
1
0
3
3
9
0
Q2
4
1
7
1
1
1
7
0
4
0
8
5
1
6
6
2
1
9
6
4
Парето
A2
A2
A2
A2
A2
A2
A2
A2
A2
A1
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
Слейтер
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A41
A42
A43
A44
A45
A46
A47
A48
A49
A50
A51
A52
A53
A54
A55
A56
A57
A58
A59
A60
Q1
3
8
1
2
7
6
1
7
7
8
3
0
7
8
0
5
5
4
9
1
Q2
8
0
8
1
0
2
2
9
7
5
6
4
6
3
7
9
7
4
9
1
Парето
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
Слейтер
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
A2
табл.2.2 значення альтернатив в області критеріїв
Множина оптимальних значень за Парето: А2=А59.
Множина оптимальних значень за Слейтером: А2, A4, A5, A8, A14, A15, A16, A22, A31, A38, A39, A48, A56, A59.
/ /
рис.2.1 Границя Парето рис.2.2 Границя Слейтера
Завдання 3. Написати програми для обчислення множини оптимальних рішень за Парето та за Слейтером.
1. Код програми на мові Python для обчислення множини оптимальних рішень за Парето.
def pareto_optimal_solutions(numbers):
pareto_points = []
decision_index = []
for i in range(len(numbers)):
current_number = numbers[i]
q1 = current_number // 10 # отримуємо першу цифру
q2 = current_number % 10 # отримуємо другу цифру
is_pareto = True
for j in range(len(numbers)):
if i != j:
compare_number = numbers[j]
compare_q1 = compare_number // 10
compare_q2 = compare_number % 10
# Перевіряємо, чи є поточне число гірше за порівнянне по обох критеріях
if q1 <= compare_q1 and q2 <= compare_q2:
is_pareto = False
break
if is_pareto:
pareto_points.append(current_number)
decision_index.append(i + 1)
return [f"A{num}: {pareto_points[index]}" for num, index in zip(decision_index, range(len(decision_index)))]
decision_matrix_first = [
70, 99, 17, 39, 69, 63, 22, 94, 73, 47, 31, 62, 82, 90, 91, 92, 57, 15, 21, 57
]
decision_matrix_second = [
74, 91, 47, 51, 31, 21, 37, 40, 54, 30, 98, 25, 81, 16, 16, 2, 31, 39, 96, 4
]
decision_matrix_third = [
38, 80, 18, 21, 70, 62, 12, 79, 77, 85, 36, 4, 76, 83, 7, 59, 57, 44, 99, 11
]
pare_numbers1 = pareto_optimal_solutions(decision_matrix_first)
print("Множина оптимальних значень за Парето:", pare_numbers1)
pare_numbers2 = pareto_optimal_solutions(decision_matrix_second)
print("Множина оптимальних значень за Парето:", pare_numbers2)
pare_numbers3 = pareto_optimal_solutions(decision_matrix_third)
print("Множина оптимальних значень за Парето:", pare_numbers3)
/
рис.3.1 результат коду
2. Код програми на мові Python для обчислення множини оптимальних рішень за Слейтером.
def slater_optimal_solutions(numbers):
slater_points = []
decision_index = []
for i in range(len(numbers)):
current_number = numbers[i]
q1 = current_number // 10 # отримуємо першу цифру
q2 = current_number % 10 # отримуємо другу цифру
is_slater = True
for j in range(len(numbers)):
if i != j:
compare_number = numbers[j]
compare_q1 = compare_number // 10
compare_q2 = compare_number % 10
# Перевіряємо, чи є поточне число гірше за порівнянне по обох критеріях
if q1 < compare_q1 and q2 < compare_q2:
is_slater = False
break
if is_slater:
slater_points.append(current_number)
decision_index.append(i + 1)
return [f"A{num}: {slater_points[index]}" for num, index in zip(decision_index, range(len(decision_index)))]
decision_matrix_first = [
70, 99, 17, 39, 69, 63, 22, 94, 73, 47, 31, 62, 82, 90, 91, 92, 57, 15, 21, 57
]
decision_matrix_second = [
74, 91, 47, 51, 31, 21, 37, 40, 54, 30, 98, 25, 81, 16, 16, 2, 31, 39, 96, 4
]
decision_matrix_third = [
38, 80, 18, 21, 70, 62, 12, 79, 77, 85, 36, 4, 76, 83, 7, 59, 57, 44, 99, 11
]
slater_numbers1 = slater_optimal_solutions(decision_matrix_first)
print("Множина оптимальних значень за Слейтером:", slater_numbers1)
slater_numbers2 = slater_optimal_solutions(decision_matrix_second)
print("Множина оптимальних значень за Слейтером:", slater_numbers2)
slater_numbers3 = slater_optimal_solutions(decision_matrix_third)
print("Множина оптимальних значень за Слейтером:", slater_numbers3)
/
рис.3.2 результат коду
Висновок: під час виконання даної лабораторної роботи ознайомлено з поняттями оптимальності за Парето та за Слейтером при багатокритеріальному виборі [1-3;6;7]; обчислено аналітично і побудовано графічно множини оптимальних рішень за Парето та Слейтером; реалізовано методи Парето та Слейтера програмами на мові програмування Python.