Is there a way to rewrite this as a mixed integer program? I want to have a set of real numbers where all but a certain count are forced to zero.

x_s ∈ R

y_s ∈ R

b_s = 0 ∪ 1

y_s = b_s * x_s

∑b_s ≤ 50

Is there a way to rewrite this as a mixed integer program? I want to have a set of real numbers where all but a certain count are forced to zero.

x_s ∈ R

y_s ∈ R

b_s = 0 ∪ 1

y_s = b_s * x_s

∑b_s ≤ 50

Hello,

It is quite common that the variables x_s have some finite upper bounds U_s. In practice, it’s important that these bounds be small. For example, 100 is small. 1e10 is not small.

With these bounds, you can do:

x_s <= U_s * b_s

This is a typical big-M MIP formulation.

-Steve