Given a vector of integers, is there a MOI constraint that will count the number of repetitions of each distinct integer in the vector?

You can use `MOI.CountBelongs`

:

```
using JuMP, HiGHS
model = Model(HiGHS.Optimizer);
set_silent(model)
N = 3
l, u = 0, 3
@variable(model, l <= x[1:N] <= u, Int)
@variable(model, n[l:u], Int)
# n[i] is the count of how many `i` are in x
@constraint(model, [i=l:u], [n[i]; x] in MOI.CountBelongs(1+N, Set([i])))
optimize!(model)
value.(n), value.(x)
```

Given your recent questions (MathOptInterface Documentation - #8 by odow), I’ll add a page to the JuMP documentation with a bunch of these short snippets.

Is there a way to first find the set S of distinct integers in the vector x, where S is a subset of l:u? If so, would this be more efficient? For example, what if the size of S were much smaller than the size of l:u (u-l+1)?

@variable(model, n[S], Int)

@constraint(model, [i=S], [n[i]; x] in MOI.CountBelongs(1+N, Set([i])))

Here’s the PR to improve the JuMP documentation: [docs] add tutorial on constraint programming by odow · Pull Request #3202 · jump-dev/JuMP.jl · GitHub

Is there a way to first find the set S of distinct integers in the vector x

You want to dynamically choose `S`

*and* count them? I don’t think so. That seems like a hard problem.

@constraint(model, [i=l:u], [n[i]; x] in MOI.CountBelongs(1+N, Set([i])))

How would I find the set J = {j : n[j] = m} for a particular count m? Is it possible to sort J in increasing order?

The new docs of what you can do in JuMP are here: Constraint programming · JuMP

It’s not a fully fledged constraint programming system, so you’ll have to rewrite what you’re trying to do in terms of the available primitives. Things like `sort`

, and `nnz`

(from our emails) aren’t supported.