AggieAssign was undertaken as a final project for CSCE 606. This project was solicited by Dr. Bettati, one of the associate heads of the Texas A&M Computer Science Department. One of his responsibilities is the formation of the department’s semester course schedule. This task was previously done manually and required a great deal of effort. Scheduling demands balancing physical constraints, such as room occupancy or extra classroom features necessary for lab courses. There are also soft preferences to consider, namely the instructor’s affinity for course material and time slot. The core goal of this project was to algorithmically generate quality schedules, which could then be tweaked by hand if needed to generate the final product.
AggieAssign requires the user to submit data about courses, rooms, and professors. This information is then used to generate happiness scores for each possible assignment. Our scheduling objective is twofold: minimize room wastefulness and maximize professor happiness. Both of these problems can be cast as integer linear programs, enabling efficient solutions via external libraries. On real data collected from the Spring 2024 semester, AggieAssign found a schedule with >80% happiness in under a minute. For more details on our algorithm, take a look at the Final Report.
- Important Links
- Build Instructions
- Getting Started with Setup and Deployment
- Using the Application
- Run Tests locally
- Contact Information
- App: Live Application
- Application Demo: Application Demo Video
- Final Report: Final Report
- Presentation: Presentation
- Ruby: Version
>= 2.7.0 - C Compiler: Required for native extensions (e.g.,
gccorclang)
Clone repository:
git clone git@github.com:tamu-edu-students/Faculty-Teaching-Assignment.git
Download gems and other dependencies:
cd Faculty-Teaching-Assignment
bundle install
rake glpk:install
The schedule builder relies on GLPK, an open-source linear program solver. This is downloaded, configured, and installed by the glpk:install Rake task. By default, it is installed to the top-level app directory, as to prevent the user from having to add the required binaries to their path. See lib/tasks/glpk.rake for details.
- Heroku Account: Sign up for a Heroku account.
- Heroku CLI: Download and install the Heroku CLI.
- GitHub Repository: Ensure you have access to the github repository.
- Rails and Ruby: Check that you have Ruby and Rails installed locally to set up the app.
- OAuth Configuration: Ensure you have Google OAuth API keys
If you're setting up the project locally, clone the repository:
git clone https://github.com/tamu-edu-students/Faculty-Teaching-Assignment.git
cd Faculty-Teaching-AssignmentTo install all required dependencies, run:
bundle config set --local without 'production' && bundle installSetup your Google OAuth Rails Credentials using Google Developer Console.
EDITOR=vim rails credentials:editThe credentials file will open in the editor.
Add your Google OAuth credentials to the file in the following format. Make sure to maintain the correct indentation and spacing as shown. There should be 2 spaces before client_id and client_secret, and a space after the colon:
google:
client_id: your_client_id
client_secret: your_client_secretNote: Replace your_client_id and your_client_secret with your own Google OAuth credentials. Do not include any quotes around the actual credentials.
After adding your credentials, save the changes and exit the editor.
For a more detailed explantion, see Setup Google OAuth and Add OAuth ID and Secret to Rails Credentials.
If steps are followed correctly you would have your RAILS_MASTER_KEY in config/master.key. ** DO NOT COMMIT THIS TO REMOTE! ** By default, the config/master.key is included in the .gitignore.
Facing issues?
You might need to delete thecredentials.yml.enc file which in the config/ folder and try to configure the master key again
Run database migrations and set up the database:
rails db:create
rails db:migrate
rails db:seed rails server # To run locallyOpen your browser and navigate to http://localhost:3000 to view the app running.
-
Add a
Procfile: Create a file namedProcfilein the root directory with the following line:web: bundle exec puma -C config/puma.rb -
Add the Heroku Postgres Add-on: Heroku uses PostgreSQL as the default database for Rails apps. Check your
Gemfilefor thepggem. (https://elements.heroku.com/addons/heroku-postgresql) -
Environment Variables: Use
dotenvfor local testing and set variables on Heroku using the CLI.
-
Login to Heroku:
heroku login
-
Create a New Heroku App:
heroku create <YOUR_APP_NAME> # Optionally specify an app name
-
Add Heroku as a Git Remote:
git remote add heroku https://git.heroku.com/<YOUR_APP_NAME>.git
-
Push to Heroku:
git push heroku main
-
Run Database Migrations on Heroku:
heroku run rails db:migrate
Add the Heroku domain as an authorized redirect URI to your Google OAuth. Example:
https://<YOUR_APP_NAME>.herokuapp.com/auth/<PROVIDER>/callbackSet environment variables on Heroku for any API keys, secrets, or configuration variables, you will have to setup your Google Authentication key :
If you have used RAILS_MASTER_KEY to encrypt
heroku config:set RAILS_MASTER_KEY=<YOUR_MASTER_KEY>If the above steps do not work, see Deploy to Heroku for OmniAuth documentation.
For a pdf version refer to User Documentation
- Login using your TAMU Email ID
- Click on
Create a New Scheduleto create one with a name and semester - Click on the schedule card to upload required files
- Sample files are in the
db/samplefolder of the project - Upload the rooms, courses and instructors csv files
- Sample files are in the
- Once the files are uploaded, click on
View Datato view the available data for this schedule - Click on
Add Predefined Coursesto lock any course/instructor to a particular time slot- Click on the Lock icon to lock and unclock a particular time slot and room to ensure no courses are scheduled in that slot
- Click on a particular cell and select a course from the sidebar to assign a course to a particular slot and room
- Click on
Generate Remainingto generate the schedule - If there is an error in the data that is highlighted, such as the number of courses being more than the instructor hours, go back to
View Dataand hide courses that don't need to be scheduled - Once the schedule is generated, room bookings can be deleted or locked to modify the schedule as needed
- Click on
Exportto download the schedule as a csv
After cloning and setting up the repository, run tests from the project root:
- To run the rspec tests, run
bundle exec rspec - To run the cucumber tests, run
bundle exec cucumber
Coverage reports are available in the coverage/ folder. For those interested in contributing to AggieAssign, we require >90% coverage for any new pull requests.
In case of any issues or queries, please contact the developers:
- Wahib Kapdi: wahibkapdi@tamu.edu
- Colby Endres: colby.endres@tamu.edu
- Navya Unnikrishnan: navya_unni@tamu.edu
- Navya Priya Nandimandalam: navyapriya_n@tamu.edu
- Pavithra Gopalakrishnan: pgopal719@tamu.edu
- Yuqi Fan: fan321@tamu.edu
- Abel Gizaw: kingofkings441@tamu.edu