## Theme: Computation, Data Science, and Optimization

Berkeley emphasizes the science of computer science, which means much more than just computer programming. It includes the theory of computation, the design and analysis of algorithms, the architecture and logic design of computers, programming languages, compilers, operating systems, scientific computation, computer graphics, databases, artificial intelligence, optimization, and natural language processing.

**Computation, Data Science, and Optimization Microcourses**

#### E238E: Robust Optimization and Applications

#### E236A: Applied Data Science for Engineers

This mini-course aims at providing basics of Data Science to students and professionals who need to work with and analyze a large volume of data. The base programming language is Matlab, but techniques taught, and topics covered can be coded in any programming language. The course is aimed at students and audience in engineering and science major, and therefore examples, assignments and the course project are from real life scenarios and engineering problems. The objective is to provide the audience with a set of important tools that are necessary in analyzing large data. No specific background knowledge is needed for this course. Specifically, this course is designed for those with no or little programming experience and background in data science.

#### E238B: Optimization Theory and Practice

Optimization theory concerns the selection of a best option from a set of available options. Formulating an optimization problem involves describing the feasible set as well as prescribing a notion of “best”. This setup, although simple, is one of the most important and widespread ideas in engineering and the sciences. This course will begin by demonstrating the use of optimization theory in many contexts. The student will learn the standard categorization of optimization problems, and the mathematical and numerical tools available in each category. The second session of the course will delve into the class of tractable “convex” problems. We will learn about special cases, applications in the real world, and available solution techniques. In the third session we will review more advanced topics: optimization theory for steering dynamical systems (optimal control), training of data-based models with optimization (machine learning), and solving non-convex problems with genetic algorithms.

#### E235A: Python for Engineers

In recent years Python has emerged as an indispensable programming language for engineers, both practicing and academic, as well as data scientists, web developers, and many others. However the language is vast and includes many features that are not immediately relevant to most engineers. The goal of this course is to help students to quickly gain a foothold with the parts of the language that they are most likely to use. We will begin with a high-level description of Python and how it differs (both in syntax and in philosophy) from other popular programming languages. We will learn about Python’s extensive offering of libraries, starting with the standard library, and including Numpy and Pandas. We will set up our programming environment with Anaconda, Jupyter, and Spyder. We will then delve into the basic constructs of the language (data types, program flow, etc). The second session will cover code organization and object-oriented programming. In the third session we will begin using numerical libraries such as Numpy and Pandas to solve more advanced problems. The course will be suffused with demonstrations of the concepts, and sample visualizations created with Matplotlib.

#### E237B: Hands-on Deep Learning

Deep learning has become an unprecedented and universally powerful tool with applications to a plethora of application domains with problems ranging from vision, speech, natural language processing, robotics, and several other areas. This course will provide select important advances in deep learning. We will particularly focus on a hands-on approach where students will learn techniques and immediately try them out in class to construct their own deep networks. This course will introduce students to topics such as multi-layer perceptrons (MLPs), convolutional neural networks (CNNs), recurrent neural networks (RNNs), and long short-term memory (LSTMs). We will see how each of these networks differ and how they are suited for specific problems. This short course will take students through every step of the process, including:

― The use of python and keras to quickly construct deep networks programmatically.

― Various topics in deep learning such as gradient-descent based optimization, regularization and loss functions.

― Dense Networks, CNNs, RNNs, LSTMs.

― Case study: Digit classification using MNIST dataset using dense networks, CNNs, RNNs and LSTMs.

#### E238D: Optimization, Control and Artificial Intelligence for Smart Grids and Energy Systems

Power systems around the world are being modernized to address environmental concerns, reduce costs, and guarantee access to electricity all the time. Four main criteria for this upgrade are efficiency, reliability, resiliency, and sustainability. Recent advances in various technologies are the key enablers for this modernization. Nevertheless, such physical systems are becoming overwhelmingly large-scale and stochastic with highly complex dynamics, coupled with millions of human interactions. The operation of these systems needs disruptive changes in data processing mechanisms (such as learning), in real-time decision-making processes (such as optimization and control), in electricity markets, and in policies and regulations. This course provides a fundamental understanding of the operation of power system and discusses the pathway to the modernization of power grids. In particular, the role of optimization, control and machine learning in future energy systems will be discussed thoroughly.

#### E236B: Data Science and Machine Learning Fundamentals

The Data Science and Machine Learning Fundamentals course provides an introduction to machine learning in the context of data science. By the end of the course, students will know how to clean, visualize, and model real world datasets using basic machine learning techniques. The course assumes a familiarity with the Python programming language.

#### E232: Fundamental Data Structures

In this course, Fundamental Data Structures, students will learn about the foundational data structures used by almost all programming languages. Rather than simply presenting these data structures as fait accompli, we will start from scratch, working together to develop the beautiful and important ideas that result. The course assumes familiarity with the Java Programming language, which is covered in the microcourse “Introduction to Java and Software Engineering.”

#### E234: Introduction to Java and Software Engineering

The Introduction to Java and Software Engineering course provides important principles and techniques that you can use to minimize overall development and maintenance time when writing computer programs. To that end, we introduce the Java programming language, a widely used programming language that supports these best practices, though these practices can be applied in other languages as well. The course assumes familiarity with at least one programming language, not necessarily Java.

#### E237A: An Introduction to the Basics of Machine Learning

This course will introduce linear algebra, and cover some fundamental algorithms in machine learning including least squares, orthogonal matching pursuit and ridge regression. We will talk about the concepts of validation and testing. This is not intended to be an advanced machine learning course, but more a mathematical course to build out the basic background.

#### E238A: Optimization: Theory and Applications

The course covers topics on optimization theory, numerical algorithms and various applications. It provides a basic understanding of different types of optimization problems, both convex and non-convex, together with major numerical algorithms associated with each class of optimization problems. In particular, the students will learn about the role of convex and conic optimization in machine learning and data science (such as lasso type algorithms) and how to apply these techniques to real-world data for transportation, power systems and many others. The course also discusses the design of efficient algorithms for solving large-scale learning problems.

#### E238C: Applied Optimization

Optimization is a fascinating topic that finds applications across a wide array of disciplines, including finance, energy, data science, physical sciences, public policy, social science, and more. After completing the course, students will have an entirely new perspective on designing systems using mathematical optimization. Specifically, this course provides students with an introduction to mathematical optimization from the point-of-view of data science applications, e.g. mobility, energy, finance. Foundational concepts include optimization formulations, linear programming, quadratic programming, convex optimization, and machine learning. Lectures focus on foundations, while the assignment(s) focus on a practical mini-project.