Generating random networks efficiently and accurately is an important challenge for practical applications, and an interesting question for theoretical study. This book presents and discusses common methods of generating random graphs. It begins with approaches such as Exponential Random Graph Models, where the targeted probability of each network appearing in the ensemble is specified. This section also includes degree-preserving randomisation algorithms, where theaim is to generate networks with the correct number of links at each node, and care must be taken to avoid introducing a bias. Separately, it looks at growth style algorithms (e.g. preferential attachment) which aim to model a real process and then to analyse the resulting ensemble of graphs. It alsocovers how to generate special types of graphs including modular graphs, graphs with community structure and temporal graphs. The book is aimed at the graduate student or advanced undergraduate. It includes many worked examples and open questions making it suitable for use in teaching. Explicit pseudocode algorithms are included throughout the book to make the ideas straightforward to apply. With larger and larger datasets, it is crucial to have practical and well-understood tools. Being able to test a hypothesis against a properly specified control case is at the heart of the 'scientific method'. Hence, knowledge on how to generate controlled and unbiased random graph ensembles is vital for anybody wishing to apply network science in their research.