This project involves a fast algorithm to solve optimal-task scheduling on multiple processors which is an NP-hard problem.
The team has implemented two algorithms, which are sequential and parallel versions of Depth-first Search (DFS) Branch and Bound. With DFS Branch and Bound, there is low memory usage. The user can specify the amount of cores they want to use when running the parallel version.
We have implemented a visualiser for the user to see the optimal task allocation, current progress and other useful and interesting information for the algorithm, including memory usage and number of schedules checked.
Name | UPI | Github Username |
---|---|---|
Lucas Gao | ygao979 | lucas2005gao |
Jiawei Ge | jge385 | jge385 |
Tommy Shi | yshi428 | tommyshi55 |
Martin Tiangco | mtia116 | MartinTiangco |
Ziwei Yang | zyan225 | zyan225 |
Will Zhang | yzhb120 | Will-ZYS |
- Clone the repository
https://github.com/SoftEng306-2020/project-1-the-lucky-1.git
- Import the project as Gradle project in IntelliJ
To build an executable jar of the project, run the following on the command line:
./gradlew build
The generated jar file will be placed under the build/libs
directory
To run the executable jar file, run
java -jar <jarfilename.jar> [OPTIONS...]
The detailed usage of the application is the following:
Usage: java -jar scheduler.jar INPUT.dot P [OPTIONS]
INPUT.dot (A task graph with integer weights in dot format, need to be placed in the same directory as the jar file or the project root)
P (The number of processors to schedule the INPUT graph on
Optional:
-p N (Use N core for execution in parallel, default is sequential, not implemented for Milestone 1)
-v (Visualise the search, not implemented yet)
-o OUTPUT (Output file is named OUTPUT, default is INPUT-output.dot)
The project can also be run in Gradle, just run
./gradlew run --args='OPTIONS...'
in the project root folder
Or, run the build.gradle script in IntelliJ with the arguments:
run --args='OPTIONS...'
Use the optional -v
flag to display the visualisation.
The visualisation shows useful statistics which include:
- The current task allocation and ordering on the processors at the point in time
- Current best time of the schedule
- Execution status and runtime measurements
- Memory usage
- Estimation of completion
- The number of schedules checked
- Input and Output file names