Title: Algorithmic Problem Solving Feel the satisfaction of attacking a really hard problem
1Algorithmic Problem Solving Feel the
satisfaction of attacking a really hard problem
and solving it!
- This is a hands-on course on studying, combining,
and applying diverse algorithmic techniques,
approaches, and heuristics for solving hard
computational problems. - How do computers play chess? How do they prove
theorems? How do they find optimal routes to
visit many destinations, schedule commodities
flows, arrange optimal packings and facilities
allocations? This course introduces and explains
various appropriate algorithmic and heuristic
methods that help to cleverly reduce and explore
astronomically large search spaces with the
purpose of finding optimal or near-optimal
solutions in reasonable time. - As an example, a familiar local search heuristic
(hill climbing in the picture) can be refined and
adjusted to solve hard problems like Traveling
Salesman, Satisfiability, Graph Coloring,and
Bin Packing.
- Dynamic programming (known from AD2) helps
solving chess endgames efficiently and
exhaustively. Intelligent traversal of a search
tree cutting away nonproductive branches
(branch-and-bound, alpha-beta cut) helps to
outsmart adversaries in games and to solve
complex problems in artificial intelligence and
planning. - Methods of approximating a problem, representing
it by a linear program, and solving its
relaxation efficiently allow for solving a wide
range of practically important problems. Using
randomization often adds power and efficiency to
algorithms, allows to avoid worst-case behaviors
and improves solution quality. - Each participant suggests, works on, presents,
defends an individual project, and creates a web
site, either starting from a method, algorithm or
heuristic, or from a (presumably) hard
algorithmic problem. Both variants usually give
surprising and unexpected results.
Prerequisites Algorithms and data structures
DV2, logic, linear algebra, discrete
mathematics, probability and statistics, advanced
programming. Goal Boosting students'
algorithmic expertise and sophistication, giving
taste and skills for combining advanced tools for
solving hard problems, orienting students in
their (future) research.