Mathematical Software
Applications open for 2024-2025
Please submit this form to apply to this project for 2024-2025. The deadline for applications is 9am, Monday 2 December.
The Mathematical Software project aims to develop sophisticated integrated software systems which would allow mathematicians to combine the latest algorithms to solve their problems without needing to understand the details of their implementation.
The project will include the following pieces of work:
- graphs and digraphs (for example, is a graph planar, connected, biconnected, what is its chromatic polynomial)
- groups and semigroups (for instance, what is the size of a semigroup or group generated by a set of elements, how to compute a presentation of one of these objects)
- other mathematical algorithms relating to other modules undertaken as St Andrews
- how to represent problems to a computer so they are easy to use and the implementations are as efficient as possible.
Examples of projects this group is currently working on:
- libsemigroups - C++ library for semigroups and monoids
- Semigroups package for GAP
- Digraphs package for GAP
During the first semester of the project, students will learn software development best practices (for example, version control systems and continuous integration) through Software Carpentry workshops and by interacting with other participants.
Students will then apply what they’ve learned to develop high-level features for one of the systems the group is developing (such as the Semigroups and Digraphs packages for GAP). Participants will be introduced to the notion of computational complexity as applied to real world software, algorithm design, unit testing, and the development of documentation and further teaching materials.
New students will be taught some fundamental skills to bring them up to speed on the project. They will then work on further developing various aspects of the system. More senior students will take on more senior roles within the project by helping introduce new students to the project and implementing more complex algorithms or low-level building blocks.
Group meetings will be held weekly to share information, report progress or things preventing progress, and plan for the subsequent meetings. Occasionally, there will be short presentations on relevant topics.