This is a tool for the Kellogg Board Fellows program to optimally match students to board fellowships based on their ranked preferences (using the Hungarian algorithm). Fully client-side in the browser, using web workers API to perform computation asynchronously.
Using:
- Vue.js + Vue Router + Vuex
- Vuetify for UI
- Web Workers API
- munkres-js - Munkres (Hungarian) algorithm implementation for Javascript
Currently (September 21, 2021) hosted here: http://kbfmatcher.kellogg.work/ using surge.sh using an account belonging to Nicholas Bennett.
It is a bit wonky in terms of the process, but it’s essentially:
- Export the results from Qualtrics as a CSV.
- Open the CSV on Excel.
- Select all cells and copy.
- Open this Qualtrics Converter page (http://kbfmatcher.kellogg.work/qualtrics) and paste into the “Qualtrics Input (CSV)” text area.
- Scroll down to the “Rankings Matrix Output (CSV)”, select everything in that text area, and copy.
- Open the main Optimizer page (http://kbfmatcher.kellogg.work/) and paste into the “CSV/TSV of Student Rankings of Companies”.
- Press the “FIND ASSIGNMENTS” button.
- The assignments will show below in a table, along with a download link to a new CSV with the assignments there. The name of the CSV file indicates the average ranking of the matches, with the closer to 1 meaning more people got their first choice or very close to it.
I separated out the Qualtrics parsing function from the optimizer function in case the Qualtrics format ever changes in a way that would break the whole process. If Qualtrics changes, then worst case scenario you could still manually extract the results and make a new CSV spreadsheet following the form indicated in the Optimizer help:
If you copy the fake data it generates out of this text area, you can paste it into an Excel spreadsheet, do the Data > Text to Columns function with commas selected as the delimiter, and you’ll get an idea of the matrix form. Modify with the real company names, students, and rankings, and you’d be able to paste this back into the optimizer for calculation.
This is all to try to future proof this a bit, anticipating it might live on well after I forget I wrote it.
npm install
npm run serve
npm run build
npm run lint