I have to solve a problem with permutations. The function takes vector `a`

with `n`

elements as a parameter. I declare `b`

as `@variable`

- there should be the permutation `1:n`

that gives the best result after finding the solution of a problem. The error appears when I want to create `@constraint`

. I have to use `a[b[1]]`

, so it takes the first element from vector which is a variable. It gives my error, that I can’t use type `VariableRef`

as a index of an array. But how can I get around this when I have to use it?

One option is to encode the permutation as a matrix; that’s what I did in TravelingSalesmanExact: https://github.com/ericphanson/TravelingSalesmanExact.jl/blob/61c0c350a11f091bb04dff8618d4c23885ed69c0/src/TravelingSalesmanExact.jl#L230. To permute a vector you would multiply the permutation matrix against the vector.

That uses binary variables, meaning it’s a mixed-integer problem and could be slow, but I don’t see how to encode a permutation without discrete constraints anyway.

3 Likes