Inspiration

Our group members all participated in a large freshman organization, which sorted hundreds of freshmen into small groups(< 10 people) and houses(three male groups and three female groups). However, the algorithm used by the organization leadership often produced suboptimal sorting results (people weren't getting sorted into the groups they requested). We wanted to create a better algorithm that will leave more people satisfied with their group placements in these sorts of situations.

What it does

Each person fills out a form listing up to three friends they want to be in a group with, up to three small groups they want to be assigned to, and up to three houses they want to be put in. Our algorithm assigns people to groups to maximize the number of preferences that can be satisfied for the most people, while ensuring that each group has an appropriate number of people(within 2 of any other group).

How we built it

Our algorithm determines which groups the most people are trying to get into and which people will be the hardest to satisfy, then iteratively adds people to groups in a way that satisfies people with both fewer and more preferences. Lastly, the algorithm sweeps through the groups and checks the least satisfied people to see if another group placement would be better for them. This last step is accomplished by running several experimental scenarios, and determining the best choice.

Challenges we ran into

We initially had conflicting naming conventions, but we quickly identified this problem and agreed on naming conventions. We also struggled with querying AI to create our test cases, but by increasing the precision in our queries, we successfully generated varying data sets to test our algorithm in different scenarios.

Accomplishments that we're proud of

In our testing, we were able to give each person several of their requested attributes, which is a large improvement over the algorithm that we have seen implemented in other organizations, which would often give students one or zero of their preferences.

What we learned

We learned how to relate real-life satisfaction to a sorting algorithm using computable values. We learned about different ways to think about our problem, and by testing these on paper, in our heads, and in prototype code, we were able to decide which version of our algorithm would work best.

What's next for Clusterly

We are planning to pitch Clusterly to the leadership of the freshman organization we participated in and help them implement it. We plan to make Clusterly opensource and more generalized for wider use as well as refactorizing code and improving readability and organization.

Built With

Share this project:

Updates