<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Projects |</title><link>https://pedram-ep.github.io/portfolio/projects/</link><atom:link href="https://pedram-ep.github.io/portfolio/projects/index.xml" rel="self" type="application/rss+xml"/><description>Projects</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sun, 19 May 2024 00:00:00 +0000</lastBuildDate><image><url>https://pedram-ep.github.io/portfolio/media/icon_hu_d41a6b52b0e960df.png</url><title>Projects</title><link>https://pedram-ep.github.io/portfolio/projects/</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><item><title>Learning Neural Networks</title><link>https://pedram-ep.github.io/portfolio/projects/learning-neural-networks/</link><pubDate>Wed, 01 Jan 2025 00:00:00 +0000</pubDate><guid>https://pedram-ep.github.io/portfolio/projects/learning-neural-networks/</guid><description>&lt;p&gt;A collection of all projects and mini-projects I&amp;rsquo;ve developed in the field of neural networks. These projects were done with the goal of gaining more knowledge in the neural networks field, starting from MLP and moving towards more complex neural networks, eventually focusing on deep learning models such as CNNs and GNNs.&lt;/p&gt;</description></item><item><title>Patch-based Image Denoising via Higher Order SVD</title><link>https://pedram-ep.github.io/portfolio/projects/hosvd-image-denoising/</link><pubDate>Wed, 01 Jan 2025 00:00:00 +0000</pubDate><guid>https://pedram-ep.github.io/portfolio/projects/hosvd-image-denoising/</guid><description>&lt;p&gt;A near complete implementation of the method in the paper &amp;ldquo;Image Denoising using the Higher Order Singular Value Decomposition&amp;rdquo;. This project uses the Python language and vast libraries to apply this algorithm for grayscale images, and evaluates it by applying the method on the dataset &amp;ldquo;CBSD68&amp;rdquo; and calculating different image-difference scores.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;This project a Python implementation of patch-based image denoising using Higher Order Singular Value Decomposition (HOSVD), based on the method introduced in:&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;Image Denoising using the Higher Order Singular Value Decomposition&amp;rdquo;&lt;/strong&gt;&lt;br&gt;
Ajit Rajwade, Anand Rangarajan, and Arunava Banerjee.&lt;br&gt;
&lt;em&gt;IEEE Transactions on Pattern Analysis and Machine Intelligence&lt;/em&gt;, 2013.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p align="center"&gt;
&lt;img src="results/figures/image-00-results-cropped.png?raw=true" alt="Denoising example" width="600"&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="methodology"&gt;Methodology&lt;/h2&gt;
&lt;p&gt;The algorithm works by:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Partitioning images into overlapping 8×8 patches&lt;/li&gt;
&lt;li&gt;Grouping similar patches using spiral window search&lt;/li&gt;
&lt;li&gt;Constructing 3D tensors for each patch group&lt;/li&gt;
&lt;li&gt;Applying HOSVD decomposition&lt;/li&gt;
&lt;li&gt;Thresholding core tensor values (hard threshold at τ = σ√(s²K))&lt;/li&gt;
&lt;li&gt;Reconstructing denoised patches&lt;/li&gt;
&lt;li&gt;Aggregating patches with averaging&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;Note: Implementation is optimized for grayscale images and omits the Wiener filtering step from the original paper&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="evaluation-metrics"&gt;Evaluation Metrics&lt;/h2&gt;
&lt;p&gt;We used seven metrics to evaluate denoising performance on the CBSD68 dataset:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Formula&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Ideal Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MSE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$\frac{1}{MN}\sum_{i=0}^{M-1}\sum_{j=0}^{N-1}[I(i,j)-K(i,j)]^2$&lt;/td&gt;
&lt;td&gt;Mean Squared Error&lt;/td&gt;
&lt;td&gt;Lower is better&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RMSE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$\sqrt{\text{MSE}}$&lt;/td&gt;
&lt;td&gt;Root Mean Squared Error&lt;/td&gt;
&lt;td&gt;Lower is better&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MAE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$\frac{1}{MN}\sum_{i=0}^{M-1}\sum_{j=0}^{N-1}\|I(i,j)-K(i,j)\|$&lt;/td&gt;
&lt;td&gt;Mean Absolute Error&lt;/td&gt;
&lt;td&gt;Lower is better&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PSNR&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$10 \cdot \log_{10}\left(\frac{L^2_{\max}}{\text{MSE}}\right)$&lt;/td&gt;
&lt;td&gt;Peak Signal-to-Noise Ratio&lt;/td&gt;
&lt;td&gt;Higher is better&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SSIM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$\frac{(2\mu_x\mu_y + c_1)(2\sigma_{xy} + c_2)}{(\mu_x^2 + \mu_y^2 + c_1)(\sigma_x^2 + \sigma_y^2 + c_2)}$&lt;/td&gt;
&lt;td&gt;Structural Similarity Index&lt;/td&gt;
&lt;td&gt;Closer to 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NRMSE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$\frac{\sqrt{\frac{1}{N}\sum_{i=1}^N(x_i - y_i)^2}}{\text{median}(\|x\|)}$&lt;/td&gt;
&lt;td&gt;Normalized RMSE&lt;/td&gt;
&lt;td&gt;Lower is better&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UQI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$\frac{4\sigma_{xy}\bar{x}\bar{y}}{(\sigma_x^2 + \sigma_y^2)(\bar{x}^2 + \bar{y}^2)}$&lt;/td&gt;
&lt;td&gt;Universal Quality Index&lt;/td&gt;
&lt;td&gt;Closer to 1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Rajwade, A., Rangarajan, A., &amp;amp; Banerjee, A. (2013). &amp;ldquo;&lt;em&gt;Image Denoising using the Higher Order Singular Value Decomposition&lt;/em&gt;&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Feschet, F. (2019). “&lt;em&gt;Implementation of a denoising algorithm based on High‑Order Singular Value Decomposition of tensors&lt;/em&gt;”&lt;/li&gt;
&lt;li&gt;Guo, J., Chen, H., Shen, Z., and Wang, Z. (2022). “&lt;em&gt;Image denoising based on global image similar patches searching and HOSVD to patches tensor&lt;/em&gt;”&lt;/li&gt;
&lt;li&gt;Wang, Z., and Bovik, A. C. (2002). “&lt;em&gt;A universal image quality index&lt;/em&gt;”&lt;/li&gt;
&lt;li&gt;Wang, Z., Bovik, A. C., Sheikh, H. R., and Simoncelli, E. P., “&lt;em&gt;Image quality assessment: From error visibility to structural similarity&lt;/em&gt;”&lt;/li&gt;
&lt;li&gt;CBSD68‑dataset: Color BSD68 dataset for image denoising benchmarks. Available at:
&lt;/li&gt;
&lt;/ol&gt;</description></item></channel></rss>