Teaching Philosophy

Making Optimisation Accessible

I am passionate about democratising optimisation, ensuring that powerful mathematical decision-making tools are not confined to academic circles but are readily available and usable by practitioners, students, and researchers across disciplines. To this end, I develop open-source implementations of my algorithms, contribute to solver communities, and publish accessible tutorials that bridge the gap between complex theory and practical application. I also actively engage in collaborative projects with industry partners, translating real-world logistical, engineering, and operational challenges into tractable optimisation models. By fostering an open, inclusive, and applied approach to optimisation research, I aim to lower the barriers to entry and empower a broader community to harness the transformative potential of mathematical programming and operations research.

🎯 Core Principles

  • Active Learning: Students learn best by doing, not just listening
  • Real-World Relevance: Every concept should connect to practical applications
  • Inclusive Environment: All students should feel welcome and supported
  • Critical Thinking: Question assumptions and think about implications

📚 Teaching Methods

  • Flipped Classroom: Interactive lectures with hands-on activities
  • Project-Based Learning: Semester-long projects with real impact
  • Peer Learning: Collaborative problem-solving and code reviews
  • Continuous Assessment: Regular feedback and iterative improvement

Current Courses (2026.2)

XMCO02: Métodos Exatos em Otimização

Graduação | Ciência da Computação | Qua/Sex 1:30-3:20pm

A comprehensive introduction to exact optimisation methods, covering both continuous and discrete mathematical programming techniques. The course bridges fundamental theory with practical algorithmic implementation, equipping students with the tools to model and solve complex decision-making problems. Students will gain hands-on experience formulating real-world problems and implementing solution algorithms.

Topics Covered:

  • Review of linear algebra concepts (vectors, matrices, systems of equations)
  • Introduction to optimisation problems: unconstrained and constrained formulations
  • Linear Programming: mathematical modelling, graphical method, and the SIMPLEX algorithm
  • Duality theory and sensitivity analysis
  • Integer Programming: branch-and-bound and its variants
  • Decomposition methods: Lagrangian relaxation, Dantzig-Wolfe, and Benders decomposition

CTCO04: Projeto e Análise de Algoritmos

Graduação | Ciência da Computação | Qui 1:30-3:20pm/Sex 3:45-5:35pm

A comprehensive introduction to the design and analysis of algorithms, covering both foundational techniques and advanced paradigms for solving computational problems. The course emphasises rigorous mathematical reasoning, efficiency, and correctness, equipping students with the skills to develop, analyse, and compare algorithms across a wide range of applications. Students will implement classic algorithms and explore the theoretical limits of computation.

Topics Covered:

  • Techniques for algorithm design and complexity analysis
  • Mathematical foundations for algorithm analysis (asymptotic notation, recurrences, and summations)
  • Algorithm design by induction: recursion, divide-and-conquer, and loop invariants
  • Searching, sorting, and order statistics
  • Dynamic Programming: principles, memoisation, and classical problems
  • Greedy Algorithms: matroids, exchange arguments, and applications
  • Randomisation in algorithms: probabilistic analysis and randomised data structures
  • Problem reductions and transformations
  • Treatment of NP-Hard problems: approximation algorithms, heuristics, and parameterised complexity

STCO01: Algoritmos & Programação I

Graduação | Sistemas de Informação | Qui/Sex 7-8:50pm

A foundational introduction to algorithms and programming, focusing on essential data structures and their associated operations. The course bridges theoretical concepts with practical implementation, equipping students with the skills to design, analyse, and implement efficient solutions to computational problems. Students will gain hands-on experience programming core data structures and applying them to solve relevant problems.

Topics Covered:

  • Introduction to recursion: algorithms, applications, and problem-solving techniques
  • Abstract Data Types (ADTs): principles and implementation strategies
  • Linear Lists: basic operations, implementations, and applications
  • Stacks: LIFO behaviour, core operations, and practical use cases
  • Queues: FIFO behaviour, core operations, and practical use cases
  • Priority Queues: heaps, operations, and applications
  • Applications of linear lists, stacks, and queues in relevant computational problems
  • Non-linear lists: trees, binary trees, and fundamental operations
  • Binary Search Trees: structure, operations, and efficiency analysis

Past Courses

2026.1

XMAC01: Matemática Discreta

Graduação | Ciência da Computação | 34 alunos

Discrete Mathematics applied to Computer Science with hands-on theorem demonstrations.

CCO016: Fundamentos de Programação

Graduação | Eng. Mecânica Aeronáutica | 27 alunos

Beginner programming course for engineers using C-language.

Student Resources

📚 Learning Materials

💻 Tools & Software

🎯 Academic Support

  • Office Hours: Regular Business hours (under appointment)
  • Study Groups: Student-organized
  • Tutoring: Available through IMC department

Student Mentoring

Research Mentoring Philosophy

I believe that mentoring is one of the most important aspects of academic life. I work closely with students to help them develop not only technical skills but also critical thinking, communication abilities, and professional confidence. My approach is student-centred and collaborative: I treat each mentee as a junior colleague, encouraging intellectual curiosity, independence, and ownership of their research. I am committed to fostering a supportive environment where students feel empowered to ask questions, take risks, and grow as researchers. I also place strong emphasis on helping students develop clear scientific writing and presentation skills, recognising that the ability to communicate complex ideas effectively is essential for a successful academic or industrial career.

Current Graduate Students

  • Juliana Rangel - D.Sc. (1st year)
    Two Stage Capacitated Facility Location with Multiple Periods and Inventory
  • Miguel Jehle - M.S. (1st year)
    Using Random-Keys Optimiser to solve general MILPs with exponential set of constraints

Undergraduate Researchers

  • Marcos Paulo - Junior
    Experimenting with Quantum Optimisation