# Graduate Course Descriptions

*Updated as of August 21, 2019 @ 12:20 PM*

**Notes:**

Enrolment for non-CS and CS non-degree/undergrad students will open on

**September 5, 2019**; add/drop forms are not required.Graduate courses start the week of

**September 9, 2019.**Cross-listed graduate/undergraduate courses start

**September 5, 2019.**Graduate students must enrol in the Graduate Section of cross-listed courses. The Graduate Section is designated by the 4 digit course code. eg: CSC2209H/458H1

**Fall 2019/Winter 2020 Course Descriptions**

**Notes:**

MSc students must complete 4 graduate level half-courses and cover breadth in 3 methodologies

PhD students must complete 4 graduate level half-courses and complete breadth in 4 different research areas.

PhD U students must complete 8 graduate level half-courses these must include courses from at least 4 different research areas and 3 different methodologies.

MScAC (General Concentration) students must complete four graduate level half-courses and cover breadth in 3 different research areas.

MScAC (Data Science Concentration) students must complete two graduate level half-courses from the Department of Computer Science and cover breadth in two research areas. Students must also complete two graduate level half-courses from the Department of Statistical Science at 2000-level or above.

**CSC2104/465 Program Design**

Using mathematics to write error-free programs. Proving each refinement; identifying errors as they are made. Program development to meet specifications; modifications that preserve correctness. Useful for all programming; essential for programs that lives depend on. Basic logic, formal specifications, refinement. Conditional, sequential, parallel, interaction, probabilistic programming, and functional programming.

**Prerequisite: CSC236H1/ CSC240H1/ MAT309H1; Recommended Preparation: CSC463H1**

**CSC2107HF/488H1 Compilers and Interpreters**

N/A

**CSC2125HF Topics in Software Engineering : Blockchain Technology & Engineering**

This course will be half lecture and half reading group. We will cover techniques and software engineering challenges behind blockchain systems. Through the study of this course, students would learn the overall architecture of blockchain systems. The course would also dive into important sub-topics such as Proof-of-Work, consensus protocol, and smart contract VMs. We expect students who take this course have basic understanding of system engineering and system programming experience with C/C++/Go/Rust. Prior experience in distributed system is strongly preferred.

**CSC2206H System Modelling and Analysis**

The emphasis of the course is on models for systems with uncertainty. We study the properties of various models and discuss how they can be applied to analyze algorithm and system performance. This course is useful for students interested in the analysis of algorithms and systems with uncertainty that arise in computer systems, artificial intelligence, social networks, online markets etc. Concepts covered include Poisson, renewal, and Markov processes. **Solid knowledge of basic probability theory.**

**CSC2208H/496H1 Advanced Operating Systems**

Principles of operating systems. The operating system as a control program and a resource allocator. Comparison of OS types: monolithic, microkernel, etc., as well as virtualization methods. Covers advanced topics in synchronization, mutual exclusion, and deadlock. Additional topics include performance analysis, process scheduling in a multiprocessor context, advanced memory management, file systems design and crash recovery, and protection. Fault tolerance will also be covered in the context of a distributed system. **Requires advanced C systems programming skills and strong intro OS knowledge.**

**CSC2209H/458H1 Computer Networks**

Computer networks with an emphasis on network programming and applications. An overview of networking basics: layering, naming, and addressing, packet switching fundamentals, socket programming, protocols, congestion control, routing, network security, wireless networks, multimedia, web 2.0, software-defined networking, and online social networks.

**Prerequisite: CSC209H1, CSC258H1, CSC263H1/ CSC265H1, STA247H1/ STA255H1/ STA257H1/ ECO227Y1**

**CSC2221H Introduction to Distributed Computing**

This course studies fundamental models and problems in distributed computing with an emphasis on synchronization and fault tolerance. Algorithms and impossibility results will both be considered.

**Prerequisite: A course in algorithm design and analysis.**

**CSC2222H Application of Parallel and Distributed Computing**

This course provides advanced discussions on parallel, distributed, and cloud computing and its applications. It will discuss sources of parallelism and locality in scientific applications, common parallel algorithms used in large-scale simulations, and fundamental performance bottlenecks in scientific codes. The students will learn how to work across the stack of parallel algorithm design, mathematical reformulation, and architecture-specific performance tuning to write scalable and fast code. It is intended to be useful for students actively working with applications that benefit from parallel computing. The students should have enough mathematical skills to understand the problems and algorithmic solutions presented. They are also expected to have taken a parallel computing course and be familiar with parallel programming models. A combination of lectures, research presentations, and the course project will expose students to domain-informed parallel algorithm design, performance models, domain-specific parallel code generation, and applications of parallel programming models.

**Prerequisites: CSC336/CSC436 Numerical Methods and CSC 367 Parallel Computing, or equivalent courses.**

**CSC2224H Parallel Computer Architecture and Programming**

The goal of this course is to build a strong understanding of the fundamentals of the architecture of parallel computers and efficient programming for them. We will examine how architectures are designed to exploit and extract different types of parallelism. The focus will be on fundamentals, tradeoffs in parallel architecture design, and cutting-edge research. Architectures studied may include parallel microprocessors, GPUs and FPGAs.

**Prerequisite: This course is not intended to be your first computer architecture course: it is geared toward students who have already had such a course (or some equivalent) as undergraduates. If you have never taken a computer architecture course before (or at least a Computer Organization class), it is still possible to take this course provided that you are willing to spend some additional time catching up on your own. It will also be helpful if you have some familiarity with the features of modern processor architectures (e.g., the memory hierarchy, pipelining, SMT, and vector instructions). If you feel uncertain about whether you are adequately prepared to take this class, please discuss this with the instructor**

**CSC2226H Topics in Verification : Program Synthesis**

We assume foundational knowledge of program verification and synthesis, as introduced in other introductory graduate courses. The focus of this course is to explore the latest topics in program synthesis (and verification by association) to bring students up to date with the state of the art research in this area. Recommended preparation: Good background in Logic, Automata Theory, Algorithms and Data structures, some familiarity with program analysis (for example a course on Compilers), Having basic understanding of what program proofs are. **Ideally, CSC410 or equivalent.**

**CSC2227H Topics in the Design and Implementation of Operating Systems**

Seminar and discussion of a number of topics in operating system design and implementation, based on a collection of papers as class reading. Emphasis on multiprocessor and distributed operating systems. Case studies of contemporary operating systems. An independent course project and an oral student presentation is required. **Prerequisites: introductory Operating Systems (CSC369 or equivalent), CSC2208/CSC469 recommended.**

**CSC2228H Topics in Mobile, Pervasive and Cloud Computing**

The emergence of mobile and cloud computing are two of the most important technological developments of the last few years. By shifting the hardware and staffing costs of managing computational infrastructure to third parties such as Google, Microsoft, or Amazon, cloud computing has made it possible for small organizations and individuals to deploy world-scale services; all they need to pay is the marginal cost of actual resource usage. At the same time, the deployment of 4G networks, the rapid adoption of feature-rich smartphones, and the growing integration of computation into consumer products such as cars and home appliances, have brought mobile and pervasive computing into the mainstream. This course will provide an overview of research areas in these two fields and their intersection.

**Prerequisite: Introductory Operating Systems (CSC369 or equivalent) and Computer Networks (CSC458 or equivalent)**

**CSC2233H Topics in Storage Systems**

Over 90% of all new information produced in the world is being stored on digital storage systems, including the crown jewels of enterprises (ranging from Microsofts’s source code to the sales database of every e-commerce site) and personal records, such as photos, correspondence, and movies. Storage systems often dominate the performance of a system, and their components’ inner workings require amazing feats of engineering. The success of many young and cool companies, such as Google, Facebook and Youtube, is derived from their ability to efficiently and reliably store large amounts of data. The exponentially growing need for data capacity and access speed is making storage systems one of the fields with the most robust demand for bright people, both in industry and in academia. In this class, you will learn about the latest and greatest in storage systems, studying novel ideas from academia and learning about the best “real-world” systems. You will also perform a cutting-edge mini-research project, where you design, build, and/or evaluate a system.

**CSC2305/466 Numerical Methods for Optimization Problems**

Numerical methods for unconstrained optimization problems, in particular line search methods and trust region methods. Topics include steepest descent, Newton’s method, quasi-Newton methods, conjugate gradient methods and techniques for large problems. This course will normally be offered every other year. **Prerequisite: CSC336H1, MAT221H1/ MAT223H1/ MAT240H1, MAT235Y1/ MAT237Y1/ MAT257Y1**

**CSC2321H Matrix Calculations**

Review the basic concepts in the numerical solution of linear systems, introduce state-of-the-art developments in numerical linear algebra/PDEs, develop and study efficient linear solvers, implement the above solvers as software, use existing software (routines and higher level environments), study the performance of methods and software. Topics among basic iterative methods, acceleration, perconditioning, multigrid, domain decomposition, fast Fourier transform linear solvers.

P**rerequisite: calculus, numerical linear algebra, interpolation, some knowledge of PDEs, proficiency in a programming language, preferably MATLAB or FORTRAN**

**CSC2404H/438H1 Computability and Logic**

Computable functions, Church’s thesis, unsolvable problems, recursively enumerable sets. Predicate calculus, including the completeness, compactness, and Lowenheim-Skolem theorems. Formal theories and the Gödel Incompleteness Theorem. Ordinarily offered in years alternating with CSC448H1.

**Prerequisite: (CSC363H1/ CSC463H1)/CSC365H1/ CSC373H1/ CSC375H1/ MAT247H1**

**CSC2412HF Algorithms for Private Data Analysis**

The practical applicability of data analysis to sciences and decision-making is often limited by individual privacy concerns. Some of the most interesting data sets - medical studies, genetic data, movie reviews, search logs, social network connections - contain sensitive information about people represented in the data set. If individuals do not think their privacy concerns are addressed, they may refuse to participate in data collection, or not answer surveys truthfully. These issues limit the validity of the data analysis results, and make balancing privacy and usefulness essential to many applications of big data. In this course we will study privacy in data analysis from a rigorous theoretical perspective. We will focus on Differential Privacy: a recent approach to achieving strong provable privacy guarantees in the analysis of sensitive data. Informally, a data analysis algorithm is differentially private if changing the data of a single individual changes the output distribution of the algorithm only slightly. This guarantee ensures that the privacy risk to any individual increases only slightly by participating in data collection. Our focus will be on the design of efficient differentially private algorithms. In the process, we will learn about fascinating connections between differential privacy and game theory, learning theory, and geometry.

While we focus on the algorithms, there will be proofs. It is important to prove formally that an algorithm provides privacy: this is not something that can be verified experimentally. Most proofs are simple, but the course does require mathematical maturity and a background in probability theory, and the design and analysis of algorithms.

**CSC2415H Advanced Topics in the Theory of Distributed Computing**

Advanced course on distributed computing, aimed at students who wish to explore in depth a topic in this area. It will be run largely as a research seminar course. Each student will pick a topic from a list suggested by the instructors or a topic of the student’s own choosing approved by the instructors. The student will then study the relevant literature,and will eventually present the subject to the class in one or more 2-3 hour sessions. A course in theory of distributed computing, such as CSC2221. People with good backgrounds in complexity theory are welcome to take the course, provided they are willing to do some background reading.

**CSC2421HF Topics in Algorithms - Online and other Myopic Algorithms**

In a seminal 1985 paper, Sleator and Tarjan argued for a worst case analysis of online algorithms such as paging and list accessing. This became known as competitive analysis. Not surprisingly, such worst analysis was already present in earlier works by Graham and Yao for scheduling problems. Since these earlier works, there has been a continuing and growing interest in online algorithms, in terms of applications (eg online advertising and other auctions, graph colouring and matching, maximum satisfiability, etc.), alternative online models (eg small space streaming, sequential and parallel streams), extensions to the basic online model (revocable decisions, greedy-like algorithms) and alternatives to the competitive analysis framework (eg, a return to stochastic input models). This course will be based on a textbook that is now being written. This topic is part of a recent interest within theoretical computer science that emphasizes "conceptually simple algorithms". A preliminary table of contents is available.

**CSC2451H Quantum Computing, Foundations to Frontier**

This course will give a broad overview of the field of quantum computing. We will start with a crash course in the fundamentals of quantum computing (qubits, quantum circuits, basic quantum algorithms such as Grover’s search algorithm and Shor’s factoring algorithm). Armed with the basics, we will then explore topics at the frontier of quantum computing: quantum complexity theory, device-independent quantum cryptography, quantum machine learning algorithms, and quantum supremacy. Students will make project presentations at the end of the course. This is a theoretical course that requires mathematical maturity and a strong background in linear algebra and probability theory. Familiarity with analysis of algorithms and complexity theory is a major plus but not required. No physics background will be assumed.

**CSC2501H/485 Computational Linguistics**

Computational linguistics and the processing of language by computer. Topics include: context-free grammars; chart parsing, statistical parsing; semantics and semantic interpretation; ambiguity resolution techniques; reference resolution. Emphasis on statistical learning methods for lexical, syntactic, and semantic knowledge.

**Prerequisite: STA247H1/ STA255H1/ STA257H1 or familiarity with basic probability theory, including Bayes’s theorem; CSC207H1/ CSC209H1 or proficiency in Python and software development.**

**CSC2504H/418 Computer Graphics**

Identification and characterization of the objects manipulated in computer graphics, the operations possible on these objects, efficient algorithms to perform these operations, and interfaces to transform one type of object to another. Display devices, display data structures and procedures, graphical input, object modelling, transformations, illumination models, primary and secondary light effects; graphics packages and systems. Students, individually or in teams, implement graphical algorithms or entire graphics systems.

**Prerequisite: CSC336H1/ CSC350H1/ CSC351H1/ CSC373H1, (MAT135H1, MAT136H1)/MAT137Y1/ MAT157Y1, CSC209H1/ proficiency in C or C++; Prerequisite for Engineering students only: ECE345H1 or ECE352H1**

**CSC2506HS/412H1 Probabilistic Learning and Reasoning**

Course Description An introduction to probability as a means of representing and reasoning with uncertain knowledge. Qualitative and quantitative specification of probability distributions using probabilistic graphical models. Algorithms for inference and probabilistic reasoning with graphical models. Statistical approaches and algorithms for learning probability models from empirical data. Applications of these models in artificial intelligence and machine learning.

**Pre-requisites: CSC411H1/STA314H1**

**CSC2508H Advanced Database Management Systems**

Over the last few years a plethora of new data management systems and architectures have become mainstream. Such systems have vastly diverse application focus, architectures and differ significantly from traditional transactional database management systems and data warehouses. The goal of this course is to explore these systems, broadly characterized as noSQL/newSQL systems and understand their strengths and limitations. We will also explore new trends in data management fueled by application needs, such as support for advanced analytics, stream processing systems and main memory data processing.

**CSC2511H/401 Natural Language Computing**

Introduction to techniques involving natural language and speech in applications such as information retrieval, extraction, and filtering; intelligent Web searching; spelling and grammar checking; speech recognition and synthesis; and multi-lingual systems including machine translation. N-grams, POS-tagging, semantic distance metrics, indexing, on-line lexicons and thesauri, markup languages, collections of on-line documents, corpus analysis. PERL and other software. **Prerequisite: CSC207H1/ CSC209H1; STA247H1/ STA255H1/ STA257H1**

**CSC2512H Advanced Propositional Reasoning**

Many problems in Computer Science can be represented as instances of propositional reasoning problems. For example any problem in NP can be represented as a SAT problem (Boolean Satisfiability) since SAT is complete for the class NP. For many problems, their representation in SAT is very natural, and more importantly, can often be effectively solved by a general purpose SAT solver. This means that instead of developing and implementing a problem specific algorithm, we can often solve our problems by the much simpler device of encoding them into SAT and then using a SAT solver. Surprisingly, the SAT solver can often outperform problem specific algorithms. In this course you will be introduced to the basic algorithms that are used to SAT and other types of propositional reasoning problems. In addition, we will discuss various encoding techniques for translating various problems into SAT–the encoding used can have a dramatic effect on performance. Besides problems that can be encoded into SAT we often need to deal problems that require some form of optimization, or some form of quantification (e.g., to reason about two person games). Such problems can be encoded as MAXSAT problems, or QBF problems. We will also cover algorithms for solving these kinds of propositional problems. The aim of the course is to provide you with the background needed to exploit modern SAT–MAXSAT–QBF solvers in your own work. Knowledge of the basics of propositional logic; be familiar and comfortable with programming, data structures and algorithms.

**CSC2514H/428 Human Computer Interaction**

Understanding human behaviour as it applies to user interfaces: work activity analysis, observational techniques, questionnaire administration, and unobtrusive measures. Operating parameters of the human cognitive system, task analysis and cognitive modelling techniques and their application to designing interfaces. Interface representations and prototyping tools. Cognitive walkthroughs, usability studies and verbal protocol analysis. Case studies of specific user interfaces.

**Prerequisite: CSC318H1; STA247H1/ STA255H1/ STA257H1; CSC209H1/ proficiency C++ or Java Recommended Preparation: A course in PSY; CSC209H1; (STA248H1/ STA250H1/ STA261H1)/(PSY201H1)**

**CSC2515H Introduction to Machine Learning**

An introduction to methods for automated learning of relationships on the basis of empirical data. Classification and regression using nearest neighbour methods, decision trees, linear models, and neural networks. Clustering algorithms. Problems of overfitting and of assessing accuracy. Problems with handling large databases. Emphasis on statistical approaches.

**Prerequisite: CSC263H1/ CSC265H1, MAT(135H1,136H1)/MAT137Y1/ MAT137Y1/ MAT157Y1, STA247H1/ STA255H1/ STA257H1**

**CSC2516H/413H Neural Networks and Deep Learning**

The goal of this course is to provide in-depth understanding of neural networks and deep learning, ideas which form the state-of-the-art in a variety of AI applications. It is meant to be a second course in machine learning, for students who have already taken CSC2515, which presents a broader overview of machine learning. The first third of the course presents the fundamental concepts and algorithms behind neural networks, including back propagation, automatic differentiation, regularization, and distributed representations. The middle third covers two kinds of architectures widely used in practical applications: convolutional networks and recurrent neural networks. The final third covers unsupervised learning and reinforcement learning. Additional topics include parallelism and adversarial robustness.

**Prerequisites: Since the course draws heavily upon linear algebra, multivariate calculus, and probability theory, students should have background in these subjects: CSC2515, MAT235Y1/MAT237Y1/MAT257Y1**

**CSC2517H Discrete Models of Sentence Structure**

In this year’s installment, we’ll focus on graphical approaches to derivability in natural language syntax, including categorial proof nets, Petri nets and KLMST decompositionsAn introduction to the principal mathematical models of sentence structure used in computational linguistics today. Topics include: string matching and similarity, string and tree transducers, extended context-free formalisms, tree-adjoining grammar, substructural logics, discourse representation calculi, typed feature structures, and topological models. Parsing, algorithmic complexity, algebraic properties, and formal equivalence will be discussed. A basic knowledge of logic, formal language theory and graph theory is required. Some familiarity with syntactic theory will be helpful, but is not assumed.

**CSC2521H Topics in Computer Graphics : Seminar on Geometry and Animation**

This course will take a deep look at a broad collection of seminal papers in computer graphics, focusing on topics in geometry processing and computer animation. The course is structured around weekly paper readings. All students will read the same paper each week, but each student will have a unique, rotating role. This role defines the lens through which they read the paper and determines what they prepare for the group in-class discussion. Students will obtain a thorough understanding of the chosen papers and will develop their paper reading, literature review and prototyping skills. Prior exposure to computer graphics or geometry processing is suggested but not required. Students should have taken courses in Linear Algebra and Computer Programming.

**CSC2524H Topics in Interactive Computing : Graphics, Interaction and Perception in AR/VR**

This course will explore aspects of perception, graphics, interaction and creation in the immersive setting of augmented and virtual reality AR/VR. This course is designed to serve three purposes:

To teach students the fundamental principles behind technology, perception and navigation in AR and VR.

To allow students to perform perception and interaction experiments and build creative prototypes using 3D scanners, motion capture and AR/VR devices.

To read, understand and present state of the art research papers in AR/VR.

As a graduate course in the Department of Computer Science, a solid background in computer science is expected. A background in computer graphics, HCI and an artistic sense are useful. The course format is 12 weeks of one meeting a week. Roughly 1/2 the meetings will be lectures and the rest will be tutorials, demos and paper presentations by students. The students will be graded on their technical and creative contribution to an AR/VR project (done in groups of 3 or less) that will account for 40% of the grade. A project report will account for 10% of the mark (many of these may turn into publications). A small immersive experinece or perception experiment (groups of 3 or less) will be worth 25%. The remaining 25% will be based on the presentation of a research paper in class.

**CSC2527H/454 Business of Software**

The software and internet industries; principles of operation for successful software enterprises; innovation and entrepreneurship; software business definition and planning; business models, market and product planning; product development, marketing, sales, and support; financial management and financing of high-technology ventures; management, leadership, and partnerships. Students will all write business plans in teams.

http://www.dcsil.ca/incubator

**This course requires instructor approval - please refer to the URL for the course description and enrolment information.**

**CSC2532H Statistical Learning Theory**

This course covers several topics in machine learning theory and optimization. Required background for this course includes probability, linear algebra, and multivariate calculus. Minor coding will be required, i.e., the course will provide guidance for verifying the mathematical concepts using numerical experiments/simulations.

In this course, we will try to answer questions like

What is the convergence rate of your algorithm?

How much data do you need to get good prediction results?

What is the performance of your algorithm on test data?

Topics include:

Asymptotic statistics

Uniform Convergence

Generalization

Kernel Methods

Online Learning

Sampling and optimization

**CSC2536H Topics in Computer Science and Education**

This will be a seminar style course, covering a combination of seminal work and recent advances in computer science education and related fields, drawing on methods and theories from Computer Science Education, Learning Sciences, Human-Computer Interaction, and Educational Technology. Students will conduct weekly readings, with student led presentations and discussions each week. A final project will make up a large part of the grade, while student presentation skills and participation in class and in readings will also be emphasized. Students will learn how to design and evaluate interactive learning systems and educational technologies, and how to critically examine and evaluate both qualitative and quantitative research studies in CS Education.

**CSC2537H INFOVIS (Information Visualization)**

This course will study techniques and algorithms for creating effective visualizations based on principles from graphic design, visual art, perceptual psychology, and cognitive science. The course is targeted both towards students interested in using visualization in their own work, as well as students interested in building better visualization tools and systems. Students will conduct reading of scientific research papers, and will lead a presentation and discussions for at least one article during the term. A final project will make‐up most of the grade, while student presentation skills and in readings will also be emphasized.

Learning outcomes

This course is designed to provide students with the foundations necessary for understanding and extending the current state of the art in data visualization. By the end of the course, students will have gained:

An understanding of the key techniques and theories used in visualization, including data models, graphical perception, and techniques for visual encoding and interaction,

Exposure to a number of common data domains and corresponding analysis tasks, including multivariate data, networks, times-series and text,

Practical experience building and evaluating visualization systems,

The ability to read and discuss research papers from the visualization literature.

Recommended but not required: CSC318/CSC428

**CSC2541H Topics in Machine Learning: AI and Ethics: Mathematical Foundations and Algorithms**

This is an introductory-level graduate course on social and ethical aspects of machine learning. Machine learning systems are becoming increasingly important in many domains where they are used to make predictions and decisions that often have life-altering consequences. Examples include algorithms for criminal sentencing, health insurance decisions, and car insurance rates. As these systems are becoming ubiquitous, it is important to address issues of privacy, fairness and accountability. We will cover some work on explainability and computational privacy. Most of the course will focus on algorithmic fairness. We will discuss many facets of the problem, including the multiple and often conflicting reasons for bias, and approaches to the problem from different angles (legal, philosophical, economic, computational), and current challenges in the area. The focus of this course will be on foundations, which include mathematical models, proofs, and algorithms.

**Pre-requisites: some background in machine learning concepts, theory, and algorithms will be assumed. Examples could include a course on complexity theory and an introductory machine learning course.**

**CSC2541H Topics in Machine Learning : Machine Learning for Health**

This course will give a broad overview of machine learning for health. We begin with an overview of what makes healthcare unique, and then explore machine learning methods for clinical and healthcare applications through recent papers. We discuss the recent successes of graphical models, deep learning, time series analysis, and transfer learning in the context of health. We also broadly cover concepts of learning, algorithmic fairness, interpretability, and causality. We emphasize the importance of collaboration between technical and non-technical researchers, and consider the implications of machine learning in healthcare governance and policy. Students will choose and complete a course project, and make project presentations at the end of the course. This course requires a strong background in linear algebra and probability theory, or strong grades in the machine learning course. Familiarity with programming and software engineering is beneficial, but not required.

**Prerequisites: linear algebra and probability theory, or strong grades in the machine learning course**

**CSC2547HF Current Algorithms and Techniques in Machine Learning : Learning to Search**

In planning, search, active learning, and approximate inference, we usually face many closely related problems. We can often generalize from the problems solved so far, or even combine existing solutions. This course will survey foundational ideas, recent work, and applications in this area. Specifically, it will cover self-improving tree-search methods such as alphazero, meta-learning, hypernetworks, self-tuning gradient estimators, amortized inference, self-improving theorem provers, and planning in POMDPs. Evaluation will be based mainly on a project involving original research by the students. Students should already be familiar with the basics of machine learning such as linear algebra, optimization, and probability.

**CSC2547H Current Machine Learning: Machine Learning for Vision as Inverse Graphics**

N/A

**CSC2549HF Physics Based Animation**

This course is designed to introduce students to the field of physics-based animation by exposing them to the underlying mathematical and algorithmic techniques required to understand and develop efficient numerical simulations of physical phenomena such as rigid bodies, deformable bodies and fluids. Students should have a strong background in Linear Algebra and Multivariate Calculus. Familiarity with Convex Optimization and Differential Geometry is a plus, but not required.

In physics-based animation we will learn how to develop algorithms that produce visually compelling representations of physical systems. We will learn the underlying continuous mathematics describing the motion of physical objects, explore how to discretize them and how to solve the resulting discrete equations quickly and robustly.

Topics covered include rigid body simulation, elasticity simulation, cloth simulation, collision detection and resolution and fluid simulation. Along the way, we will explore the underlying mathematics of ordinary differential equations, discrete time integration, finite element methods and more.

**CSC2552H Topics in Computational Social Science : AI, Data and Society**

Computational social science, the emerging discipline in which computational tools and thinking are applied to social science questions, is one of the most rapidly growing interdisciplinary fields in computer science. In this course, the most recent developments in this quickly-changing field will be discussed. We will cover information diffusion, big data ethics and fairness, inherent unpredictability of cultural and computational phenomena,

incentive design for online systems, and other topics.

**Prerequisites/Recommended preparation: A senior course on statistics, a senior course on algorithms.**

**CSC2556H Algorithms for Collective Decision Making**

This course introduces students to the interdisciplinary field of computational social choice. Social choice theory studies collective decision making by groups of individuals. The central problem in the field is to aggregate heterogeneous preferences or opinions of individuals to arrive at consensus collective decisions. This includes fair division dilemmas such as a group of heirs fairly dividing an estate, voting dilemmas such as a group of friends selecting a restaurant for lunch, or matching dilemmas such as assigning students to schools. This field is gaining increasing practical relevance, and its algorithms are deployed in the real world, helping groups of people make decisions in their daily life. The course will cover the entire spectrum from theory to practice, and touch upon ongoing cutting-edge research.

**Prerequisites: mathematical maturity; probability theory; linear algebra**

**CSC2558H Topics in Multidisciplinary HCI : Designing Intelligent Self-Improving Systems Through Human Computation, Randomized A/B Experiments and Statistical Machine Learning**

This course covers topics in HCI that draw on methods and theories from other subfields of computer science and other scientific disciplines, in developing computational principles for designing user-facing systems. Students will learn how to design experiments to investigate the design of technology by drawing on methodology and theories from social and behavioral sciences, as well as to adapt user technologies using models and algorithms from fields such as statistics, machine learning, and artificial intelligence.

**CSC2600H/491 Topics in Computer Science : Capstone**

This half-course gives students experience solving a substantial problem that may span several areas of Computer Science. Students will define the scope of the problem, develop a solution plan, produce a working implementation, and present their work using written, oral, and (if suitable) video reports. Class time will focus on the project, but may include some lectures. The class will be small and highly interactive. Project themes change each year. Contact the Computer Science Undergraduate Office for information about this year’s topic themes, required preparation, and course enrolment procedures. **Not eligible for CR/NCR option. This course requires permission from the instructor.**

**CSC2611H Computational Models of Semantic Change**

Words are fundamental components of human language, but their meanings tend to change over time, e.g., face (‘body part’ -> ‘facial expression’), gay (‘happy’-> ‘homosexual’), mouse (‘rodent’ -> ‘device’). Changes like these present challenges for computers to learn accurate representations of word meanings—a task that is crucial to natural language systems. This course explores data-driven computational approaches to word meaning representation and semantic change. Topics include latent models of word meaning (e.g., LSA, word2vec), corpus-based detection of semantic change, probabilistic diachronic models of word meaning, and cognitive mechanisms of word sense extension (e.g., chaining, metaphor). The course involves a strong hands-on component that focuses on large-scale text analyses and seminar-style presentations.

**CSC2612H Computing and Global Development**

This course will introduce students to the challenges and opportunities in computational initiatives to address problems in international development. They will learn the Sustainable Development Goals (SDGs) and the history of computational initiatives to achieve them. The students will have weekly reading assignments and in-class design/discussion sessions. They will be asked to submit one midterm paper at the middle of the semester. The students will also submit a project at the end of the course. The final grade will be based on the reading responses, in-class participation in the discussions, midterm paper, and final project.

**Recommended preparation: CSC373H1**

**CSC2701H Communication for Computer Scientists**

Computer science professionals need to communicate their ideas clearly and persuasively in both spoken and written formats. They also need to listen well to team ideas. This interactive, workshop-based course focuses on interpersonal communication, public speaking, and clear, correct writing. Students focus on building communication confidence leading to better team participation and thoughtful leadership. For greater self-awareness and speaking improvement, students watch and comment on their own digitally recorded speeches.

**CSC2702H Technical Entrepreneurship**

This course introduces fundamental concepts from business and management that are relevant to technical entrepreneurs who are starting their own business or bringing new ideas and products to fruition within existing ones. The course is structured around case studies and discussion with leading practitioners from industry. The specific topics covered will vary from offering to offering, but will usually include marketing, product planning, short term and long term business plans, intellectual property rights, product liability, project management, human resource management, and basic accounting principles.

**CSC2720 Systems Thinking for Global Problems**

This course is unlike any other graduate course you have taken. You will play games, solve puzzles, and tell stories. Each activity will create a system around you, with its own dynamics. Sometimes you will try to beat the system and discover you cannot. Other times you will discover you can change a system by changing your perspective of it. In the process, you will discover how complex patterns of behaviour can arise from simple structures and simple rules. You will draw on such insights to develop a deeper understanding of how the world works. You will start to see the systems around you in a whole new light, and you will develop a new mental toolkit for analyzing complex global issues, modeling their structure and behaviour, and understanding how and why change happens.

Along the way, you will read about the theory and practice of systems thinking, trace the history of the key ideas, and discover how they have been applied. You will explore how systems thinking provides new ways of studying the relationships between the most important global challenges of the twenty-first century, including globalization, climate change, conflict, democracy, energy, health & wellbeing, and food security.

Key topics will include:

General Systems Theory, developed by Bertalanffy for understanding biological systems;

Cybernetics: the study of feedback and control in living organisms, machines, and organizations;

Systems Dynamics approaches for modelling and analyzing non-linear feedback mechanisms in complex systems;

Complexity science and complex adaptive systems;

The role of computational modelling and simulation as a central tool for understanding systems

Philosophical roots of systems thinking as a counterpoint to the reductionism used widely across the natural sciences;

Emergent concepts from systems thinking, such as limits to growth, planetary boundaries, tipping points, sustainability, resilience, and chaos;

Soft Systems Methodology and Critical System Theory for engaging multiple stakeholders in processes of change;

Use of systems thinking to explore competing perspectives, trans-disciplinary synthesis, and modeling of global dynamics.