<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Combinatorial Optimization |</title><link>https://pedram-ep.github.io/portfolio/tags/combinatorial-optimization/</link><atom:link href="https://pedram-ep.github.io/portfolio/tags/combinatorial-optimization/index.xml" rel="self" type="application/rss+xml"/><description>Combinatorial Optimization</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sun, 12 Jul 2026 00:00:00 +0000</lastBuildDate><image><url>https://pedram-ep.github.io/portfolio/media/icon_hu_d41a6b52b0e960df.png</url><title>Combinatorial Optimization</title><link>https://pedram-ep.github.io/portfolio/tags/combinatorial-optimization/</link></image><item><title>Solving College Admissions at Scale An Integer Programming Approach</title><link>https://pedram-ep.github.io/portfolio/projects/college-admissions-milp/</link><pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate><guid>https://pedram-ep.github.io/portfolio/projects/college-admissions-milp/</guid><description>&lt;p&gt;A review and implementation on the paper &amp;ldquo;College admissions with ties and common quotas: Integer programming approach&amp;rdquo;. This project uses Pyomo framework to implement 9 different MILP formulations with College Admission problem, tested by generated data.&lt;/p&gt;
&lt;p&gt;Implementing mathematical optimization models to fairly assign students to colleges when traditional matching algorithms fail real-world complex scenatios like tied scores and shared capacity constraints.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implementation of Sections 1-4&lt;/strong&gt; from the paper &lt;em&gt;&amp;ldquo;College admissions with ties and common quotas: Integer programming approach&amp;rdquo;&lt;/em&gt; by Kolos Csaba Ágoston, Péter Biró, Endre Kováts, Zsuzsanna Jankó.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Coursework for&lt;/strong&gt;: Combinatorial Optimization and Network Analysis (Dr. Farnaz Hooshmand Khaligh)&lt;/p&gt;
&lt;h2 id="problem-description"&gt;Problem Description&lt;/h2&gt;
&lt;p&gt;College admissions systems must match students to universities fairly while respecting preferences and constraints. The classic Gale-Shapley algorithm (1962) finds stable matchings efficiently—but it breaks down in real systems like Hungary&amp;rsquo;s, which have:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tied Scores&lt;/strong&gt; (Ties): When multiple students have identical scores, how do you decide who gets admitted?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Should all tied students be admitted, rejected, or decided by lottery?&lt;/li&gt;
&lt;li&gt;Different policies have different fairness properties&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Shared Capacity Constraints&lt;/strong&gt; (Common Quotas): Multiple universities may compete for shared resources (e.g., limited faculty or government-funded slots)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Makes the problem NP-hard&lt;/li&gt;
&lt;li&gt;Cannot be solved by the greedy deferred-acceptance algorithm&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;The Challenge&lt;/strong&gt;: Design efficient integer programming (IP) formulations that handle these constraints and enable policy comparison.&lt;/p&gt;
&lt;h2 id="implementations"&gt;Implementations&lt;/h2&gt;
&lt;h3 id="dataset-generation"&gt;Dataset Generation&lt;/h3&gt;
&lt;p&gt;To test the later implemented models, we generate a random dataset of students, colleges, and applications. Students each have a score for each college, along with a list of preferences, and colleges have a upper quote for the number of students they can accept. The script &lt;code&gt;scripts/generate_datasets.py&lt;/code&gt; uses the functions defined on &lt;code&gt;src/generator.py&lt;/code&gt; to generates synthetic instances at three scales:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Small&lt;/strong&gt;: 10 applicants, 5 colleges&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Medium&lt;/strong&gt;: 50 applicants, 20 colleges&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Large&lt;/strong&gt;: 1,000 applicants, 20 colleges&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are two king of datasets, the strict datasets artificially avoids students having same rank for a college. The datasets are finally stored as &lt;code&gt;.json&lt;/code&gt; files and they can be loaded using functions in &lt;code&gt;src/data_loaders.py&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The formulations are then compared based on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Solution quality (objective value)&lt;/li&gt;
&lt;li&gt;Computational time&lt;/li&gt;
&lt;li&gt;Stability guarantees&lt;/li&gt;
&lt;li&gt;Student satisfaction metrics&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="integer-programming-formulations"&gt;Integer Programming Formulations&lt;/h3&gt;
&lt;p&gt;Implemented twleve differen IP and MIP formulations with different constraints and objectives:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SO-BB&lt;/strong&gt; (Student-Optimal Baïou-Balinski)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SO-NW-CUT&lt;/strong&gt; and &lt;strong&gt;SO-NW-BIN-CUT&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MIN-CUT&lt;/strong&gt; and &lt;strong&gt;MIN-BIN-CUT&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MSMR-CUT&lt;/strong&gt; and &lt;strong&gt;MSMR-BIN-CUT&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MSMR-EF&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SO-H-NW-CUT&lt;/strong&gt; and &lt;strong&gt;SO-H-NW-BIN-CUT&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SO-C-NW-CUT&lt;/strong&gt; and &lt;strong&gt;SO-C-NW-BIN-CUT&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These formulations are implemented as &lt;code&gt;pyomo&lt;/code&gt; models, with a base function containing the basic variables, parameters, and constraints. Each formulation uses the base function and adds objective function, new variables and constraints to it. The full implementations are available in &lt;code&gt;src/models/&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;Each formulation is solved using CPLEX (with fallback to open-source solvers).&lt;/p&gt;
&lt;h2 id="results"&gt;Results&lt;/h2&gt;
&lt;p&gt;The final results show similar results as original paper. Since the dataset used for this project was much smaller due to computional limits, some values don&amp;rsquo;t have the exact proportions, but overall the solutions show similar results.&lt;/p&gt;
&lt;p&gt;The most important insights about policy trade-offs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;H-stability&lt;/strong&gt; (Hungarian): Conservative acceptance, but guaranteed stability; fewer students matched&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L-stability&lt;/strong&gt; (Chilean): Maximizes admissions but violates capacity constraints; less stable&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lottery&lt;/strong&gt; (Irish): Balances fairness and stability; randomness adds variance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Computational times scale linearly for small/medium instances; large instances (1,000 applicants) remain solvable within reasonable timeframes using modern IP solvers, especially using binary models which have more variables and constraints, but need less time to find the solution.&lt;/p&gt;
&lt;p&gt;One other important result shows for finding a stable matching in large scale, even using student-pessimal methods will reach the same solutions, with possible little differents.&lt;/p&gt;
&lt;h2 id="key-learnings"&gt;Key Learnings&lt;/h2&gt;
&lt;p&gt;Through this project, I developed deep understanding of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Combinatorial Optimization Theory&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Matching algorithms and stability concepts&lt;/li&gt;
&lt;li&gt;NP-hard problem recognition and IP formulation strategies&lt;/li&gt;
&lt;li&gt;Trade-offs between solution quality and computational time&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Integer Programming Modeling&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Translating real constraints into mathematical formulations&lt;/li&gt;
&lt;li&gt;Model comparisons for the same problem with different objectives and constraints&lt;/li&gt;
&lt;li&gt;Using Pyomo and CPLEX in a large-scale project with multiple models&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Software Engineering for Research&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Designing modular programs for extensibility, instead of solely relying on Jupyter notebookes&lt;/li&gt;
&lt;li&gt;Writing a reproducubile dataset generation code using seed control and scripts&lt;/li&gt;
&lt;li&gt;Writing full documentation for both practitioners and researchers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item></channel></rss>