Inspiration

The three of us met through Taekwondo. Something everyone in the community experiences are too many twelve-hour days waiting at tournaments. With large events hosting 60+ divisions and 400+ participants, the logistics are a massive scheduling bottleneck and this problem is NP-Hard. We wanted to solve this by creating a system that not only optimizes the day but provides athletes with accurate, real-time "expected start times" so they can time their warm-ups appropriately.

What it does

TaekwonFlo uses combinatorial optimization to generate a schedule for all events. Given athletes and their divisions, it creates a schedule with respect to ring availability, referee counts and breaks, and athlete rest periods. Most importantly, it respects bracket precedence--finals cannot happen before semis. The result is a conservative yet tight schedule designed for efficient throughput.

How we built it

We developed a Python backend leveraging Google’s OR-Tools CP-SAT solver to handle the heavy mathematical lifting, paired with a React frontend for an intuitive, interactive Gantt chart visualization.

Challenges we ran into

We struggled with the modelling uncertainty. How well does our deterministic schedule face in the real, random world? If there is a delay--say an athlete does not have a coach--then how do we create a recourse policy? Would this create more problems?

Accomplishments that we're proud of

We are proud of using the knowledge gained from our classes in order to address this problem that affects our community.

What we learned

We learned how to tackle large problems and how to properly formulate for CP-SAT (the optimization solver) and how to stress test our schedule.

What's next for TaekwonFlo

If we had more time, we would flesh out the back end for our portal in order for individuals to make accounts, join teams, and create events. Our next steps include building out a secure portal where organizers can manage registrations, teams can coordinate their athletes, and real-time "Live Mat" updates can be pushed directly to participants' phones.

Built With

Share this project:

Updates