Yet Another Math Programming Consultant

4 FOLLOWERS

I am a full-time consultant and provide services related to the design, implementation and deployment of mathematical programming, optimization and data-science applications. I also teach courses and workshops. Usually I cannot blog about projects I am doing, but there are many technical notes I'd like to share. Not in the least so I have an easy way to search and find them again myself.

Yet Another Math Programming Consultant

6d ago

Presentation at USDA-ERS Model Summit 2024 ..read more

Yet Another Math Programming Consultant

3w ago

Last friday, 6/28, new PCE (Personal Consumption Expenditures Price Index) data were released. The year-on-year inflation numbers decreased from 2.7% last month to 2.6% [1]:
Let's see how the popular press reports this [2]:
The headline is just very wrong. Inflation was 2.6% but it did not rise by 2.6%. The PCE-based inflation number did actually decrease from 2.7% a month earlier.
I see lots of mistakes in reporting and in posts about inflation and price indices. This is a good (or rather bad) example.
Background
There are a few different quantities here. Here is a su ..read more

Yet Another Math Programming Consultant

2M ago

The goal of this exercise is to fill a square area \([0,250]\times[0,100]\) with 25 circles. The model can choose the \(x\) and \(y\) coordinates of the center of each circle and the radius. So we have as variables \(\color{darkred}x_i\), \(\color{darkred}y_i\), and \(\color{darkred}r_i\). The circles placed inside the area should not overlap. The objective is to maximize the total area covered.
A solution is:
The optimization model can look like:
Non-convex Quadratic Model
\[\begin{align} \max&\sum_i \color{darkblue}\pi\cdot\color{darkred}r_i^2 && && ..read more

Yet Another Math Programming Consultant

2M ago

Here is an example where the PuLP modeling tool goes berserk.
In standard linear programming, only \(\ge\), \(=\) and \(\le\) constraints are supported. Some tools also allow \(\ne\), which for MIP models needs to be reformulated into a disjunctive constraint. Here is an attempt to do this in PuLP [1]. PuLP does not support this relational operator in its constraints, so we would expect a meaningful error message.
#-------------------------------------------
# funny behavior when using a != constraint
# in a PuLP model
#-------------------------------------------
import pulp
model = pul ..read more

Yet Another Math Programming Consultant

2M ago

In [1], the question was asked: how can I round to two decimal places inside an optimization model? I.e., \[\color{darkred}y_{i,j} = \mathbf{round}(\color{darkred}x_{i,j},2)\] To get this off my chest first: I have never encountered a situation like this. Rounding to two decimal places is more for reporting than something we want inside model equations. Given that, let me look into this modeling problem a bit more as an exercise.
Of course, the first thing we can do is to drop the indices (as mathematicians would say: WLOG, Without Loss Of Generality). So we have as our problem: &n ..read more

Yet Another Math Programming Consultant

3M ago

Lots of statistical procedures are based on an underlying optimization problem. Least squares regression and maximum likelihood estimation are two obvious examples. In a few cases, linear programming is used. Some examples are:
Least absolute deviation (LAD) regression [1]
Chebyshev regression [2]
Quantile regression [3]
Here is another regression example that uses linear programming. We want to estimate a sparse vector \(\color{darkred}\beta\) from the linear model \(\color{darblue}y=\color{darkblue}X\color{darkred}\beta+\color{darkred}e\) where the number of observations \(n\) (rows in ..read more

Yet Another Math Programming Consultant

3M ago

In [1], a small model is proposed:
High-Level Model
\[\begin{align} \min\> & \sum_i | \color{darkblue}a_i\cdot \color{darkred}x_i| \\ & \max_i |\color{darkred}x_i| = 1 \\ & \color{darkred}x_i \in \{-1,0,1\} \end{align}\]
Can we formulate this as a straight MIP?
The objective is not very complicated. We can handle this with standard formulations, similar to what is used in LAD (Least Absolute Deviation) regression [2]. The constraint is more problematic. It can be interpreted as "at least one of the \(\color{darkred}x_i\) should be nonzero". This type of counti ..read more

Yet Another Math Programming Consultant

5M ago

A programmer writes about this blog:
(It is old, but I just came across this).
In my previous post, I just argued the other way around. To make sure: I don't hate programmers ..read more

Yet Another Math Programming Consultant

5M ago

In [1], the following Pyomo model (Python fragment) is presented:
model.x = Var(name="Number of batches", domain=NonNegativeIntegers, initialize=10)
model.a = Var(name="Batch Size", domain=NonNegativeIntegers, bounds=(5,20))
# Objective function
def total_production(model):
return model.x * model.a
model.total_production = Objective(rule=total_production, sense=minimize)
# Constraints
# Minimum production of the two output products
def first_material_constraint_rule(model):
return sum(0.2 * model.a * i for i in range(1, value(model.x)+1)) >= 70
model.f ..read more

Yet Another Math Programming Consultant

6M ago

In [1] the following question is posed:
I have free variables \(\color{darkred}x_i\). How can I impose the constraint that at least one of the variables is nonzero: \(\color{darkred}x_i\ne 0\).
Observations
\(\color{darkred}x_i\ne 0\) is somewhat difficult. We need to write this as \[\begin{align}&\color{darkred}x_i\le -\color{darkblue}\epsilon \\ & \textbf{or} \\ & \color{darkred}x_i\ge \color{darkblue}\epsilon\end{align}\] Here \(\color{darkblue}\epsilon\gt 0\) is a small constant. This "or"-type of constraint needs a binary variable (or something similar). I ..read more