CMSC 421 Intro to AI
Welcome to your first programming assignment. In this assignment you are going to explore
searching algorithms on the Traveling Salesman Problem (TSP). The goal of this assignment is
for you to explore various mathematical and algorithmic trade offs. So you are encouraged to
collaborate, discuss and compare results with your classmates. You may work in groups of three at
most. The final code and lab report submitted should include the name of all the team members.
Stuff you will need to do:
1. Familiarize yourself with the AI:MA code repository and make use of it as you see fit. Feel
free to adapt/copy the code from this repository or any other online resources with proper
citation. Hints, tips and findings from the code repository you are encouraged to share on Piazza.
2. Represent a graph as an adjacency matrix.
3. Read an N ∗ N adjacency matrix that defines an undirected N-node graph with up to N2
edges. Your code is expected to read from the command line an adjacency matrix in the
following format: a.out < infile.txt, where the infile.txt looks like Figure 1. Take
the TSP problem in Figure 2 as an example, Figure 3 is its corresponding infile matrix. As
graphs will be undirected, matrices will be symmetric. For consistency, the full matrix will
be provided although all that is needed is the “upper triangle”.
4. Write your output in a csv file, where the name of the file is the function name. For example,
for the hill-climbing algorithm, the output file should be hillClimbing.csv. The file should
contain 4 entries in one line: total cost of the best solution, number of nodes expanded, CPU
run time, and real-world run time.
5. Perform basic statistics: compute average, standard deviation, max, min, etc.
6. Use your output data to produce a graph, or produce a graph image directly using a GUI or other means.
7. Perform experiments and conduct some empirical experimentation to explore various mathematical and algorithmic trade offs.
Grading rubrics:
• Presentation of the results in graphical form. Several experiments are defined for each of
which there is a capstone plot or chart showing tradeoffs in solution quality and accuracy
and measures of time/space used to reach that solution (submitted via GRADESCOPE).
Are these graphs illustrative of the phenomena expected?
Part 1: Exploring Searching Algorithm
Implement A∗ on a randomly generated TSP problem using the following heuristics:
1. h(n) = 0. This is basically Uniform Cost Search.
2. Grab edges randomly (i.e., grab a random number based on remaining nodes, start with
grabbing n edges, then n-1 edges, etc. . . )
3. Cheapest remaining edges, n-d edges.
For the experiment:
1. Randomly create a family of 30 TSP graphs/matrices for each size 5, 10, 15, 20, ...
2. Run the above algorithms on each of the family of size 5, of size 10, etc....
3. For each family of 30 graphs/matrices you’ll compute the AVERAGE/MIN/MAX of total
cost, number of nodes, CPU and real-world runtime.
4. Use those data to plot 2 graphs – one for total cost and number of nodes, and the other for
CPU and real-world runtime. The x-axis of the plot is the size of the graphs/matrices (size
5, 10, 15, ...). There are two y-axis in the plot – total cost and number of nodes, and CPU
and real-world runtime respectively. Use either different color, shape, or etc. to represent
each searching algorithm.
Compare and discuss the results in a short paragraph. Questions you can explore are for example:
• Which algorithm provides solution with the lowest cost? What’s the difference of their best
solutions, and how that changes when the size of the graph increases?
• Which algorithm has the least runtime and how do their runtimes change with the size of
the graph increases?
• Is there difference between GPU and real-world runtime?
What to submit:
Code: Your implementation of three functions: A uniformCost(). A randomEdge() and A cheapestEdge().
Each function should first read in the graph/matrix from infile.txt. Then perform the
algorithm and finally return the cost of the best solution.
Report: Two graph plots of your experiment results and your discussion.
Part 2: Explore Local Search Algorithm
In this exercise, we explore the use of local search methods to approach TSPs.
1. Implement and test a hill-climbing method to approach TSPs.
2. Implement and test a simulated annealing method to approach TSPs.
3. Implement and test a genetic algorithm method to approach TSPs. (see section 4.3 of Larranaga et al. 1999)
Compare these results with each other and with the optimal solutions obtained from the A∗ algorithm with the MST heuristic. Compare not just the quality of the results but the time it takes
to obtain them. Give an assessment of the relationship between computation time and solution
quality, i.e., if all I wanted was a 75% solution, which method is quickest? How about a 90%
solution? Is there are general rule here?
For the experiment:
1. Randomly create a family of 30 TSP graphs/matrices for each size 30 (or you can experiment with the size).
2. Run the A∗ algorithm with MST on those 30 TSP graphs to get the optimal solutions.
3. Run the above algorithms on those graphs.
4. Try different assignments to parameters like:
• number of restarts for hill-climbing
• number of restarts, initial temperature, cooling ratio α (you can assume the cooling
function is g(T) = α ∗ T) for simulated annealing
• number of generations, selection approach, probability of crossover, length of crossover,
and mutation rate for genetic algorithm
5. Fix your parameters. Then for each graph/matrix you’ll compute the total cost, number of
nodes, CPU and real-world runtime.
6. Use those data to plot three graphs – one for each searching algorithm. For each graph, the
x-axis is the CPU runtime, while the y-axis is the the difference of total cost between the
local searching algorithm and the optimal from A∗ with MST. Use different shape/color to
represent AVERAGE/MIN/MAX of those differences.
7. Maybe repeat the experiment couple times for difference sizes of TSP graphs.
What to submit:
Code: Your implementation of three functions: hillClimbing(), simuAnnealing() and genetic().
Report: At least three graph plots of your experiment results and a short paragraph of your discussion.
咨询 Alpha 小助手,获取更多课业帮助