From 372141826491b4cd5e303cd02d78e204ca52d271 Mon Sep 17 00:00:00 2001 From: Krzysztof Rudnicki Date: Thu, 5 Dec 2024 20:16:13 +0100 Subject: [PATCH] Reapply "Merge branch 'main' of https://github.com/kuhyx/PORR" This reverts commit 87d6bb0d970416cdf8b483222e8c8fae1189dfce. --- code/eigenvalue_methods.py | 43 ----------- code/linear_algebra_utils.py | 145 +++++++++-------------------------- code/matrix_generator.py | 67 +++++++++++----- code/nemeth12_SVD.mat | Bin 59761 -> 0 bytes code/poli3_SVD.mat | Bin 56111 -> 0 bytes code/richardson_method.py | 24 +++--- code/tests.py | 62 +++++---------- 7 files changed, 114 insertions(+), 227 deletions(-) delete mode 100644 code/eigenvalue_methods.py delete mode 100644 code/nemeth12_SVD.mat delete mode 100644 code/poli3_SVD.mat diff --git a/code/eigenvalue_methods.py b/code/eigenvalue_methods.py deleted file mode 100644 index 40639559..00000000 --- a/code/eigenvalue_methods.py +++ /dev/null @@ -1,43 +0,0 @@ -import numpy as np -import scipy -class EigenvalueMethods: - @staticmethod - def get_sing_vals(file_path): - mat_contents = scipy.io.loadmat(file_path) - A = mat_contents['S'][0][0] # Pobranie pierwszego elementu z pola 'S' - singular_values = A['s'].flatten() - return singular_values - - @staticmethod - def power_method(LinAlgType, A, type, max_iter=100, tol=1e-6): - if (type == 'nemeth12'): - singular_vals = EigenvalueMethods.get_sing_vals("nemeth12_SVD.mat") - return np.max(singular_vals) - - n = len(A) - x = [1] * n - lambda_old = 0 - - for _ in range(max_iter): - x = LinAlgType.matrix_vector_multiply(A, x) - lambda_new = LinAlgType.vector_norm(x) - x = LinAlgType.vector_scalar_divide(x, lambda_new) - if abs(lambda_new - lambda_old) < tol: - break - lambda_old = lambda_new - - return lambda_new - - @staticmethod - def inverse_power_method(LinAlgType, A, type, max_iter=100, tol=1e-6): - - if (type == 'nemeth12'): - singular_vals = EigenvalueMethods.get_sing_vals("nemeth12_SVD.mat") - return np.min(singular_vals) - - n = len(A) - I = [[1 if i == j else 0 for j in range(n)] for i in range(n)] - A_inv = [LinAlgType.gaussian_elimination(A.tolist(), I_col) for I_col in I] - A_inv = list(map(list, zip(*A_inv))) - - return 1 / EigenvalueMethods.power_method(LinAlgType, A_inv, type, max_iter, tol) diff --git a/code/linear_algebra_utils.py b/code/linear_algebra_utils.py index 811c3e27..ced277e4 100644 --- a/code/linear_algebra_utils.py +++ b/code/linear_algebra_utils.py @@ -6,6 +6,7 @@ from abc import ABC, abstractmethod from concurrent.futures import ThreadPoolExecutor from functools import partial from time_measurement import time_measurement, time_accumulator +import numpy as np import dask.array as da class LinearAlgebraUtils(ABC): @@ -59,11 +60,6 @@ class LinearAlgebraUtils(ABC): def matrix_matrix_subtraction(A, B): pass - @staticmethod - @abstractmethod - def gaussian_elimination(A, b): - pass - class SequentialLinearAlgebraUtils(ABC): @staticmethod @@ -84,7 +80,7 @@ class SequentialLinearAlgebraUtils(ABC): @staticmethod def matrix_scalar_multiply(A, w): - return [[w * A[i][j] for j in range(len(A[0]))] for i in range(len(A))] + return A * w @staticmethod def vector_vector_subtraction(v1, v2): @@ -106,39 +102,12 @@ class SequentialLinearAlgebraUtils(ABC): def matrix_matrix_subtraction(A, B): return [[A[i][j] - B[i][j] for j in range(len(A[0]))] for i in range(len(A))] - @staticmethod - def gaussian_elimination(A, b): - n = len(A) - M = [row[:] for row in A] - - for i in range(n): - M[i].append(b[i]) - - for k in range(n): - if M[k][k] == 0: - for i in range(k + 1, n): - if M[i][k] != 0: - M[k], M[i] = M[i], M[k] - break - - for i in range(k + 1, n): - factor = M[i][k] / M[k][k] - for j in range(k, n + 1): - M[i][j] -= factor * M[k][j] - - x = [0] * n - for i in range(n - 1, -1, -1): - x[i] = M[i][-1] / M[i][i] - for k in range(i - 1, -1, -1): - M[k][-1] -= M[k][i] * x[i] - - return x - class ThreadsLinearAlgebraUtils(ABC): NUM_THREADS = 4 @staticmethod + @time_measurement(time_accumulator) def get_chunk_size(data): num_elements = len(data) num_threads = min(ThreadsLinearAlgebraUtils.NUM_THREADS, num_elements) @@ -148,6 +117,7 @@ class ThreadsLinearAlgebraUtils(ABC): @staticmethod + @time_measurement(time_accumulator) def divide_vectors_to_chunks(v1, v2): chunk_size, num_threads, remainder = ThreadsLinearAlgebraUtils.get_chunk_size(v1) @@ -161,6 +131,7 @@ class ThreadsLinearAlgebraUtils(ABC): return chunks @staticmethod + @time_measurement(time_accumulator) def divide_vector_or_matrix_to_chunks(v): chunk_size, num_threads, remainder = ThreadsLinearAlgebraUtils.get_chunk_size(v) @@ -264,8 +235,23 @@ class ThreadsLinearAlgebraUtils(ABC): @staticmethod @time_measurement(time_accumulator) def divide_matrixes_to_chunks(A, B): - chunk_size = len(A) // ThreadsLinearAlgebraUtils.NUM_THREADS - return [(A[i:i + chunk_size], B[i:i + chunk_size]) for i in range(0, len(A), chunk_size)] + num_rows = len(A) + num_threads = ThreadsLinearAlgebraUtils.NUM_THREADS + if num_threads > num_rows: + num_threads = num_rows + if num_rows == 0: + return [] + chunk_size = num_rows // num_threads + remainder = num_rows % num_threads + chunks = [] + start = 0 + for _ in range(num_threads): + end = start + chunk_size + (1 if remainder > 0 else 0) + chunks.append((A[start:end], B[start:end])) + start = end + if remainder > 0: + remainder -= 1 + return chunks @staticmethod @time_measurement(time_accumulator) @@ -280,40 +266,6 @@ class ThreadsLinearAlgebraUtils(ABC): results = executor.map(subtract_chunk, chunks) return [row for chunk in results for row in chunk] - @staticmethod - @time_measurement(time_accumulator) - def gaussian_elimination(A, b): - n = len(A) - M = [row[:] for row in A] - - for i in range(n): - M[i].append(b[i]) - - for k in range(n): - # Pivoting - if M[k][k] == 0: - for i in range(k + 1, n): - if M[i][k] != 0: - M[k], M[i] = M[i], M[k] - break - - # Threads - def eliminate_row(i): - factor = M[i][k] / M[k][k] - for j in range(k, n + 1): - M[i][j] -= factor * M[k][j] - - with ThreadPoolExecutor(max_workers=ThreadsLinearAlgebraUtils.NUM_THREADS) as executor: - rows_to_eliminate = range(k + 1, n) - executor.map(eliminate_row, rows_to_eliminate) - - x = [0] * n - for i in range(n - 1, -1, -1): - x[i] = M[i][-1] / M[i][i] - for k in range(i - 1, -1, -1): - M[k][-1] -= M[k][i] * x[i] - - return x @time_measurement(time_accumulator) def process_row(params): @@ -331,6 +283,7 @@ def multiply_by_scalar(pair): element, scalar = pair return element * scalar + class ProcessLinearAlgebraUtils: @staticmethod @time_measurement(time_accumulator) @@ -422,56 +375,30 @@ class ProcessLinearAlgebraUtils: with Pool() as pool: result = pool.map(multiply_by_scalar, [(element, omega) for element in vector]) return list(result) + + @staticmethod + @time_measurement(time_accumulator) + def sum_of_squares(row): + return sum(x ** 2 for x in row) @staticmethod @time_measurement(time_accumulator) def matrix_norm(A): with Pool() as pool: - row_sums = pool.map(lambda row: sum(x ** 2 for x in row), A) + row_sums = pool.map(ProcessLinearAlgebraUtils.sum_of_squares, A) return math.sqrt(sum(row_sums)) @staticmethod @time_measurement(time_accumulator) - def matrix_matrix_subtraction(A, B): - def subtract_rows(row_pair): - return [a - b for a, b in zip(*row_pair)] - - with Pool() as pool: - result = pool.starmap(subtract_rows, zip(A, B)) - return result - + def subtract_rows(row_from_A, row_from_B): + return [a - b for a, b in zip(row_from_A, row_from_B)] + @staticmethod @time_measurement(time_accumulator) - def gaussian_elimination(A, b): - try: - n = len(A) - A = [list(row) + [b_i] for row, b_i in zip(A, b)] - - for k in range(n): - # Pivoting - max_index = max(range(k, n), key=lambda x: abs(A[x][k])) - if A[max_index][k] == 0: - raise ValueError("Matrix is singular and cannot be solved.") - A[k], A[max_index] = A[max_index], A[k] - - # Parallel row processing - with Pool() as pool: - results = pool.map(process_row, [(A, k, i) for i in range(k + 1, n)]) - - # Update remaining rows in matrix - for i in range(k + 1, n): - A[i] = results[i - (k + 1)] - - # Back substitution - x = [0] * n - for i in range(n - 1, -1, -1): - sum_ax = sum(A[i][j] * x[j] for j in range(i + 1, n)) - x[i] = (A[i][-1] - sum_ax) / A[i][i] - - return x - except Exception as e: - print(f"Error during Gaussian elimination: {e}") - return None + def matrix_matrix_subtraction(A, B): + with Pool() as pool: + result = pool.starmap(ProcessLinearAlgebraUtils.subtract_rows, zip(A, B)) + return result class DistributedArraysLinearAlgebraUtils(ABC): @staticmethod diff --git a/code/matrix_generator.py b/code/matrix_generator.py index 140f1b11..024403a3 100644 --- a/code/matrix_generator.py +++ b/code/matrix_generator.py @@ -1,20 +1,12 @@ import numpy as np import scipy.io +import os class MatrixGenerator: @staticmethod def generate_spd_matrix(n: int) -> np.ndarray: - """ - Generates a random symmetric positive definite matrix of size n x n. - - Parameters: - n (int): The size of the matrix to generate. - - Returns: - np.ndarray: A symmetric positive definite matrix of size n x n. - """ A = np.random.rand(n, n) - spd_matrix = np.dot(A, A.T) + n * np.eye(n) # Adding n*I ensures positive definiteness + spd_matrix = np.dot(A, A.T) + n * MatrixGenerator.generate_identity_matrix(n) # Adding n*I ensures positive definiteness return spd_matrix @staticmethod @@ -41,17 +33,54 @@ class MatrixGenerator: if type == 'spd': if size is None: raise ValueError("Size must be provided for SPD matrix generation.") - matrix = MatrixGenerator.generate_spd_matrix(size) - vector = np.random.uniform(-1, 1, size) + try: + matrix, vector, lambda_min, lambda_max = MatrixGenerator.load_from_file("spd_"+str(size)+".npz") + except FileNotFoundError as e: + matrix = MatrixGenerator.generate_spd_matrix(size) + vector = np.random.uniform(-1, 1, size) + lambda_min, lambda_max = MatrixGenerator.calculate_eigenvalues(matrix) + MatrixGenerator.save_to_file(matrix, vector, lambda_min, lambda_max, "spd_"+str(size)+".npz") elif type == 'nemeth12': - matrix = -1 * MatrixGenerator.get_matrix_from_file("nemeth12.mat", 1) - size = matrix.shape[0] - vector = MatrixGenerator.generate_alternating_vector(size) + try: + matrix, vector, lambda_min, lambda_max = MatrixGenerator.load_from_file("nemeth12.npz") + except FileNotFoundError as e: + matrix = -1 * MatrixGenerator.get_matrix_from_file("nemeth12.mat", 1) + size = matrix.shape[0] + vector = MatrixGenerator.generate_alternating_vector(size) + lambda_min, lambda_max = MatrixGenerator.calculate_eigenvalues(matrix) + MatrixGenerator.save_to_file(matrix, vector, lambda_min, lambda_max, "nemeth12.npz") elif type == 'poli3': - matrix = MatrixGenerator.get_matrix_from_file("poli3.mat", 2) - size = matrix.shape[0] - vector = MatrixGenerator.generate_alternating_vector(size) + try: + matrix, vector, lambda_min, lambda_max = MatrixGenerator.load_from_file("poli3.npz") + except FileNotFoundError as e: + matrix = MatrixGenerator.get_matrix_from_file("poli3.mat", 2) + size = matrix.shape[0] + vector = MatrixGenerator.generate_alternating_vector(size) + lambda_min, lambda_max = MatrixGenerator.calculate_eigenvalues(matrix) + MatrixGenerator.save_to_file(matrix, vector, lambda_min, lambda_max, "poli3.npz") else: raise ValueError("Invalid type specified. Choose 'spd', 'nemeth12', or 'poli3'.") - return matrix, vector \ No newline at end of file + return matrix, vector, lambda_min, lambda_max + + @staticmethod + def calculate_eigenvalues(A): + eigenvalues = np.linalg.eigvals(A) + lambda_min = np.min(eigenvalues) + lambda_max = np.max(eigenvalues) + return lambda_min, lambda_max + + @staticmethod + def save_to_file(matrix, vector, lambda_min, lambda_max, file_path): + np.savez(file_path, matrix=matrix, vector=vector, lambda_min=lambda_min, lambda_max=lambda_max) + + def load_from_file(file_path): + if not os.path.exists(file_path): + raise FileNotFoundError(f"The file {file_path} does not exist.") + data = np.load(file_path) + matrix = data['matrix'] + vector = data['vector'] + lambda_min = data['lambda_min'] + lambda_max = data['lambda_max'] + return matrix, vector, lambda_min, lambda_max + diff --git a/code/nemeth12_SVD.mat b/code/nemeth12_SVD.mat deleted file mode 100644 index 9a569d110bb5406f6811ddcd02a7f244e510b528..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59761 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

F@DotHLVoBZf%DE&NRc?In`yQMkn^4fmaj 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 gz|ywT(P5dItpGXMYp diff --git a/code/poli3_SVD.mat b/code/poli3_SVD.mat deleted file mode 100644 index db51d0e7f89351144a168bb0231ae6433f87fd8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56111 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 Uy=nhPZ<>VPDG7=H0mCc@6V|lk3IG5A diff --git a/code/richardson_method.py b/code/richardson_method.py index fb5874f3..53053514 100644 --- a/code/richardson_method.py +++ b/code/richardson_method.py @@ -1,14 +1,14 @@ import linear_algebra_utils as linAlg -from eigenvalue_methods import EigenvalueMethods from matrix_generator import MatrixGenerator from processing_type import ProcessingType from time_measurement import time_measurement, time_accumulator, tests_time import time import gc +import numpy as np class RichardsonMethod: @time_measurement(time_accumulator) - def __init__(self, method: ProcessingType, A, type, b, max_iterations, size: int, x0=None, tol=1e-5): + def __init__(self, method: ProcessingType, A, b, lambda_min, lambda_max, max_iterations, size: int, x0=None, tol=1e-5): self.LinAlg = self.assign_LinAlgType(method) self.A = A self.b = b @@ -16,27 +16,21 @@ class RichardsonMethod: self.max_iterations = max_iterations self.tol = tol # self.I = MatrixGenerator.generate_identity_matrix(size) - self.lambda_min, self.lambda_max = RichardsonMethod.calculate_eigenvalues(self.LinAlg, self.A, type) + self.lambda_min = lambda_min + self.lambda_max = lambda_max if self.lambda_min < 0: raise ValueError("Matrix A is not positive semi-definite.") self.omega = RichardsonMethod.calculate_omega(self.lambda_min, self.lambda_max) - @staticmethod - def calculate_eigenvalues(LinAlgType, A, type): - eigenvalues = np.linalg.eigvals(A) - lambda_min = np.min(eigenvalues) - lambda_max = np.max(eigenvalues) - return lambda_min, lambda_max - @staticmethod def calculate_omega(lambda_min, lambda_max): return 2 / (lambda_min + lambda_max) @staticmethod def convergence_norm(LinAlgType, A, omega, I) -> bool: - wA = LinAlgType.LinAlg.matrix_scalar_multiply(A, omega) - IMinuswA = LinAlgType.LinAlg.matrix_matrix_subtraction(I, wA) - norm = LinAlgType.LinAlg.matrix_norm(IMinuswA) + wA = LinAlgType.matrix_scalar_multiply(A, omega) + IMinuswA = LinAlgType.matrix_matrix_subtraction(I, wA) + norm = LinAlgType.matrix_norm(IMinuswA) return norm @staticmethod @@ -58,8 +52,8 @@ class RichardsonMethod: time_accumulator.total_time = 0 start = time.perf_counter() x = self.x0[:] - #if RichardsonMethod.convergence_norm(self.LinAlg, self.A, self.omega, self.I) >= 1: - # return RichardsonMethod.convergence_norm(self.A, self.omega, self.I), "Richardson method for those values will NOT converge", + # if RichardsonMethod.convergence_norm(self.LinAlg, self.A, self.omega, self.I) >= 1: + # return RichardsonMethod.convergence_norm(self.LinAlg, self.A, self.omega, self.I), "Richardson method for those values will NOT converge", for iteration in range(self.max_iterations): Ax = self.LinAlg.matrix_vector_multiply(self.A, x) diff --git a/code/tests.py b/code/tests.py index c112f009..45b8f508 100644 --- a/code/tests.py +++ b/code/tests.py @@ -1,59 +1,52 @@ import pytest import numpy as np -from scipy.sparse.linalg import cg from matrix_generator import MatrixGenerator from richardson_method import RichardsonMethod from processing_type import ProcessingType from time_measurement import time_measurement, tests_time def calculate_norm_numpy(I, w, A): - # Calculate the difference between I and w * A difference = I - w * A - - # Calculate the Euclidean norm of the difference norm = np.linalg.norm(difference) - return norm def calculate_eigenvalues(A): - # Calculate the eigenvalues of matrix A eigenvalues = np.linalg.eigvals(A) - - # Find the minimum and maximum eigenvalues lambda_min = np.min(eigenvalues) lambda_max = np.max(eigenvalues) - return lambda_min, lambda_max -def calcualte_norm_from_matrix_numpy(A, n, max_iterations): +def calcualte_norm_from_matrix_numpy(A, n): lambda_min, lambda_max = calculate_eigenvalues(A) omega = 2 / (lambda_min + lambda_max) I = np.eye(n) return calculate_norm_numpy(I, omega, A) -@pytest.mark.parametrize("n", [2, 3, 4, 5, 10, 20, 50, 100]) -@pytest.mark.parametrize("processing_type", [ProcessingType.SEQUENTIAL, ProcessingType.THREADS, ProcessingType.PROCESSES]) -@pytest.mark.parametrize("matrix_type", ["spd", "nemeth12"])#, "poli3"]) @time_measurement(tests_time) +def solution_lib(A, b): + return np.linalg.solve(A, b) + +@pytest.mark.parametrize("n", [2, 5, 10, 50, 100, 300, 500, 750, 1000, 5000, 10000]) +@pytest.mark.parametrize("processing_type", [ProcessingType.SEQUENTIAL, ProcessingType.THREADS, ProcessingType.PROCESSES]) +@pytest.mark.parametrize("matrix_type", ["spd", "nemeth12", "poli3"]) def test_richardson_vs_cg(n: int, processing_type: ProcessingType, matrix_type: str, capsys): print("matrix type: ", matrix_type) print("matrix size: ", n if matrix_type == "spd" else "fixed") - tolerance = 7e-3 + tolerance = 8e-3 max_iterations=100 if matrix_type in ["nemeth12", "poli3"] and n != 2: pytest.skip("Fixed matrix size for nemeth12 and poli3, skipping redundant runs.") if matrix_type == "spd": - A, b = MatrixGenerator.generate_matrix_and_vector('spd', size=n) + A, b, lambda_min, lambda_max = MatrixGenerator.generate_matrix_and_vector('spd', size=n) elif matrix_type == "poli3": - A, b = MatrixGenerator.generate_matrix_and_vector('poli3') + A, b, lambda_min, lambda_max = MatrixGenerator.generate_matrix_and_vector('poli3') elif matrix_type == "nemeth12": - A, b = MatrixGenerator.generate_matrix_and_vector('nemeth12') + A, b, lambda_min, lambda_max = MatrixGenerator.generate_matrix_and_vector('nemeth12') else: raise ValueError("Invalid matrix type specified. Choose 'spd', 'poli3', or 'nemeth12'.") - richardson_solver = RichardsonMethod(processing_type, A, matrix_type, b, max_iterations, size=A.shape[0], tol=1e-7) - # solution_richardson, info_richardson = richardson_solver.solve() + richardson_solver = RichardsonMethod(processing_type, A, b, lambda_min, lambda_max, max_iterations, size=A.shape[0], tol=1e-7) solution_richardson, info_richardson = None, None with capsys.disabled(): @@ -63,37 +56,24 @@ def test_richardson_vs_cg(n: int, processing_type: ProcessingType, matrix_type: captured = capsys.readouterr() print("Captured output:", captured.out) - solution_cg, info = cg(A, b, atol=0.) + solution = solution_lib(A,b) - if info == 0: # SciPy CG converged - assert_scipy_converged(solution_richardson, info_richardson, solution_cg, tolerance, A, b, max_iterations, n) - else: # SciPy CG did not converge - assert_scipy_not_converged(solution_richardson, info_richardson, A, b) + assert_converged(solution_richardson, info_richardson, solution, tolerance, A, n) -def assert_scipy_converged(solution_richardson, info_richardson, solution_cg, tolerance, A, b, max_iterations, n): +def assert_converged(solution_richardson, info_richardson, solution, tolerance, A, n): if info_richardson == "Richardson method for those values will NOT converge": - print("Richardson did not converge, while SciPy did") - numpy_norm = calcualte_norm_from_matrix_numpy(A, n, max_iterations) + numpy_norm = calcualte_norm_from_matrix_numpy(A, n) print("Numpy norm: ", numpy_norm, " Richardson norm: ", solution_richardson) - assert False, "Richardson did not converge, while SciPy did" + assert False, "Richardson did not converge" else: - difference = np.linalg.norm(solution_richardson - solution_cg) - print(f"Difference between Richardson and CG solutions: {difference:.8f}") + difference = np.linalg.norm(solution_richardson - solution) + print(f"Difference between Richardson and numpy solutions: {difference:.8f}") if difference < tolerance: - print("Both Richardson and CG converged and calculated correct values.") + print("Both Richardson and numpy method converged and calculated correct values.") else: - print("Solution CG:\n", solution_cg) + print("Solution numpy:\n", solution) print("Solution Richardson:\n", solution_richardson) assert difference < tolerance, f"The solutions are different! Difference: {difference:.8f}" -def assert_scipy_not_converged(solution_richardson, info_richardson, A, b): - if info_richardson == "Richardson method for those values will NOT converge": - print("Richardson and SciPy did not converge") - else: - print("Richardson converged while SciPy did not:", solution_richardson) - print("Matrix A:\n", A) - print("Vector b:\n", b) - assert False, "Richardson converged while SciPy did not" - if __name__ == "__main__": pytest.main()