Advanced Algorithms and Data Structures
You'll study the theory used in the design and analysis of advanced algorithms and data structures. Topics covered include string algorithms (such as for string matching, longest common subsequence), graph algorithms (such as for minimum cuts and maximum flows, and Google's pagerank algorithm), advanced data structures (such as Fibonacci heaps and Bloom filters), and randomised search heuristics (evolutionary algorithms). You'll learn all the necessary probability theory will be introduced, including random variables and concentration inequalities.
The theory is practiced in weekly labs where we learn how to implement the algorithms and data structures as functional and imperative programs (using the languages Haskell and C), and apply these to solve large instances of real-world problems.
Advanced Computer Networks
This module will provide you with an advanced knowledge of computer communications networks, using examples from all-IP core telecommunications networks to illustrate aspects of transmission coding, error control, media access, internet protocols, routing, presentation coding, services and security.
The module will describe Software Defined Networks (SDNs) and provide examples of using them to enable very large scale complex network control. It will also provide advanced knowledge of various routing and query protocols in:
- Ad Hoc Networks
- Mobile Ad Hoc Networks (MANETs)
- Vehicular Ad Hoc Networks (VANETs)
- Disconnection/Disruption/Delay Tolerant Networks (DTNs)
- impact of new networking developments, such as security risks, ethics, interception and data protection will be reflected and discussed systematically
Autonomous Robotic Systems
This module introduces you to the computer science of robotics, giving you an understanding of the hardware and software principles appropriate for control and localisation of autonomous mobile robots. A significant part of the module is laboratory-based, utilising physical robotic hardware to reinforce the theoretical principles covered. You will cover a range of topics including basic behavioural control architectures, multi-source data aggregation, programming of multiple behaviours, capabilities and limitations of sensors and actuators, and filtering techniques.
Project in Advanced Algorithms and Data Structures
This project involves a self-guided study of a selected advanced algorithm or data structure. The outcome of the project is an analysis and implementation of the algorithm or data structure, as well as an empirical evaluation, preferably on a real-world data set of significant size.
Linear and Discrete Optimisation
The module provides an entry point to computational optimization techniques, particularly for modelling and solving linear and discrete optimization problems like diet optimization, network flows, task assignment, scheduling, bin-packing, travelling salesmen, facility location, vehicle routing and related problems.
Optimization sits at the interface of computer science and mathematics. Optimization is considered one of the key techniques within the broad spectrum of artificial intelligence methods. Optimization focuses on making decisions instead of predicting or identifying patterns. Optimization is also one of the most important areas within operations research (OR), which is a discipline that uses modelling techniques, analytics and computational methods to solve complex problems in industry and business.
In this module, you will learn to interpret and develop algebraic models for a variety of real-world linear and discrete optimization problems to then use powerful optimization software (linear, integer and mixed-integer solvers) to produce a solution. The module covers topics such as linear programming, integer programming, combinatorial optimization, modelling and optimization software, multi-objective optimization, simplex method, and branch and bound method among others. Optimization technology is ubiquitous in today's world, for applications in logistics, finance, manufacturing, workforce planning, product selection, healthcare, and any other area where the limited resources must be used efficiently. Optimization enables prescriptive analytics, in order to support and automate decision-making"
Real-world Functional Programming
This module introduces tools, techniques, and theory needed for programming real-world applications functionally, with a particular emphasis on the inherent benefits of functional programming and strong typing for reuse, maintenance, concurrency, distribution, and high availability. These are all aspects that have contributed to the popularity of functional programming for demanding applications eg in the finance industry and have also had a significant impact on the design of many modern programming languages such as Java, C#, and Rust, and frameworks such as MapReduce and React.
Topics typically include functional design patterns, pure data structures, reactive programming, concurrency, frameworks for web/cloud programming, property-based testing, and embedded domain-specific languages. The medium of instruction is mainly Haskell, but other functional languages, for example, Erlang, may be used where appropriate and for a broader perspective.
If you wish to study some particular topic in scope of this module in more depth, you are encouraged to consider taking the module Real-world Functional Programming Project.
Real World Functional Programming Project MSc
If you choose Real-world Functional Programming, this module allows you to explore a real-world functional programming topic of your choice in depth through a programming project.
Specifically, there are no requirements regarding the programming language used. The language would not even necessarily have to be a functional one. What is important is that the ideas underpinning the project are related to real-world functional programming. You will need to define your project through a project pitch.
Individual Programming Project
You will undertake a programming project relevant for AI for an External Client under the supervision of an academic member of staff.
The client, which can be a company, charity, research group etc., provides a problem that requires a sufficiently challenging piece of software to be developed. The client and project idea could be provided by the students or the supervisor. Each project must ultimately be agreed with the concerned Supervisor.
The main assessed outputs are the developed software, including any end-user documentation, along with a 15,000-word document that outlines the development, design and implementation of the software, highlighting the most interesting aspects.
The software must be developed in a professional and systematic manner appropriate for the problem domain.
The assessment is informed by a statement from the External Client on how well the developed software addresses the problem.
Group Programming Project
Students undertake a programming project for an external client in self-formed groups of two to four students under the supervision of an academic member of staff. The client, which can be a company, charity, research group etc., but not the supervisor, provides a problem that requires a sufficiently challenging piece of software to be developed. The client and project idea could be provided by the students or the supervisor. However, projects must have aspects that are relevant to each student's programme of study; eg, there needs to be an artificial intelligence (AI) aspect if any AI students are involved.
The main assessed outputs are the developed software, including any end-user documentation, along with a 5,000-word document that outlines the development, design and implementation of the software, highlighting the most interesting aspects. The software must be developed in a professional and systematic manner appropriate for the problem domain. The assessment is informed by a statement from the external client on how well the developed software addresses the problem. Additionally, each student submits an individual 5,000-word report explaining his or her own contributions and giving a critical appraisal of how the project went, including group dynamics and the contributions of others.
Individual Research Project
Students undertake a research project in computer science supervised by an academic member of staff. The topic should fall within the supervisor's research interests and must further be relevant to the student's programme of study; in particular, projects undertaken by artificial intelligence (AI) students must have a strong AI focus. The project may be proposed by either the supervisor or the student, and may be theoretical, empirical, or even of survey type depending on what is appropriate and feasible for the area and topic. Projects, however, must ultimately be agreed with the supervisor concerned.
The results from the project are to be distilled into a conference-format research paper, authored by the student and constituting the main assessed output. There may, however, be further deliverables as dictated by the nature of the project. Any such deliverables are to be submitted (electronically) as supplementary material. A revised version of the paper, possibly co-authored with the supervisor, may subsequently be submitted for publication to an external venue, such as a conference or journal, if the work is judged to be of sufficiently high standard.
Games
This module covers the history, development and state-of-the-art in computer games and technological entertainment.
You will gain an appreciation of the range of gaming applications available and be able to chart their emergence as a prevalent form of entertainment. You will study the fundamental principles of theoretical game design and how these can be applied to a variety of modern computer games.
In addition, you will study the development of games as complex software systems. Specific software design issues to be considered will include the software architecture of games, and the technical issues associated with networked and multiplayer games.
Finally, you will use appropriate software environments to individually develop a number of games to explore relevant theoretical design and practical implementation concepts.
Data Science with Machine Learning
This module explores the range of data analysis problems that can be modelled computationally and a range of techniques that are suitable to analyse and solve those problems.
Topics covered include:
- basic statistics
- types of data
- data visualisation techniques
- data modelling
- data pre-processing methods including data imputation
- forecasting methods
- clustering and classification methods
Handling Uncertainty with Fuzzy Sets and Fuzzy Systems
This module focuses on handling uncertainty such as vagueness using fuzzy sets and similar approaches. It provides a thorough understanding of key topics such as:
- the nature of uncertainty captured by fuzzy sets and associated links to human reasoning
- inference using fuzzy sets
- similarity of fuzzy sets
- design and modelling of information via fuzzy sets
- type-1 fuzzy sets
- type-2 fuzzy sets
- fuzzy logic systems
- fuzzy set based applications
Mixed Reality
This module focuses on the possibilities and challenges of interaction beyond the desktop. Exploring the 'mixed reality continuum' - a spectrum of emerging computing applications that runs from virtual reality (in which a user is immersed into a computer-generated virtual world) at one extreme, to ubiquitous computing (in which digital materials appear embedded into the everyday physical world - often referred to as the 'Internet of Things') at the other. In the middle of this continuum lie augmented reality and locative media in which the digital appears to be overlaid upon the physical world in different ways.
You will gain knowledge and hands-on experience of design and development with key technologies along this continuum, including working with both ubiquitous computing based sensor systems and locative media. You will learn about the Human-Computer Interaction challenges that need to be considered when creating mixed reality applications along with strategies for addressing them, so as to create compelling and reliable user experiences.
Simulation and Optimisation for Decision Support
This module offers insight into the applications of selected methods of decision support.
The foundations for applying these methods are derived from:
- Operations Research Simulation
- Social Simulation
- Data Science
- Automated Scheduling
- Decision Analysis
Throughout the module, you will become more competent in choosing and implementing the appropriate method for the particular problem at hand. You will spend five hours per week in lectures, workshops, and computer classes for this module.
Programs, Proofs and Types
This module focuses on some of the fundamental mathematical concepts that underlie modern programming and programming languages emphasizing the role of types. We will use a dependently typed programming language/interactive proof system (eg Agda) to implement some concepts on a computer.
Example topics include
- basic lambda calculus
- operational semantics
- domain theory
- types, propositions as types and formal verification.
You will engage in a mix of lectures and working in the lab with an interactive proof system.