<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Optimization on Yahel Uffenheimer</title><link>https://yahel1216.github.io/categories/optimization/</link><description>Recent content in Optimization on Yahel Uffenheimer</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://yahel1216.github.io/categories/optimization/index.xml" rel="self" type="application/rss+xml"/><item><title>Clarkson's Algorithm for Linear Programming</title><link>https://yahel1216.github.io/posts/clarksons-lp-algorithm/</link><pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/clarksons-lp-algorithm/</guid><description>&lt;h1 id="clarksons-algorithm-for-linear-programming"&gt;Clarkson&amp;rsquo;s Algorithm for Linear Programming&lt;/h1&gt;
&lt;div
 class="alert alert-info my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-) 10%, transparent);
 border-left-color: var(--color-);
 --hover-bg: color-mix(in srgb, var(--color-) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Programming:&lt;/strong&gt; Feasibility, optimality, and the standard form of an LP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Rank, linear independence, matrix inverses, and spanning sets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probability:&lt;/strong&gt; Expectation and Markov&amp;rsquo;s inequality.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;hr&gt;
&lt;p&gt;Linear programs arise throughout combinatorial optimization, machine learning, and operations research. In many practical settings the number of constraints $n$ is enormous compared to the ambient dimension $d$ — think of $n = 10^6$ constraints in $d = 50$ dimensions. Standard algorithms like the simplex method take time proportional to $n$ per pivot, and interior-point methods scale as $O(n^{3.5})$ in the worst case. When $n \gg d$, most constraints are redundant: the optimal solution is determined by only $d$ of them.&lt;/p&gt;</description></item><item><title>Approximating the Cut-Norm - Part 1</title><link>https://yahel1216.github.io/posts/cut-norm/</link><pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/cut-norm/</guid><description>&lt;div
 class="alert alert-note my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-note) 10%, transparent);
 border-left-color: var(--color-note);
 --hover-bg: color-mix(in srgb, var(--color-note) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-note) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Eigenvalues, PSD matrices, Tensor products.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Convex Optimization:&lt;/strong&gt; Basic familiarity with Semidefinite Programming (SDP).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probability:&lt;/strong&gt; Expectations, Markov&amp;rsquo;s inequality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graph Theory:&lt;/strong&gt; Basic definitions, Cuts, Regularity.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;Consider the following problem: Given an undirected graph $G=(V,E)$, let $A,B\subset V$ denote non-empty disjoint sets. Let $E(A,B)$ denote the set of edges in $E$ that cross from $A$ to $B$. Denote $D(A,B)=\frac{\left|E(A,B)\right|}{\left|A\right|\left|B\right|}$ to be the &lt;strong&gt;density&lt;/strong&gt; of edges crossing from $A$ to $B$.&lt;/p&gt;</description></item><item><title>Approximating the Cut-Norm - Part 2</title><link>https://yahel1216.github.io/posts/cut-norm-2/</link><pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/cut-norm-2/</guid><description>&lt;div
 class="alert alert-note my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-note) 10%, transparent);
 border-left-color: var(--color-note);
 --hover-bg: color-mix(in srgb, var(--color-note) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-note) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Eigenvalues, PSD matrices, Tensor products.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Convex Optimization:&lt;/strong&gt; Basic familiarity with Semidefinite Programming (SDP).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probability:&lt;/strong&gt; Expectations, Markov&amp;rsquo;s inequality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graph Theory:&lt;/strong&gt; Basic definitions, Cuts, Regularity.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;We are interested in computing the cut norm of a matrix, defined by $$\|A\|_C=\max_{I\subset R,J\subset S}\left|\sum_{i\in I,j\in J}a_{i,j}\right|$$
where $A=(a_{i,j})_{i\in R,j\in S}$. We&amp;rsquo;ve seen this is a hard problem, and it is often equivalent to computing the $\infty\mapsto 1$ norm, defined by $$\|A\|_{\infty\mapsto 1}=\max_{x\in \set{\pm 1}^R, y\in \set{\pm1}^S} \sum_{i\in R,j\in S} a_{i,j}\cdot x_i\cdot y_j$$
We&amp;rsquo;ve already seen that computing the latter norm can be done by solving an integer quadratic program, which has a relaxation to a quadratically constrained quadratic program given by $$\max \sum_{i,j}a_{i,j}\cdot \langle u_i, v_j\rangle \quad\text{subject to}\quad \|u_i \|^2 = \|v_j\|^2=1$$ where the optimization is over vectors $u_1,\ldots,u_n$ and $v_1,\ldots ,v_m$. We&amp;rsquo;ve seen that this problem can be solved using semi-definite programming, and we&amp;rsquo;ve seen one method to round the solution, giving an approximation factor of $\approx 0.03$. In this post, we&amp;rsquo;ll see another method, which is much cleaner, and uses randomized rounding of this SDP.&lt;/p&gt;</description></item><item><title>The Conjugate Gradient Method for Linear Equations</title><link>https://yahel1216.github.io/posts/conj-gradient/</link><pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/conj-gradient/</guid><description>&lt;div
 class="alert alert-info my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-) 10%, transparent);
 border-left-color: var(--color-);
 --hover-bg: color-mix(in srgb, var(--color-) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Eigenvalues, eigenvectors, positive (semi-)definite (PSD) matrices, and the notion of orthogonality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calculus:&lt;/strong&gt; Gradients and basic convexity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimization:&lt;/strong&gt; Gradient Descent (GD) basics.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;One of the most common tasks in numerical algorithms is to solve a linear equation—that is, find $x$ for which
$$Ax=b$$
for a given matrix $A$ and vector $b$. This can be solved via Gaussian elimination, which generally has a high runtime ($O(n^3)$). We will show how to improve upon this using optimization ideas. This is one instance of a problem for which we can find an &lt;strong&gt;approximate&lt;/strong&gt; solution much faster using &lt;strong&gt;calculus&lt;/strong&gt; tools, compared with using a close-form exact algebraic solution.&lt;/p&gt;</description></item></channel></rss>