From f2193d197a32872a41e6f65b66600354c09e9403 Mon Sep 17 00:00:00 2001 From: movavi Date: Mon, 18 Dec 2023 15:41:50 +0300 Subject: [PATCH] lab1 complete --- README.md | 14 ++++++++- image/task.jpg | Bin 0 -> 28855 bytes src/main.py | 76 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 image/task.jpg create mode 100644 src/main.py diff --git a/README.md b/README.md index 1aaa2a5..e63fd04 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,14 @@ -# PIbd-31_Musoev.D.T._Computed_Math +# Лабораторная работа №1 по ВМ +___ + +## Состав команды (ПИбд-32): + +- ### Мусоев Денис +- ### Батылкина Алина +- ### Ихонкина Екатерина +- ### Бытылкин Артем + +## Задание: + +![Картинка задания](image/task.jpg) \ No newline at end of file diff --git a/image/task.jpg b/image/task.jpg new file mode 100644 index 0000000000000000000000000000000000000000..147ccb4c1567016e9420946d578052bd01917286 GIT binary patch literal 28855 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 literal 0 HcmV?d00001 diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..b13b1fe --- /dev/null +++ b/src/main.py @@ -0,0 +1,76 @@ +import numpy as np +import math +import matplotlib.pyplot as plt + +class Simplex: + def __init__(self, source): + self.m, self.n = source.shape + self.table = np.zeros((self.m, self.n + self.m - 1)) + self.basis = [] + + for i in range(self.m): + self.table[i, :self.n] = source[i, :] + + if (self.n + i) < self.table.shape[1]: + self.table[i, self.n + i] = 1 + self.basis.append(self.n + i) + + self.n = self.table.shape[1] + + def calculate(self, result): + while not self.is_optimal_solution(): + main_col = self.select_pivot_column() + main_row = self.select_pivot_row(main_col) + self.basis[main_row] = main_col + self.perform_pivot(main_row, main_col) + + self.extract_solution(result) + return self.table + + def is_optimal_solution(self): + return all(self.table[self.m - 1, 1:] >= 0) + + def select_pivot_column(self): + return np.argmin(self.table[self.m - 1, 1:]) + 1 + + def select_pivot_row(self, main_col): + rows = [i for i in range(self.m - 1) if self.table[i, main_col] > 0] + return min(rows, key=lambda i: self.table[i, 0] / self.table[i, main_col]) + + def perform_pivot(self, main_row, main_col): + self.table[main_row, :] /= self.table[main_row, main_col] + for i in range(self.m): + if i != main_row: + self.table[i, :] -= self.table[i, main_col] * self.table[main_row, :] + + def extract_solution(self, result): + for i in range(len(result)): + k = self.basis.index(i + 1) if i + 1 in self.basis else None + result[i] = self.table[k, 0] if k is not None else 0 + +if __name__ == "__main__": + table = np.array([ + [45, 5, 3], + [-8, -1, 0], + [-10, 0, -1], + [0, -40, -36] + ]) + + result = np.zeros(2) + table_result = Simplex(table).calculate(result) + temp = -table[-1][-2] * result[0] + -table[-1][-1] * math.ceil(result[1]) + + table_data = [["{0:.2f}".format(value) for value in row] for row in table_result] + + fig, ax = plt.subplots() + ax.axis('tight') + ax.axis('off') + ax.table(cellText=table_data, cellLoc='center', loc='center') + + plt.text(-0.06, 0.055, "Решение:") + plt.text(-0.05, 0.045, f"X[1] = {result[0]}") + plt.text(-0.05, 0.035, f"X[2] = {math.ceil(result[1])}") + plt.text(-0.05, 0.025, f"F(x1, x2) = {temp}") + plt.text(-0.06, 0.015, "Решенная симплекс-таблица:") + + plt.show()