Software Engineering Methods Overview
Software Engineering Methods Overview
Failing to construct the project from scratch using CMakeLists.txt results in an automatic score of zero. This strict requirement underscores the emphasis on adhering to software engineering protocols, ensuring reproducibility and consistent environment setup. The failure implies a lack of competency in essential project setup practices, which is critical for demonstrating the ability to deploy and manage software projects effectively .
Students should analyze efficiency based on running time and approximation ratio. Running time is measured using pthread_getcpuclockid(), and the approximation ratio is determined by comparing the size of the computed vertex cover to the optimal size from CNF-SAT-VC. They need to test with graphs of varying vertices (5 to 50), compute both metrics multiple times, and statistically analyze the mean and standard deviation across runs .
Students are expected to use graphGen to create test case graphs, which they will employ to compute the minimum vertex cover using different algorithms. The purpose of graphGen is to provide varied input data by generating multiple graphs with the same number of edges for a given number of vertices, enabling thorough evaluation of the algorithms' efficacy in terms of time and approximation across varying conditions .
The submission requirements include all C++ source-code files, a CMakeLists.txt file to build the project, a user.yml with student data, and a PDF report. The CMakeLists.txt file is emphasized because it ensures the project can be compiled from scratch, enabling consistent build environments across different platforms. This requirement underlines the importance of utilizing proper software engineering practices .
MiniSat is pre-supplied to facilitate the implementation of the CNF-SAT-VC approach, providing a foundation for solving the satisfiability problem efficiently. The expectation is that students will use this tool correctly in their project, focusing on incorporating it within the multithreaded framework without needing to push the tool itself into the gitlab repository, allowing them to demonstrate understanding of incorporating existing software tools into their solutions .
CNF-SAT-VC can be complex due to the NP-complete nature of satisfiability problems, making its computation time increase exponentially with larger vertex sizes. This potential inefficiency makes it difficult to scale effectively beyond a certain number of vertices. As vertex numbers increase, so does the computational demand, requiring optimization of encoding for feasible scaling in the project .
The key components include graphs depicting data on running times and approximation ratios, detailed reasoning on data trends (e.g., explaining spikes in data), and a clear explanation of any optimizations made. Reasoning about data is essential as students must interpret and explain the plots, provide insights into why trends occur, and ensure the program's performance is thoroughly analyzed and justified .
The approximation ratio is assessed by comparing the size of the vertex cover obtained using the approximation algorithms (APPROX-VC-1 and APPROX-VC-2) against the optimum size given by the CNF-SAT-VC method. This measurement is crucial to evaluate how close the approximation algorithms come to finding the minimum vertex cover, contributing to understanding their effectiveness and efficiency across various graph sizes .
The project uses three methods: REDUCTION-TO-CNF-SAT (CNF-SAT-VC) originally implemented in Assignment 4, APPROX-VC-1, and APPROX-VC-2. CNF-SAT-VC reduces the problem to a satisfiability problem, ensuring optimal vertex cover. APPROX-VC-1 selects vertices with the highest degree iteratively, while APPROX-VC-2 picks an edge and adds its vertices to the cover. The algorithms vary in complexity and approximation, with CNF-SAT-VC being optimal but potentially slower for large graphs, whereas the approximation methods are faster but may not find the minimum solution .
Multithreading is crucial in the ECE 650 final project to enhance performance efficiency by allowing parallel execution of tasks. At least four threads are required to facilitate distinct execution paths: one for input/output operations, and three for solving the minimum vertex cover problem using different algorithms. This setup ensures concurrent processing, reducing computational time and making the program efficient .