The objective of this project is to develop a robust set of algorithms for automatically learning admissible heuristics - that is, functions that identify optimal solutions to combinatorial problems and give a lower bound on the actual cost of a solution. The more accurate the heuristic function, the more efficiently an optimal solution can be found, or if an optimal solution is not required the more quickly a lower-cost solution can found. This research is developing ways to learn these heuristics in a domain-independent manner by applying a technique that has proved useful in automatically learning more accurate admissible heuristic functions that take more time to compute, but make up for it in the time they save for the algorithm using the heuristic. This work will provide better solutions of combinatorial problems of artificial intelligence which will be increasingly cost-effective as computers get faster and larger problems are presented for solution.