KIT Grade Optimizer

2025-09-10

Optimize your grade at Karlsruhe Institute of Technology

The Problem

At KIT, your final master's grade is not just a straight weighted average of all your subjects. The degree is split into modules: two specializations, elective studies, a minor, interdisciplinary courses, and the thesis. Each module gets its own grade, which is a weighted average of the subjects in it, rounded down. Then those module grades feed into the final weighted average.

That rounding is the key. Because grades are truncated per module, moving a subject from one module to another can change the rounding and lower your final grade, even if your overall average stays exactly the same.

The Master Calculator

... literally

The script models your entire grade table: every subject has a name, grade, ECTS, type (lecture, seminar, practical), and a list of modules it is eligible for. You tell it which subjects you want to treat as flexible, and it tries every valid assignment.

choosable = [qml, text_mining, mmllm, xai_practical, mmi, xai, comp_vision, gzns]
min_grade, optimal_assignment = my_grade_table.optimize_exhaustive(choosable)

For a small number of flexible subjects, exhaustive search works fine. For larger sets, there is a random search that samples assignments and keeps the best valid one it finds.

The validity check covers:

  • ECTS ranges per module
  • minimum seminar and practical ECTS
  • total ECTS

It warns you if any constraint is violated, so you don't accidentally optimize into an invalid degree plan.

How Much Does It Actually Help?

The improvement depends entirely on where your grades cluster relative to the rounding boundaries. If a module is sitting at 1.42, one reassignment can push it to 1.3 and shave 0.1 off the final grade. Or it can do nothing at all. The script just tells you which scenario you're in.

Caveats

The model is based on my understanding of the KIT CS master's regulations, which I may have misunderstood. A few things are explicitly not checked:

  • whether Stammodule selections are valid
  • behavior when total ECTS exceed 120

The code is on GitHub, so if you spot a mistake, let me know.