You are on page 1of 11

Міністерство освіти і науки України

Національний університет “Львівська політехніка”


Кафедра “Системи автоматизованого проектування”

Системи автоматизації конструкторського проектування


Звіт
До лабораторної роботи №2

Варіант №3

Виконала:

студентка гр. КНІТ-11

Варіченко Л.В.

Прийняв:

Корпильов Д.В.

Львів – 2023
2

Мета роботи
Вивчати послідовний метод компоновки конструктивних елементів по
комутаційним платам, отримання практичних навиків в рішенні задач
автоматизованого конструкторського проектування.

Завдання до лабораторної роботи

Рис.1. Індивідуальне завдання

1. Зобразити граф і матрицю зв’язності отримані в ході виконання


лабораторної роботи №1.
2. Виконати розбиття графа на шматки послідовним методом.

Результат виконання лабораторної роботи

В ході виконання лабораторної роботи №1 на основі отриманої


електричної схеми (рис.1) було побудовано граф (рис.2) та сформовано
матрицю зв’язності (табл.1).
3

Рис.2. Граф електричної схеми

X1 X2 X3 X4 X5 X6 X7 X8
X1 0 1 0 1 1 1 1 0
X2 1 0 2 0 0 1 0 1
X3 0 2 0 0 0 1 1 2
C= X4 1 0 0 0 0 1 0 1
X5 1 0 0 0 0 0 1 1
X6 1 1 1 1 0 0 0 1
X7 1 0 1 0 1 0 0 1
X8 0 1 2 1 1 1 1 0

Табл.1. Матриця зв’язності


4

Нехай заданий граф G=(X,U) рис.2, який необхідно розрізати на l шматків


G1, G2, …, Gl з числом вершин в кожному відповідно n1, n2, …,nl (n1+n2+…
+nl=n) Для нашого прикладу розіб’ємо на три частини: G1, G2, G3, що містить
відповідно 3, 3 і 2 вершини, з максимізацією числа ребер в шматках,
використовуючи алгоритм послідовного типу. Підрахувавши суму елементів в
кожній xi стрічці матриці С, визначимо локальну ступінь кожної вершини
графа.

(X1) = 5
(X2) = 5
(X3) = 6
(X4) = 3
(X5) = 3
(X6) = 5
(X7) = 4
(X8) = 7

Граф G заданий матрицею зв’язності С. Позначимо множину включених в


G2 вершин через X2 . Необхідно розбити граф на 3 підграфи n1=3, n2=3, n3=2

Вибираємо вершину X4, що має найменшу локальну ступінь, і будуємо


множину X4 = {X4, X1, X6, X8}. У зв’язку з тим що потужність |X4| > n1, то
необхідно видалити зайву вершину. Для цього виконаємо умовне видалення
кожної вершини з X4, і підрахуємо число ребер, що зв’язує цю вершину з
вершинами X4 що залишились.

При видаленні вершини X1 число ребер, що з’єднує її з X4 \ X1,


дорівнює zX1 = 1, для X6: zX6 = 1, для X8: zX8 = 1. Відповідно, з множини X8
видаляється вершина X8. Отримуємо перший шматок підграфа G1 = (X1, U1),
X1 = {X1, X4, X6}.
5

З графа G видаляємо G1 отримуємо граф G* представлений на рис.3. і


матрицю зв’язності С* представлену табл.2.

Рис.3. Граф G*

X2 X3 X5 X7 X8
X2 0 2 0 0 1
X3 2 0 0 1 2
C* =
X5 0 0 0 1 1
X7 0 1 1 0 1
X8 1 2 1 1 0

Табл.2. Матриця зв’язності С*

Визначаємо локальні степені вершин G*.

(X2) = 3
(X3) = 5
(X5) = 2
(X7) = 3
(X8) = 5
6

Вибираємо вершину X5 і утворюємо X5 = {X5, X7, X8}. У зв’язку з тим


що потужність |X5| = n2 , то необхідно обрати іншу вершину

Вибираємо вершину X7 і утворюємо X7 = {X7, X3, X5, X8}. Отримуємо,


що |X7| > n2, тому виконуємо умовне видалення вершин на X7 і визначаємо
zX3 = 1, zX5 = 1, zX8 = 1. Видаляємо вершину X3. Відповідно, підграф G2 =
(X2, U2), X2 = {X5, X7, X8}, а G3 відповідно буде містити вершини X2, X3.

Розбиття графа G показано на рис.4. Число ребер з’єднань графа n=11, а


коефіцієнт розбиття (G) = 8/11=0.72.

Рис.4. Розбитий граф

Виконано програмну реалізацію представлення розбиття графа мовою


програмування Python (додаток 1). Результат виконання програми представлено
на рис.5 та рис.6.
7

Рис.5. Матриця зв’язності графа

Рис.6. Представлення розбиття графа


8

Висновок
В ході виконання лабораторної роботи вивчено послідовний метод
компоновки конструктивних елементів по комутаційним платам, отримано
практичні навики в рішенні задач автоматизованого конструкторського
проектування. На основі побудованого за заданою електричною схемою
графа та його матриці зв’язності здійснено розбиття графа на шматки
послідовним методом. Виконано програмну реалізацію представлення
розбиття графа мовою Python.
9

Додаток 1. Код програми

from PyQt5 import QtWidgets, QtGui


from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow,
QMessageBox, QShortcut, QTableWidgetItem
from MainWDesign import Ui_MainWindow
import sys
from PyQt5.QtCore import QSize, Qt

data = []
data.append(('0', '1', '0', '1', '1', '1', '1', '0'))
data.append(('1', '0', '2', '0', '0', '1', '0', '1'))
data.append(('0', '2', '0', '0', '0', '1', '1', '2'))
data.append(('1', '0', '0', '0', '0', '1', '0', '1'))
data.append(('1', '0', '0', '0', '0', '0', '1', '1'))
data.append(('1', '1', '1', '1', '0', '0', '0', '1'))
data.append(('1', '0', '1', '0', '1', '0', '0', '1'))
data.append(('0', '1', '2', '1', '1', '1', '1', '0'))

class MainWindow_LR2(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow_LR2, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)

self.setMinimumSize(1200, 980)
# self.resize(1400,1200) # Основне вікно
# self.ui.centralwidget.resize(1350,1250) # Основний віджет
self.ui.centralwidget.setMinimumSize(1200, 980)
# self.ui.tabWidget.resize(1350,1250)
self.ui.tabWidget.setMinimumSize(1200, 980)
# self.ui.tabWidgetPage1.resize(1500,1400)
# self.ui.tabWidgetPage1.setMinimumSize(1200, 900)
# self.ui.tabWidgetPage2.resize(1500,1400)

# self.ui.groupBox_5.resize(1400,1500) # Перша закладка


# self.ui.groupBox_5.setMinimumSize(1000,800)
# self.ui.tableWidgetMatrix_2.resize(1400,1300)
# self.ui.tableWidgetMatrix_2.setMinimumSize(900,700)

self.ui.groupBox.resize(1400,1500) # Перша закладка


self.ui.tableWidget_3.resize(1400,1300)
10

# self.ui.tableWidgetMatrix_2.resize(800,600)
# self.ui.tableWidget.resize(1000, 1000)

self.ui.Close_MainWin.setShortcut('Ctrl+Q')
self.ui.Close_MainWin.triggered.connect(self.exit)
self.ui.AboutProgram.triggered.connect(self.about_author)

# Set the tooltips to headings


self.ui.tableWidgetMatrix_2.horizontalHeaderItem(0).setToolTip("Column 1 ")
self.ui.tableWidgetMatrix_2.horizontalHeaderItem(1).setToolTip("Column 2 ")
self.ui.tableWidgetMatrix_2.horizontalHeaderItem(2).setToolTip("Column 3 ")

# Set the alignment to the headers

self.ui.tableWidgetMatrix_2.horizontalHeaderItem(0).setTextAlignment(Qt.AlignHC
enter)

self.ui.tableWidgetMatrix_2.horizontalHeaderItem(1).setTextAlignment(Qt.AlignHC
enter)

self.ui.tableWidgetMatrix_2.horizontalHeaderItem(2).setTextAlignment(Qt.AlignHC
enter)

row = 0
for tup in data:
col = 0
for item in tup:
cellinfo = QTableWidgetItem(item)
self.ui.tableWidgetMatrix_2.setItem(row, col, cellinfo)
col += 1

row += 1

def closeEvent(self, event):


quit_msg = "Ви впевнені, що бажаєте вийти з програми?"
reply = QMessageBox.question(self, 'Повідомлення',
quit_msg, QMessageBox.Yes, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()

def clear(self):
self.ui.tableWidget.clear()
11

def exit(self):
self.close()

def about_author(self):
title = 'Про автора'
data = 'Виконала студентка групи КНІТ-11 Варіченко Лідія'
QMessageBox.about(self, title, data)

if __name__ == '__main__':
app = QtWidgets.QApplication([])
application = MainWindow_LR2()
application.show()
sys.exit(app.exec())

You might also like