title: Minimizing over the minimum of a function in linear programming
body: <p>How can I minimize a function, which contains an inner minimum. Below is an example. I understand that I can start from defining a new variable <code>x4=min(c1*x1, c2*x2, c3*x3)</code>, then add new constraints <code>x4&lt;=c1*x1, x4&lt;=c2*x2, x4&lt;=c3*c3</code>. But this is obviously not correct because a <code>x4</code> that is smaller than those terms above is not necessarily the <code>minimum</code> of them(actually any <code>x4</code> that is smaller than the minimum will satisfy the constraints above). How should I reformulate this to make it correct? Thank you. </p>
  
  <pre><code>Minimize
      (c1 * x1) + (c2 * x2) + (c3 * x3) + (c4 * min(c1*x1, c2*x2, c3*x3)) 
  subject to
      #some arbitrary linear constraints:
      x1 &gt;= ...
      x1 + 2*x2 &lt;= ... 
      x3 &gt;= ...
      x1 + x3 == ...
  </code></pre>