SluitenHelpPrint
Switch to English
Cursus: WISM454
WISM454
Laboratory Class Scientific Computation
Cursus informatie
CursuscodeWISM454
Studiepunten (EC)7,5
Cursusdoelen
This course is organised by Jan-Willem Buurlage (CWI).

Learning goals:
After completion of this course, the student will have gained experience on the entire trajectory of theory, implementation, experimentation, and reporting. The student will in particular be familiar with the basic concepts  of Probability Theory (and Statistics), (LC)random number generators (RNGs), Monte-Carlo methods, Genetic Algorithms (GAs), and some local search methods, obtain insight on how to judge on quality of RNGs and the applicability of the other methods, is able to identify optimisation problems for which  GAs are most suitable, and can tune the parameters in these methods to the optimisation problem at hand in order to enhance efficiency.
Just as important is that the student has gained in software engineering skills, being able to implement advanced algorithms in C or C++, to work with object-oriented classes, and to correctly apply concepts such as inheritance and polymorphism. The student will be able to easily absorb more advanced design patterns than those used during the course, is able to use external libraries written by third parties, and will know how to write accessible code.
The last skill obtained is added experience on writing coherent and concise reports. As the two written reports are the main method of grading, these are expected to be of high quality and effort will be made to improve compared to the first report.
A description of the way in which the written assignments and reports represent the required learning goals, as percentages.
Inhoud

Content: This course is part of the Scientific Computing track of the Mathematical Sciences master's programme.
There are two major subjects that are treated in the course:
  • (pseudo)random number generation together with the application of (pseudo)random numbers in Monte Carlo integration for high dimensional integrals
  •  Genetic Algorithms for determining a(n approximate) minimiser of a hard NP-complete) optimisation problem (as the traveling salesman problem, minimum-energy charge configuration problem, knapsack problem, etc.).
A review is given of the basic concepts of Probability Theory and Statistics as required for a proper treatment of the course subjects.
The subjects of the course are related: Genetic Algorithms, as well as Monte Carlo rely on random numbers, as is the case for many other algorithms for scientific computing. It is crucial that sequences of these kind of numbers (or of numbers that could pass for being random) are highly efficiently being generated. To achieve this, all resources of a computer have to be exploited. This requires coding in a programming language as C++ that allows to control the use of memory and can exploit the possibilities of the central process unit (CPU). Actually, the primary goal of the course is to teach students to develop efficient computer programs in an object oriented language as C++ for solving large scale Scientific Computing problems.
Achieving high efficiency does not only depend on the efficiency of the coding but also on the choice of the solution methods and parameters for these: they have to be tuned to the Scientific Computing problem at hand. This requires insight in the mathematical background of both the solution method and the Scientific Computing problem.
In practice, a computational scientist works in a team  which makes reporting extra important. The students have to write two reports on the results that they obtain with their codes.

Organisation: The course consists of weekly, four hour long sessions of which the first hour is used by the teacher to discuss the theory from the lecture notes and the remaining time is used by the students to work on their assignments and reports.
For both subjects as mentioned above there is an existing C++ code base, from which almost all essential parts are missing, that the students need to explore and complete. This exploration is guided by assignments from the lecture notes and course website, of which a number have to be handed in for grading. After the students have completed the assignments and turned the code base into a working program, they need to investigate the theoretical results from the lecture notes by performing experiments with the programs they have written, which results in a report. Two such reports have to be written (in English and formatted in LaTeX): one concerning (pseudo)random number generation and Monte Carlo, and one concerning Genetic Algorithms. For the final report the students choose either the traveling salesman problem, the minimum-energy charge configuration, or the knapsack problem to test the effectiveness of the Genetic Algorithm software they have developed.

Examination: The final grade is based on two reports and a few hand-in assignments. Each report makes up 40% of the student's grade. Together, the two reports account for 80% of the student's grade. The remaining 20% is determined by the average grade of the hand-in assignments.

Note: The student is not allowed to use (partial) texts in their reports written by others and use them within their own reports without proper quotation and citation. This includes slightly adapting the source texts.
 
Prerequisites: Basic knowledge of programming in an imperative language (C, C++, Java); also knowledge of numerical methods (particularly numerical errors, basic integration techniques, and error estimates).
  two reports
80%
hand in assignment
20%
is familiar with the basic concepts  of Probability Theory (and Statistics), (LC)random number generators (RNGs), Monte-Carlo methods, Genetic Algorithms (GAs), and some local search methods x x
is able to obtain insight on how to judge on quality of RNGs and the applicability of the other methods x x
is able to implement advanced algorithms in C or C++, to work with object-oriented classes, and to correctly apply concepts such as inheritance and polymorphism x x
is able to use external libraries written by third parties, and will know how to write accessible code x x
is able to write a coherent and concise reports x  
SluitenHelpPrint
Switch to English