Problem Description
One of the key project management tools is concerned about project scheduling. The critical path method (CPM) is used to identify overall project duration and critical activities, which form critical path(s), in a network of inter-dependent tasks/activities of a project. Four types of dependencies may exist between a pair of tasks. This assignment only focuses on the end-to-start dependency, i.e. a task can only starts after the completion of its predecessor task(s). In this assignment, you may assume only end-to-start relationship is supported. An illustration of the basic concepts of CPM can be found at https://www.youtube.com/watch?v=4oDLMs11Exs and https://milestonetask.com/critical-path-analysis-steps-example/.
In this assignment, you are required to prepare a Python program that take a network of task/activity nodes as input. The network and task nodes are to be represented as a Python ADTs. Each node ADT should store the following data:
• Node number
• Brief task/deliverable description
• Duration required to complete the task (0 for deliverables)
• Earliest start time
• Earliest finish time
• Latest start time
• Latest finish time
• Slack (= Earliest finish time – Earliest finish time)
• List of predecessor(s)
• List of successor(s)
You need to decide how to store the network of nodes, e.g. in an array, a list, or some other data structures. For simplicity, you may define the network in your program instead of retrieving task details from a database.
Test Data
You are required to test your Python program with the following task network:
Run your program and show its outputs to answer the following questions:
• What is the project duration?
• List all the tasks in the critical path.
• If task F takes 10 weeks instead of 9 weeks to finish, how would it affect your answers to questions 1 and 2?
Submission Requirements
Submit your Python program (in .py extension) which should be properly documented with comments, and a brief report that details the justification of your choice of data structures, test results, and answers to the above questions to Moodle no later than Monday, 1 June 2020. The Python code should be included in the appendix of the report. An analysis of time and space complexities of your program is also needed.
This assignment amounts to 40% of the course grade. Grading will be based on solution correctness (50%), completeness (25%), and efficiency of the submitted solution including choice of appropriate data structures (15%), as well as the quality of the documentation (10%).