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.
Designing Sensor-Based Systems
You will gain knowledge and hands-on experience of design and technical development of sensor-based systems. You will learn about the human-computer interaction challenges that need to be considered when creating ubiquitous computing systems along with strategies for addressing them, so as to create effective, appropriate and compelling user experiences.
This module will expose you to a variety of research methods, providing you with good quantitative and qualitative skills. Research approaches covered include:
- laboratory evaluation
- case studies
- action research
In addition to project management, the module introduces the research process, from examining how problems are selected, literature reviews, selection of research methods, data collection and analysis, development of theories and conclusions, to the dissemination of the research based on analysis of research papers. The module also offers an overview of ethical considerations when conducting research, and supports in identifying directions for MSc projects.
Topical Trends in Computer Security
This module involves discussing current topics relating to computer security. Each week, as individuals or as a group, you will make a presentation on an assigned topic in computer security followed by a discussion. You will meet with a member of staff to discuss and plan the form of the presentation. You'll also prepare questions for the audience and write a concise (10 page) summary of the material.
The aim of the module is to gain a deeper understanding of the important topics in computer security. You'll learn how to summarise research and present it to a peer audience.
This module looks at the practice of malware analysis, looking at how to analyse malicious software to understand how it works, how to identify it, and how to defeat or eliminate it.
You will look at how to set up a safe environment in which to analyse malware, as well as exploring both static and dynamic malware analysis. Although malware takes many forms, the focus of this module will primarily be on executable binaries. This will cover object file formats and the use of tools such as debuggers, virtual machines, and disassemblers to explore them. Obfuscation and packing schemes will be discussed, along with various issues related to Windows internals.
The module is practical with encouragement to safely practice the skills you're taught.
Linear and Discrete Optimisation
This module provides an entry point to computational optimisation techniques, in particular for modelling and solving linear and discrete optimisation problems like diet optimisation, network flows, task assignment, scheduling, bin-packing, travelling salesmen, facility location, vehicle routing and related problems.
In this module, you will learn to interpret and develop algebraic models for a variety of real-world linear and discrete optimisation 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 optimisation
- modelling and optimisation software
- multi-objective optimisation
Optimisation 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. Optimisation enables prescriptive analytics in order to support and automate decision-making.
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
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.
This module introduces you to the theory and practice of design ethnography.
You will cover a range of topics including:
- origins and evolution of ethnography
- foundations and nature of the ethnomethodological approach
- ethnographic analysis
- its relationship to systems design
- the perceived problems with the approach
Advanced Algorithms and Data Structures
This module covers data structures, efficient algorithms on them and ways to determine their complexity. You will study some modern algorithms that are widely used in contemporary software.
The topics covered can include:
- binary search trees (red-black trees)
- dynamic programming
- graph-algorithms (eg shortest path, maximum flows)
- amortized analysis
- priority queues (binary, leftist and Fibonacci heaps)
- string algorithms (string matching, longest common subsequence).
Among the special topics relevant to contemporary application, we can study:
- public-key cryptography (the RSA cryptosystem)
- the page-rank algorithm (from Google search)
- neural networks.
The theory is practised in labs sessions where you will 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. The coursework consists of the implementation of some of the data types and algorithms on them.
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.
Providing you with an introduction to machine learning, pattern recognition, and data mining techniques, this module will enable you to consider both systems which are able to develop their own rules from trial-and-error experience to solve problems, as well as systems that find patterns in data without any supervision. In the latter case, data mining techniques will make the generation of new knowledge possible, including very big data sets. This is now fashionably termed 'big data' science.
You'll cover a range of topics including:
- machine learning foundations
- pattern recognition foundations
- artificial neural networks
- deep learning
- applications of machine learning
- data mining techniques and evaluating hypotheses
This module is an introduction to the design of human-AI interaction to ensure the AI-driven systems we build are beneficial and useful to people.
The module will cover practical design topics including methods and techniques such as natural language processing and human-robot interaction. The module will also consider societal and theoretical concerns of human-AI interaction, including the ethics of AI, responsible innovation, trust, accountability and explainable AI.
The practical component of the module will involve building AI-driven systems that drive conversational experiences, such as a text-based ‘chatbots’ and speech-controlled services/ ‘skills’, involving automatic speech recognition and natural language processing.
Data Modelling and Analysis
This module will enable you to appreciate 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 (decision trees, naīve bayes classifiers, k-nearest neighbours)
- data simulation
- model interpretation techniques to aid decision support
Spending around four hours each week in lectures and computer classes, appropriate software (eg. R, Weka) will be used to illustrate the topics you'll cover.
Fuzzy Logic and Fuzzy Systems
This module aims to provide a thorough understanding of fuzzy sets and systems from a theoretical and practical perspective.
Topics commonly include:
- type-1 fuzzy sets
- type-1 fuzzy logic systems
- type-1 fuzzy set based applications
- type-2 fuzzy sets
- type-2 fuzzy logic systems
- type-2 fuzzy set based applications.
You will also be exposed to some of the cutting-edge research topics in uncertain data and decision making, e.g., based on type-2 fuzzy logic as well as other fuzzy logic representations. You will develop practical systems and software in a suitable programming language.
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 engage in a mixture of lectures, workshops, and computer classes.
Mixed Reality Technologies
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.
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.
Software Engineering Management
This module is part of the software engineering theme.
This module covers the following topics:
- management of the introduction of new software or IT systems
- software project management practices
- practical experience of use of an Agile software development project management process
- practical experience of use of Test Driven Development, pair programming and various approaches to software management tools, including the use of software versioning, project management planning tools and continuous integration and deployment
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.
In this module, we are interested in the analytics/mining part of big data and how to extract knowledge from big data sets.
You'll be provided with an introduction to the big data problem, describing the main principles behind distributed/parallel systems with data-intensive applications.
This includes the MapReduce programming model, as well as an overview of recent technologies (Hadoop ecosystem, and Apache Spark).
Then, you will learn how to interact with the latest APIs of Apache Spark (RDDs, DataFrames and Datasets) to create distributed programs capable of dealing with big datasets (using Python and/or Scala).
Finally, we will dive into the analytics part of the course, including data pre-processing approaches, distributed machine learning algorithms and data stream algorithms. To do so, you will use the Machine learning library of Apache Spark (MLlib) to understand how some machine learning algorithms (eg Decision Trees, Random Forests, k-means) can be deployed at a scale.
The above is a sample of the typical modules that we offer but is not intended to be construed and/or relied upon as a definitive list of the modules that will be available in any given year. This course page may be updated over the duration of the course, as modules may change due to developments in the curriculum or in the research interests of staff.
Teaching methods and assessment
- Laboratory classes
- Written exams
- Coursework - written and oral reports, programming tasks, design scenarios
- Research projects