After you implement `my_heuristic`, run `compare_problem_sizes` in the `compare_heuristics.py` file, and view its output files, `heuristics_size_states.jpg` and `heuristics_size_frontier.jpg`. To do this, uncomment out lines 109--110 in `compare_heuristics.py`. The `compare_problem_sizes` method in the `compare_heuristics.py` file runs `astar` using three heuristics, half-Manhattan, Manhattan, and `my_heuristic` (which is a heuristic written by the students), on a few sample problems (5 by default) of varying sizes (2, 3, and 4) and calculates some average statistics, including the average number of states expanded and the average solution lengths. Write a few sample `my_heuristic` functions. Summarize your findings in 2-3 sentences in your `README` and include `heuristics_varying_size.jpg` in your submission. As above, you should be sure to touch on the tradeoffs between efficiency and optimality. You should discuss both the trends within a single problem size (i.e., compare different heuristics on problem of the same size) and trends across different problem sizes (e.g., how the number of states expanded or the size of the frontier changes as problem size increases). <font style="color:red"> warning problems of size 4 + 5 can be SLOW! </font> - Google Maps - admissible vs inadmissable and tradeoffs - time and space complexity of ids vs dfs - more admissable, sol quality goes down (length of path you find increases, but you expand significantly fewer states) - inadmissable heuristic could be a constant (reg bfs, slow)