9
$\begingroup$

Let $x \in \mathbb{R}^n$ be an optimization variable. Now, at a constraint, I would like to count how many times a value, say $2$, appears in $x$ decision.

I think we can have a binary variable $y_i$ indicating whether $x_i =2$. So, $x_i - 2 = 0$ should imply $y_i = 1$. But, anything except $0$ should imply $y_i = 0$. What is the easiest way for this?

Note: since we can subtract $2$ from each element of $x$, we are interested in the number of zeros in $x-2$. So, 'the number of zeros in a decision vector' constraint will also make it.

We may assume $x$ consists of elements $x_i< M$ for some constant $M$

$\endgroup$
6
  • 3
    $\begingroup$ You can't really check for exact inequality. If you're willing to allow a small tolerance around 2 (say), then the approach described here might work to set your $y_i$ variables. $\endgroup$ Commented Sep 12, 2019 at 2:07
  • $\begingroup$ I think there should be something with demeaning $x$ and then taking the absolute values... But, not sure. $\endgroup$ Commented Sep 12, 2019 at 2:10
  • $\begingroup$ What do you mean "demeaning" $x$? $\endgroup$ Commented Sep 12, 2019 at 2:19
  • $\begingroup$ $x_i - 2$ for all $i$. Now I tried to use Yalmip's iff command. Apparently, this works. But idk how $\endgroup$ Commented Sep 12, 2019 at 2:23
  • 1
    $\begingroup$ Just to clarify, what you want is to define a variable $y$ associated with an $x$ such that $y=1$ iff $x=2$ (otherwise $y=0$)? $\endgroup$ Commented Sep 12, 2019 at 11:09

1 Answer 1

8
$\begingroup$

As LarrySnyder610 said, you cannot do exactly what you want when $x_i$ is continuous. (You can if it is an integer variable.) I discussed how to model this particular issue here: Flagging a Specific Variable Value.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.