Teacher: Luca Calderoni (DISI, University of Bologna) Teaching period: October 2019 Total hours: 10 Assessment method: by project
After a brief introduction to probability and hashing aspects, the course will focus on several probabilistic data structures. Each data structure will be widely discussed and exemplified. The detailed probabilistic models will be discussed as well. The aforementioned primitives will be further applied to address several problems in the security and privacy domain. Specifically, the course includes a detailed discussion on the application of probabilistic data structures for network security, privacy by design and anonymity in location-based services.
Teacher: Danilo Pianini (DISI, University of Bologna) Teaching period: September 2019 Total hours: 20 Assessment method: by project
Current scientific research, both in computer science/engineering and in other disciplines, requires software development of some form: novel algorithms, libraries, simulation tools, extensions for existing software products --- all these are examples of software artifacts which are often essential for reproducing the results proposed in scientific papers. At the same time, novel techniques (actually, a mixture of pre-existing techniques) merging development and operations in a single process (DevOps) are increasingly adopted in industry, fostering quicker and more solid development and lower times to marked. This PhD course has the goal of showing methods and tools for realizing, automating, sharing, and maintaining software for scientific research. The course is structured in two theoretical lectures and a lab day, for a total of 20 hours in which the students will acquire knowledge and experiment with the tools proposed.
The initial part of the course will focus on techniques for effective teamwork on a shared code base, using git as enabling tool; showing possible workflows, their mapping with common software development practices, and drawing considerations on the trade-off between workflow robustness and overhead. It will then discuss appropriate hosting services for both open and closed source scientific projects (including LaTeX papers).
The second part of the course will focus on automation and portability of the process that, from source code, leads to the final artifact. It could be a scientific paper, a simulation generating a set of charts, or an executable software tool: the philosophy backing the automation process is unchanged, and encompasses dependency management, building, testing, reporting, and customization of the process. Here, Gradle will be proposed as leading tool, along with a look on Python's setuptools. The third part of the discussion will finalize the discussion on the DevOps process by showing continuous integration and continuous delivery, enabling the student with an entirely automated process producing a deployed artifact for each development action.
Finally, appropriate ways of distributing software will be discussed, including an overview of licensing, which more often than thought prevents companies from using existing scientific tools, boosting both their competitiveness on maket and visibility and relevance of scientific research (and at times ending in collaborations which may attract funding).
Teacher: Silvia Bianconcini (STAT, University of Bologna) Teaching period: June 2019 Total hours: 15 Assessment method: by project
Computational statistics is a branch of mathematical sciences concerned with efficient methods for obtaining numerical solutions to statistically formulated problems. This course will introduce students to a variety of computationally intensive statistical techniques and the role of computation as a tool of discovery. Topics include numerical optimization in statistical inference [expectation-maximization (EM) algorithm, Fisher scoring, etc.], random number generation, Monte Carlo (integration) methods, and bootstrap.
Teacher: Moreno Marzolla (DISI, University of Bologna) Teaching period: January - February 2019 Total hours: 10 Assessment method: by project
Multi- and many-core processors, once found on expensive supercomputers, are now ubiquitous; however, parallel programming paradigms must be used to benefit from the processing power of multi- and many-core processors, but those paradigms are little known to the majority of programmers. In this course we introduce the basic techniques for programming shared-memory multi-core processors (CPUs) and graphics processing units (GPUs). For the former we will use OpenMP/C, i.e., the OpenMP extensions to the C programming language. For the latter, we will introduce programming general-purpose graphics processing units (GPGPUs) using CUDA/C, a proprietary extension of the C programming language developed by NVidia corp. for GPGPU programming.
Teacher: Stefano Mattoccia, Matteo Poggi (DISI, University of Bologna) Teaching period: January - February 2019 Total hours: 20 Assessment method: by project
Inferring dense and accurate depth measurement is of paramount importance for several 3D computer vision applications and recent years have witnessed a paradigm shift towards learning based methods. The course will introduce stereo vision principles and algorithms based on conventional methods. Then, we’ll describe learning-based methods, representing state-of-the-art, for depth estimation from stereo and monocular cameras and strategy to infer confidence estimation.
Teacher: Federico Chesani (DISI, University of Bologna) Teaching period: November - December 2018 Total hours: 10 Assessment method: by project
The attendees will be introduced to the Business Process Management research field, with a very broad introduction to the issues and the problems currently faced within the community. A brief introduction to very common standards like, for example, XES, BPMN, and Declare will be provided, together with their intended semantics (when available). Then, the course will focus on several AI techniques that have recently emerged as possible alternatives for solving classical BPM problems. Finally, a quick introduction will be presented about Rule-based Decision Support Systems, and how such classical methods have been recently exploited to tackle the problem of the run-time monitoring of BPM processes.
Teacher: Samuele Salti (DISI, University of Bologna) Teaching period: June 2018 Total hours: 15 Assessment method: by project
This course presents an introduction to deep learning, a branch of machine learning concerned with the study and application of modern neural networks. Deep learning has tremendously advanced the state of the art in many research fields, such as computer vision or natural language processing, and has become a reference technology in several industries. Indeed, deep learning plays a key role in many recent successes of AI, like DeepMind’s AlphaGo, speech recognition in digital assistants, and self-driving cars. This course aims at providing a solid understanding of the basic building blocks used to design and train the main algorithms in the deep learning toolbox.
Teacher: Stefano Ferretti (DISI, University of Bologna) Teaching period: February - March 2018 Total hours: 10 Assessment method: by project
Bitcoin and novel cryptocurrencies gathered momentum in the last months. More and more investors look with interest at these technologies, while others label them as a dangerous speculative bubble. The truth is that the blockchain, and the alternative implementations of a distributed ledger, represent very interesting technologies, that can be exploited to build novel distributed applications. The underlying building blocks are related to many concepts and research areas of computer science in general. This course will illustrate the main principles and conceptual foundations of the blockchain and the Bitcoin network.
Teacher: Andrea Roli (DISI, University of Bologna) Teaching period: February - March 2018 Total hours: 20 Assessment method: by project
The attendees will be introduced to the corpus of theories and methods that scientists and engineers currently use to understand complex systems. Examples of complex systems are the brain, ant colonies, cities, cells, robot swarms, just to mention some. Despite the individual peculiarities characterising these systems, common properties can be identified among complex systems. Hence, complex systems science aims at providing a unifying view to deal with complexity. In the course, the main principles and methods for modelling, analysing and simulating complex systems will be illustrated. The subjects will be taught by providing both the theoretical foundations and prominent examples in the natural sciences, engineering and technological fields.