[Ipopt] Suboptimal solutions with inventory/sales/receipts balance equations

Peter Carbonetto pcarbo at cs.ubc.ca
Mon Sep 29 14:12:50 EDT 2008

```I don't think anyone's answered this question so I thought I'd give a
brief crack at it.

The constraints in optimization problem, I believe, are very similar (if
not identical) to so-called "equilibrium constraints", a topic of active
interest in the numerical optimization community. If I'm not mistaken,
Andreas Wachter actually has a paper discussing the problems with these
constraints.

The short answer is that there are some fairly restricted conditions upon
which an interior-point method will converge to the correct solution, but
after that we really don't know.

Normally one assumes that the first-derivatives of the constraints (the
rows of the Jacobian) are linearly independent, and it is easy to see that
this assumption might be violated with such equality constraints.

One approach may be to transform the equality constraints into inequality
constraints through a penality term---I believe this is discussed briefly
in the Acta Numerica paper by Gould, Orban and Toint (2005).

Peter Carbonetto
Ph.D. Candidate
Dept. of Computer Science
University of British Columbia

> We are solving a retail profit maximization problem in which we deal with
> inventory/receipts/sales balance equations across several time periods and a
> few other business constraints. One of the constraints looks like this:
> (demand(i)-sales(i))*Inventory(i+1) =e= 0. The idea of this is to allow
> sales being less than demand only when we sell all of the inventory
> otherwise the demand will pull the sales according to the demand formula.
>
> The ipopt solver finds a solution that is suboptimal relative to the one
> found by minos in roughtly 10% of the cases (retail items).
>
> I'm wondering if you've had some experience with a*b=0 types of constraints.
> Should one avoid them and try to replace by something else? Is it OK to use
> "0" or is it better to find some non-zero value that is identical to a "0"
> in our problem.
```