1 Assignment Details 1.1 Coursework Objectives The coursework will be used to assess your abilities to apply the technologies you have studied to solving problems. You are given a problem to solve, and will be tested on your solutions, alongside your understanding of, and the appropriateness of the techniques utilised. This assignment will led the achievement of the following learning outcomes, i.c. ability to: - Formulate appropriate representations of problems and associated knowledge - Use criteria to discriminate, select and apply appropriate paradigms - Design and implement a range of different search methods 1.2 Introduction - The Cleaning Robot Roomba is a vacuum cleaning robot. The robot operates by mapping the floor using a LiD.AR and producing a digital representation of the floor. Suppose the robot identified 12 nodes in the floor, as shown in Figure 1. To clean the floor, Roomba has to visit all nodes at least once. Since Roomba operates via batieries, each translation from one node to an adjacent node drains the battery by 1 Watthours (Wh). Fottunately, Roomba has 12Wh of battery energy available onboard. Roomba has to navigate to the charging station (node 12) when battery encrgy drops to 50% (i.e. 6 Wh). and then resume cleaning. 2.1 Assignment Questions For the case study presented above, answer the following questions by providing a Python program. The code in each question builds upon the next one. 1) Convert the graph shown in Figure 1 into proper computer-friendly representation. 2) The robot should store its state in a variable called "state". Implement a finite-state machine (FSM) to change state from "Cleaning" to "Charging" when battery level drogs to 6Wh. The program should accept an input Bat terylevel and output the state as string. \begin{tabular}{|l|} \hline Sample output \\ Enter battery level: 5 \\ Robot state: Charging \\ \hline \end{tabular} 3) Implement a Depth-First search strategy to produce a plan to clean the floor for the fobot by visiting all nodes at least once. The algonthm should work for any starting node. Your output shoold be a sequence of translations as the following: \begin{tabular}{l} \hline Sample output \\ Enter starting node: 1 \\ 12346B64579101211 \\ \hline \end{tabular} 4) Encode the FSM with the search strategy. The robot should execute the strategy in Question 3 when in "Cleaning" state, and another strategy to navigate to the charging station when in "Charging" state. Assume that vising node 12 will increase bantery level to 12 Wh instantly. Also assume the robot starts with fully-charged battery. The output of the code should be a sequence of translations as described in Question 3 includiag the state and battery level of the robot. You should allow the user to input the starting node number. \begin{tabular}{|l|} \hline Sanple output \\ Enter starting node: 1 \\ 1 (Cleaning, 12 Wh) > \\ 2 (Cleaning, 11 Wh) > \\ 3 (Cleaning, 10 Wh) > \\ 4 (Cleaning, 9 Wh) > \\ 6 (Cleaning, 8 Wh) > \\ 8 (Cleaning, 7 Wh) > \\ 6 (Charging, 6 Wh) > \\ 11 (Charging, 5 Wh) > \\ 12 (Cleaning, 12 Wh) > \\ 10 (Cleaning, 11 Wh) > \\ 9 (Cleaning, 10 Wh) > \\ 7 (Cleaning, 9 Wh) > \\ 5 (Cleaning, 8 Wh) \\ \hline \end{tabular} 5) Unfortunately, in a practical scenario, the robot does not always start fully charged. Modify your code by implementing a third state "Error" when no feasible plan is possible that will make the robot reach the charging station without completely draining the battery. In "Error" state, the robot aborts any search strategy. The output of the code should be a sequence of translations as described in Question 4 including the state of the robot. You should allow the user to input the starting node number, and the initial battery level. \begin{tabular}{l} \hline Sample output \\ Enter starting node: 8 \\ Enter starting battery level in Wh: 3 \\ 8 (Charging, 3 Wh) \\ 6 (Charging, 2 Wh) \\ 4 (Charging, 1 Wh) \\ 11 (Error, OWh) \\ \hline \end{tabular} Note: the sample output results were provided for illustration purpose only. The actual output of your program may be different depending on your graph representation. Hence, don't rely on the sample output as a test cases to check your program correctness