FordFulkersonLeChameau/README.md
2023-01-14 15:42:54 +01:00

71 lines
3 KiB
Markdown

*Project undertaken by Aurélia LEJEUNE and Raphaël LACROIX as part of our 4th year course on functionnal programming*
# What is this project about?
Ever needed to organise an day with participants (like children for instance) that can pick a variying number of
activities (like hockey football ...) from a list? Avoid yourself the hassle of filling the table by hand for three
hours just to realize that little jimmy can't go to the swimming pool because there are no remaining spots for him.
# How to use this software ?
## Installing and running
- clone this repo make sure you have [ocaml](https://ocaml.org/docs/up-and-running) installed
- in the root of the directory run
- `make app` if you want to enter the activities and participants one by one in the terminal (we won't judge you)
- `make appSource` if you prefer to enter those `./INPUT` and let the program do it for you
## Inputting data
The format for the file is as follows :
*Nb_... and id_... are numbers. The first represent the number of possible participants. The latter will be used to say
which activities the participant wants. Participant_... and Activity... must be strings of characters without spaces (you
can replace those with `_` or `-`)*
```
Activity_1 Nb_available
Activity_2 Nb_available
...
Activity_n Nb_available
Participant_1 id_1 id_2 id_3 ... id_n
Participant_2 id_1 id_2 id_3 ... id_n
...
Participant_m id_1 id_2 id_3 ... id_n
```
So it may look like :
```
Foot 15
Hockey 12
Piscine 15
Poney-aquatique 2
Jean 1 2
Jean-Michel 5
Jean-Claude 1
Jean-ti 1 6 2
```
The formatting is the same should you input the information through the terminal. You will be guided along the way.
## Examples
### with a source file
![example_with_source.png](example_with_source.png)
### with the CLI
![Example_without_source_1.png](Example_without_source_1.png)
![Example_without_source_2.png](Example_without_source_2.png)
![Example_without_source_3.png](Example_without_source_3.png)
## NB
- The application seeks to match **children/students** to **activities/courses** as a
[bipartite matching](https://www.geeksforgeeks.org/maximum-bipartite-matching/) process.
- The user is asked to provide :
- The `names` and `capacities` of **activities/courses**
- The `names` and `choices` of **children/students**
- The user is **NOT ASKED**
- the order of interest among the choices for a **children/students**
- the answer to the question of life, the universe and everything
- `make test` enables you to test the first step of the project (i.e. just running the Ford-Fulkerson algorithm on a test graph)
- ⚠️ But it is needed to roll back in the git history before the changes for the "Medium" part were made like
[this one](https://git.etud.insa-toulouse.fr/rlacroix/FordFulkersonLeChameau/src/commit/5ca008700e62474cc17b2845e7d2dd061c319861)
- An image of the final graph (`./outFileApp.svg`) can be used to get a better understanding of the algorithm here is an example :
![Graph_example.svg](Graph_example.png)