Assignments > Assignment 2: Crowd dynamics

In this assignment, you will work in teams to experiment with a specific aspect in crowd dynamics. You can choose from the projects mentioned below. Most of them include extending our Utrecht Crowd Simulation Software (UUCS) (in C++), the corresponding Unity3D plugin (in C#), or both.

This year, you will work in teams of around 4 students, and there will probably be 8 teams in total. If you have any preference for a specific project and/ or team mates, then you can enter your top 3 project list and desired team mates here before/ on Monday 19 November.


Some students may wonder why we are not letting you create your own crowd simulation system. The main reason is that it is incredibly difficult to get such a system 100% right. Our research group has been developing this software for years, and it's still not perfect, so it would be crazy to ask you to do something similar in two months time. By giving you our agent-based crowd simulation system as a black box for creating your own scenarios and solving your own problems, you will still get the hands-on experience required to understand/appreciate the complexity of crowd simulation.

During this assignment, you will notice that achieving particular types of behaviour is quite hard, and you will need to use our plug-in in creative ways to make agent do exactly what you want. This may sometimes be because of limitations of our plug-in, but it will usually be caused by the difficulty of the problem itself. Therefore, you will need to write a short report about how you programmed your crowd, e.g. what workarounds or tricks you used.

Getting started: Lecture and tutorial

In the second week of the course (see schedule), we will give a lecture on how our crowd simulation software is structured, along with a tutorial on how to use our Unity3D plug-in. To complete this tutorial, you will at least need the following things in advance:

At the session itself, we will give you access to a repository on which you can find the software. You are encouraged to work on this tutorial individually, so bring your own laptop. (If it turns out that this does not fit in the room, we may resort to working in pairs.)

Development tips

Write a report

Along with the demonstrator itself, your team also has to hand in a short report (of around 6-8 pages) about the problems that you have solved. Please motivate your choices. This report should explain which problems you have tried to solve, what solutions already exist in literature, what solution(s) you had in mind initially, and how you have eventually solved the problem(s). We also encourage you to give a bit of feedback about the software: what is useful about it, and what do you think is still missing (if anything)? How did you work around any limitations that you encountered? Try to be as critical about your own implementation as you have been about the papers you have reviewed.

Present your work (three times)

Yes, three times. In the beginning of December, you will give a 10-minute presentation of your project approach. If your approach is based on a certain paper, do not assume that other students have read this one. The goal is to get you started early, to check whether you are on the right track, and to teach your fellow students about a crowd simulation topic. In the beginning of January, you will present your prototype (and a demo) (during 10 minutes). You can incorporate the given feedback into the final project, which will be presented two weeks later (20 minutes). Please try to make the presentation educational for your audience: explain carefully what problem(s) you have solved, which assumptions you have made and how you have solved them. Give an extensive demo. What problems did you encounter when you integrated your technique into the crowd simulation framework? Did this give rise to a more generic solution, or did this limit the application of your technique? Why?

You will not get a grade for this performance specifically, but it will give the lecturer a good impression of how much effort you have put into the assignment. Also, it is just fun to see each other's results after 2 months of hard work :)

If you have the feeling that you are stuck, please do not hesitate to contact your lecturer.

Hand everything in

Before the deadline, please hand in the following deliverables on Blackboard:


The lecturer will grade your results on a 0-10 scale, based on the following factors, in decreasing order of importance:

In some cases, implementing the full paper or implementing a full game is not possible in the given time. It is perfectly fine to make assumptions (and to state them). In that case, ensure that your implementation is generic and that it works in all cases under these assumptions.


You can choose one of the following projects:

Crowd flash mob / crowd prank

Category: social sciences

Crowd flash mob

Organize a crowd flash mob or crowd prank with a (possibly) big crowd in/around Utrecht Central Station. Please watch for instance the following video for some inspiration: Try to control your experiment such that you can identify some specific human behavior.


Crowd simulation game (iPad)

Category: game in C#

Augmented-reality crowd simulation demo

Create a crowd simulation game for kids (aged 6-14), based on our augmented-reality crowd simulation demo given at the Weekend of Science. This demo was created in Unity3D (C#) on an HP Sprout PC (which has a touch interface with a projector/scanner/camera). Of course, you may add your own features. It is advised to let kids playtest your game.


Crowd simulation game (PC)

Category: game in C#

A crowd simulation with 50K robots, produced with our SaaS-based crowd simulator

See the iPad version. Since you are developing for a PC:

Navigation fields

Category: C++ (and a bit C#) engine programming

Global guidance fields Include navigation fields and experiment with them, as described in the paper Directing Crowd Simulations Using Navigation Fields.


Comparison of collision-avoidance algorithms

Category: C++ engine programming, experimental research

Implicit crowds

Add an existing collision-avoidance algorithm (Implicit crowds) to the UUCS engine, and make a comparative study between this algorithm and the implemented collision-avoidance algorithms. The source code (C++) can be extracted from the provided website.


Composite agents

Category: C++ (and a bit C#) engine programming

Composite agent

Add composite agents to the UUCS engine.


Jump annotations

Category: geometric algorithm (theory), C++ or C# engine programming

Jump trajectory

Create (and implement) an efficient (continuous) algorithm that computing jump links between boundary edges of a (multi-layered) navigation mesh. For inspiration, see this MSc thesis, or this one.