Project Summary & Skills Used
Give your project an engaging title.
• List the names of your teammates and link to each person’s ePortfolio.
• Briefly describe the system you developed, the data (if any) you used, and the intended
purpose of the project.
• Include a note about the Industrial Engineering concept or context involved.
• Highlight important skills you used and/or developed during the project.
We developed a class scheduling model that would take into account unique student scenarios and optimize their class taking and the time of class offerings to minimize the classes they are unable to take by the end of their 4 years. Our data was created by ourselves. We collected online course information such as prerequisites or corequisites to determine whether a student could take a class yet. We pulled the credits of each course to make sure each semester they were not taking more than 18 hours. Finally we used random generation based on feasible distributions for classes, which would decide which classes they have already received credit for when entering the scenario.
Industrial Engineering Context
To complete this project we had to think like IEs balancing the technical application with our coding while considering all the human factors that went into this model. It’s not easy to put people in a box and there were so many things crucial to consider. Working with manipulating data was a huge IE skill we had to leverage to make sure it depicted our intended model. The problem solving skills acquired from my degree were essential with so much testing, debugging, and persistence neccesary to create a realistic working model. Considering randomness was also an important skill I obtained from probability and statistics.
Skills Used
- Optimization
- Data cleaning, manipulation
- Probabilistic and stochastic modeling
- Fundamental OR techniques such as binary if then constraints, big m, and activation constraints
- Python, ampl, and general coding skills; debugging
Project Development Process
Our project focused on modifying class scheduling for industrial engineers to increase the number of people who can graduate. To create this model there were multiple considerations. First, when should industrial engineers take classes to allow them to meet their requirements. This requires they have met all the pre and co-requisites to take a class. We had to consider teachers limited resources. Some teachers are not able to teach a class every semester because of research or other class committments. Moreover, some classes could be offered over the summer. Which ones should we offer to allow the most students to graduate. Our goal was that the model could change these decisions which would give the students more opportunities to graduate. We also had to consider the various circumstances students are in when entering industrial engineering coursework. Some may be transferring from other colleges others far ahead with many credits from high school or college. We had to consider how to accurately model these different circumstances.
Initial Idea
Our initial idea was to create the best schedule from a students perspective that would allow them to graduate while minimizing the difficulty and time required per semester.
Evolution of the Design
When explained our model we realized it may be too difficult to model these intangible factors and subjective factors. We decided to pivot to scheduling but from the teachers perspective.
Challenges and How We Solved Them
Prerequisites and Corequisites
This required keeping track of classes taken in previous semester and also identifying whether they were pre and corequisites. Moreover we had to think not only about classes the model had the student taken but also those they came into the scenario with.Data collection
This involved going through each course pulling all the pre and coreqs and putting it into a matrix where if it is a prereq/coreq then put a 1 if not put a 0. For 34 classes this became tedious. Moreover modeling the various different students involved thinking about the frequency of students who have taken those classes entering the scenario. Modeling this randomly was a challenge.Distance matrix construction
Enforcing summer and fall/spring constraints. Making a class only one semester or in the summer was not as easy as making a new variable. We had to link it our other variable so it would be consideredDebugging
Because our model was so complex tracking down the source of an error was very challenging. Even with teacher assistance understanding the nuanced details of our model were very difficult.
Expectations vs. Results
We hoped that this would be a prescription that our advisers could use to schedule classes. But in hindsight we realized that there were many things we failed to account for. Humans are so complex to perfectly model and there were likely things we missed such as other majors they were pursuing or failed classes just to name a couple
Key Features or Highlights
1. Optimization Model Structure
Parameters and Decision Variables:
First, we had to make our sets and decisions. We define our sets which consisted of STUDENTS as the set of all students considered, CLASSES as the set of required IE courses, TERMS as the sequence of semesters from the second semester of sophomore year through graduation, SEMESTERS and SUMMERS as the sets representing fall/spring terms and summer sessions, respectively.
For our variables the model decides what classes should be offered in only one semester and whether they should be offered only in the fall or only in the spring. Next, the model should determine which classes should be offered in the summer. Finally, the model should decide when each student should take a class to allow them to meet the prereqs or coreqs for a class at the right time. Finally it should decide which classes will not be taken denoted by S, a slack variable.

For our parameters which will store the data necessary to run our model and enforce our constraints, we created r(i) which stored the credits of each class i, i.e. “Chemistry: 4”, O(s)(k) which stores whether student s starts the degree with class k with i.e, “have taken calculus 2,” and finally P(k)(i) and C(k)(i) which classes k are prerequisites or corequisites respectively for which classes i.

Constraints:
There were some obvious constraints we wanted to enforce. The first was a credit constraint to prevent the model from opting to take every class in one semester. Student’s only under certain circumstances can take past 18 hours of credits, so we assumed this would be the limit. Consistently taking 18 hours would not be sustainable so we made the average of all terms excluding those in summer to be less than or equal to 16.


We had to require the model take every class. If a class is not able to take the class due to constraints the slack variable should activate. If the class was transferred in, then neither variables need to activate. This constraint is shown below

This doesn’t take into consideration IE classes that are only offered one semester. So we created constraints such as, “if a class is only offered in the fall, it cannot be taken in the spring” and vice versa. If a fall only class were taken in the spring or a spring only class taken in the fall the right-hand side is 1 which violates the constraint.
Spring Only:

Fall Only:

To lighten the load on teachers we required that the fall or spring only classes must be greater than or equal to 5 including capstones which are by default fall or spring.

If any student takes a class in the summer we must then offer that course in the summer which is enforced below. The 20 ensures that our total students summer taking will never exceed the right side.

For demand and resource constraints we can offer a maximum of 2 summer classes.

Finally we must enforce that all prerequisite and corequisite classes must be taken before a class is able to be taken. This means that the sum of all its pre/coreqs must be equal to those taken and transferred in.


Objective:
Our objective is to minimize the total number of required classes that students fail to complete. Since slack variables represent classes that remain untaken, minimizing slack corresponds to maximizing the student’s ability to graduate on time.

Results:
Below shows the results. Two students were unable to graduate with only one class not being able to be taken for each. The classes offered over the summer and fall/spring only basis are shown as well.


2. Data Collection
In order to try to simulate an accurate model we used elements of randomness using randbetween and rand in excel that would assign whether or not a student has completed a class before. Certain classes such as probability are less likely to have been taken before semester 2 of sophomore year. Thus, we modified the bounds to be more likely it would be 0 than not. For a class like calculus 2, most students coming into second semester sophomore year would have completed that so we modified the bounds to make that more likely. To simulate prerequisites for the math elective the value can only randomly become 1, if calculus 2 randomly becomes 1. A couple example excel Formulas are shown below.
=ROUND(RANDBETWEEN(1,9)/10,0)
=IF(B15=1,ROUND(RANDBETWEEN(1,5)/10,0),0)
We used the online degree audit from Industrial Engineering to pull together the prequisites with a 35 by 35 matrix of 1s and 0s if a class is or is not a prerequisite for another class. This is shown below

This logic is far from perfect, but we did our best to capture to the best of our ability the varying circumstances IEs come to their degree with.
Reflection
This project gave me a great understanding of how modeling real world problems works. It’s often times very difficulty and may not be the best way to solve a problem. Modeling requires clear structure and our problem had a ton of variables.
What I Learned
I learned how to:
- Build a model from scratch and depict different scenarios using math
- How to simulate randomness in data generation
- Use OR constraints and variables in practice
- Deal with time bound issues
My Contributions
I contributed to:
- Modeling
- Data Creation
- Debugging
- Coding
- Helping to design and refine the presentation and document
Personal Growth
My modeling has gotten significantly better since starting this project. It’s one thing to translate class problems into new ones, but starting entirely from scratch and having to reconstruct my learning to make real-world applications. While the process was very challenging and certainly frustrating at many moments, seeing the end output and that it actually worked was beyond gratifying. I feel equipped to handle future operations research coursework and even take it into my job facing real world challenges.