Thesis Topics

Thesis supervision

If you are interested, I am happy to supervise your student project, bachelor, master, or doctoral thesis. My specialization is primarily graph theory, combinatorial optimization, and artificial intelligence, which corresponds to the study programs in which I am qualified to supervise.

  • Bachelor studies: General Computer Science, Artificial Intelligence
  • Master studies: Discrete Models and Algorithms, Theoretical Computer Science, Artificial Intelligence
  • Doctoral studies: Individual discussion with sufficient advance notice before applying for admission (at least 3 months prior)

Below I discuss typical theses in artificial intelligence, which are the most popular among students. If you are not afraid of mathematics and also like mathematical proofs, we can arrange a topic from graph theory or a combination of combinatorics and artificial intelligence.


What to expect from your thesis?

If you are a bachelor or master student, you need not worry that you would have to invent something new and significant. Especially in a bachelor thesis, you should demonstrate that you have understood the material covered in the courses of your specialization and can correctly apply that knowledge to a slightly more complex problem than you have seen in tutorials.

For example, in the exercise sessions of Nature-Inspired Algorithms you use an evolutionary algorithm for the knapsack problem; in your thesis you might extend it to the problem of placing given objects into multiple knapsacks so that specified pairs of objects are not placed in the same knapsack (a motivation could be the fact that flammables and explosives must not be transported together). This problem can be solved by various algorithms, so you select a few, use them, and compare them. In the text part you should demonstrate that you can explain to readers what you did in the thesis, which approaches you chose, and how the individual algorithms performed.

Important

I emphasize that it is not necessary for your program to outperform the best known algorithms, which are often beyond the scope of study plans. The goal of the thesis is the correct application of the discussed methods and their objective comparison. Conversely, it is wrong to try to convince the reader that your approach is the best in the world because it has classification accuracy better by 0.01%, especially when this improvement can only be achieved on a single seed value.

A student project must be software-based, but a bachelor or master thesis may be theoretical. For example, you might decide for some problem whether it can be solved in polynomial time or is NP-complete, find an FPT algorithm for it, or an approximation algorithm. It is even possible to combine approaches: you might come up with an algorithm for your favorite problem, implement it in your student project, and in the bachelor thesis mathematically prove its properties. Since most students prefer implementation and experimental theses, the following discussion rather concerns these types. If you would prefer more theoretical theses, we will arrange the approach individually.

If you have a selected student project in the area of AI or optimization, it is natural to follow up with a bachelor thesis. In the student project you program appropriate algorithms or use existing libraries. You try these algorithms and compare them on some data sets. In the text part of the bachelor thesis you describe the used algorithms and experimental results.


How to choose a thesis topic?

Simply put, you must choose a problem you would like to study and tools you want to learn and try. Of course, not every pair of problem and tool must make sense, but if you think in advance about what would interest you, we will more easily arrive at a topic during consultation that you will want to study for the next year or two. You probably have no idea how demanding the thesis assignment must be, but you need not worry about that, because that is the supervisor’s assessment. In the worst case I will convince you that the assignment needs to be simplified or postponed to the master thesis.

If some topics have caught your interest or you have your own idea for a thesis, write to me and we will arrange it. Especially, don’t be afraid to write in time, because by March I usually have my capacity for student projects exhausted.


Which programming language to choose?

The choice of programming language depends on the chosen problem and often there is no single ideal choice.

  • Python The usual choice for machine learning problems, where demanding computations run in libraries written in C/C++/Fortran and Python serves only for data preprocessing and analysis of results. With optimization algorithms this approach often fails because you wrote the time-consuming fitness function computation in Python. There is a big difference whether you wait a second or a minute when debugging a program, and in experiments you might wait a day or a year. We have already had a number of students here who started writing optimization in Python and then rewrote everything into C/C++. A significant advantage of Python is the large number of libraries that are (with the right choice) easy to install and use.

  • C/C++ The usual choice for optimization problems, but to achieve speed you also need knowledge of computer architecture. It is necessary to take care of memory management even in places that are not time-critical. You do not have Python tools available (e.g., list comprehension) that significantly shorten code and speed up development.

  • Combination of Python and C/C++ Using the library pybind11 it is possible to write time-consuming computations in C/C++ and the rest in Python, but I would recommend this approach only to advanced programmers. It is necessary to be able to solve a number of technical issues and to find errors that may be in the part of the program written in Python or in C/C++ or somewhere in between during data transfer.

  • C#, Java, Rust, Go, etc. Theoretically, it is possible to implement every algorithm in any Turing-complete programming language, but I do not know these languages very well, so I cannot help you much with them.

  • Julia Julia is a dynamic programming language designed primarily for scientific computing. Julia provides effective tools of higher-level programming languages (like R, MATLAB, and Python), but has just-in-time (and optionally ahead-of-time) compilation, which tries to be as fast as C. Since it is a new (version 1.0 released in 2018) and less used language, it does not have such a rich set of libraries as Python, which it replaces by simple calling of functions in C, C++, Python, R, Rust. The disadvantage is the need to learn another language that you probably will not use in practice unless you continue in scientific computing. For studying the Julia language you can use the official documentation, tutorials and videos, and the course at FIT and their study materials.

Consider what you want to learn and what you will need after your studies.


Language of the text part

You can write the text part of the thesis in Czech, Slovak, or English. If English is not a nightmare for you, choose it. You should not mix Czech and English in the thesis, which is sometimes difficult due to unsettled Czech terminology. In source codes you should use exclusively English.

Write the thesis text in LaTeX with BibLaTeX for citations. You can start writing first notes in markdown, but it is only a matter of time until you switch to LaTeX.


Work procedure

  1. First you must choose a topic and supervisor. With me, you can get inspired by these problems and algorithms.
  2. Write the thesis assignment (specification).
  3. Think through the program structure and write the specification.
  4. Implement the assigned program and write comments and documentation continuously.
  5. Run all experiments.
  6. Write the text part of the thesis.

For theoretical theses, you solve the assigned problems instead of writing the program and experiments, of course.