My problem is as follows: Consider a 5*5 matrix Obj with 0 and 1
Obj = Array[x, {5, 5}];
The objective function is:
r = Total[Obj, 2];
We need to maximise the objective function with the following constraint: $x_{i,j} + x_{j,k}+x_{k,z} < 2$ where $i,j,k,z \in \{1,2,3,4,5\}$ and $i \neq j \neq k \neq z$. Our coding is as follows:
vars = Union@Cases[r, x[_, _], Infinity];
t1 = Table[If[i != j, Obj[[i]][[j]], ex], {i, 1, 5}, {j, 1, 5}];
fn1[γ_, p_] :=
p1 = If[ Dimensions[p][[2]] == Dimensions[t1][[2]], Drop[p, 0, {Flatten[Position[p, γ]][[1]]}], Drop[p, 0, {Flatten[ Position[p, t1[[Flatten[Position[t1, γ]][[2]]]][[ Flatten[Position[t1, γ]][[1]]]]] ][[2]]}] ]
fn2[γ_, p_] :=
Cases[fn1[γ, p][[Flatten[Position[t1, γ]][[2]]]], Except[ex]]
fn3[i_, j_] := { Tuples[{{i}, {Flatten[fn2[i, t1]][[Flatten[Position[Flatten[fn2[i, t1]], j]][[1]]]]}, Flatten[fn2[j, fn1[i, t1]]]}] }
vars3 = Flatten[ Total[Table[Map[fn3[i, #] & , Flatten[fn2[i, t1]]], {i,
Flatten[Cases[Flatten[t1], Except[ex]]]}], {-1}]]
The result from the above functions is that:
{x[1, 2] + x[2, 3] + x[3, 4], x[1, 2] + x[2, 3] + x[3, 5],
x[1, 2] + x[2, 4] + x[4, 3], x[1, 2] + x[2, 4] + x[4, 5],
x[1, 2] + x[2, 5] + x[5, 3], x[1, 2] + x[2, 5] + x[5, 4],
x[1, 3] + x[2, 4] + x[3, 2], x[1, 3] + x[2, 5] + x[3, 2],
x[1, 3] + x[3, 4] + x[4, 2], x[1, 3] + x[3, 4] + x[4, 5],
x[1, 3] + x[3, 5] + x[5, 2], x[1, 3] + x[3, 5] + x[5, 4],
x[1, 4] + x[2, 3] + x[4, 2], x[1, 4] + x[2, 5] + x[4, 2],
x[1, 4] + x[3, 2] + x[4, 3], x[1, 4] + x[3, 5] + x[4, 3],
x[1, 4] + x[4, 5] + x[5, 2], x[1, 4] + x[4, 5] + x[5, 3],
x[1, 5] + x[2, 3] + x[5, 2], x[1, 5] + x[2, 4] + x[5, 2],
x[1, 5] + x[3, 2] + x[5, 3], x[1, 5] + x[3, 4] + x[5, 3],
x[1, 5] + x[4, 2] + x[5, 4], x[1, 5] + x[4, 3] + x[5, 4],
x[1, 3] + x[2, 1] + x[3, 4], x[1, 3] + x[2, 1] + x[3, 5],
x[1, 4] + x[2, 1] + x[4, 3], x[1, 4] + x[2, 1] + x[4, 5],
x[1, 5] + x[2, 1] + x[5, 3], x[1, 5] + x[2, 1] + x[5, 4],
x[1, 4] + x[2, 3] + x[3, 1], x[1, 5] + x[2, 3] + x[3, 1],
x[2, 3] + x[3, 4] + x[4, 1], x[2, 3] + x[3, 4] + x[4, 5],
x[2, 3] + x[3, 5] + x[5, 1], x[2, 3] + x[3, 5] + x[5, 4],
x[1, 3] + x[2, 4] + x[4, 1], x[1, 5] + x[2, 4] + x[4, 1],
x[2, 4] + x[3, 1] + x[4, 3], x[2, 4] + x[3, 5] + x[4, 3],
x[2, 4] + x[4, 5] + x[5, 1], x[2, 4] + x[4, 5] + x[5, 3],
x[1, 3] + x[2, 5] + x[5, 1], x[1, 4] + x[2, 5] + x[5, 1],
x[2, 5] + x[3, 1] + x[5, 3], x[2, 5] + x[3, 4] + x[5, 3],
x[2, 5] + x[4, 1] + x[5, 4], x[2, 5] + x[4, 3] + x[5, 4],
x[1, 2] + x[2, 4] + x[3, 1], x[1, 2] + x[2, 5] + x[3, 1],
x[1, 4] + x[3, 1] + x[4, 2], x[1, 4] + x[3, 1] + x[4, 5],
x[1, 5] + x[3, 1] + x[5, 2], x[1, 5] + x[3, 1] + x[5, 4],
x[1, 4] + x[2, 1] + x[3, 2], x[1, 5] + x[2, 1] + x[3, 2],
x[2, 4] + x[3, 2] + x[4, 1], x[2, 4] + x[3, 2] + x[4, 5],
x[2, 5] + x[3, 2] + x[5, 1], x[2, 5] + x[3, 2] + x[5, 4],
x[1, 2] + x[3, 4] + x[4, 1], x[1, 5] + x[3, 4] + x[4, 1],
x[2, 1] + x[3, 4] + x[4, 2], x[2, 5] + x[3, 4] + x[4, 2],
x[3, 4] + x[4, 5] + x[5, 1], x[3, 4] + x[4, 5] + x[5, 2],
x[1, 2] + x[3, 5] + x[5, 1], x[1, 4] + x[3, 5] + x[5, 1],
x[2, 1] + x[3, 5] + x[5, 2], x[2, 4] + x[3, 5] + x[5, 2],
x[3, 5] + x[4, 1] + x[5, 4], x[3, 5] + x[4, 2] + x[5, 4],
x[1, 2] + x[2, 3] + x[4, 1], x[1, 2] + x[2, 5] + x[4, 1],
x[1, 3] + x[3, 2] + x[4, 1], x[1, 3] + x[3, 5] + x[4, 1],
x[1, 5] + x[4, 1] + x[5, 2], x[1, 5] + x[4, 1] + x[5, 3],
x[1, 3] + x[2, 1] + x[4, 2], x[1, 5] + x[2, 1] + x[4, 2],
x[2, 3] + x[3, 1] + x[4, 2], x[2, 3] + x[3, 5] + x[4, 2],
x[2, 5] + x[4, 2] + x[5, 1], x[2, 5] + x[4, 2] + x[5, 3],
x[1, 2] + x[3, 1] + x[4, 3], x[1, 5] + x[3, 1] + x[4, 3],
x[2, 1] + x[3, 2] + x[4, 3], x[2, 5] + x[3, 2] + x[4, 3],
x[3, 5] + x[4, 3] + x[5, 1], x[3, 5] + x[4, 3] + x[5, 2],
x[1, 2] + x[4, 5] + x[5, 1], x[1, 3] + x[4, 5] + x[5, 1],
x[2, 1] + x[4, 5] + x[5, 2], x[2, 3] + x[4, 5] + x[5, 2],
x[3, 1] + x[4, 5] + x[5, 3], x[3, 2] + x[4, 5] + x[5, 3],
x[1, 2] + x[2, 3] + x[5, 1], x[1, 2] + x[2, 4] + x[5, 1],
x[1, 3] + x[3, 2] + x[5, 1], x[1, 3] + x[3, 4] + x[5, 1],
x[1, 4] + x[4, 2] + x[5, 1], x[1, 4] + x[4, 3] + x[5, 1],
x[1, 3] + x[2, 1] + x[5, 2], x[1, 4] + x[2, 1] + x[5, 2],
x[2, 3] + x[3, 1] + x[5, 2], x[2, 3] + x[3, 4] + x[5, 2],
x[2, 4] + x[4, 1] + x[5, 2], x[2, 4] + x[4, 3] + x[5, 2],
x[1, 2] + x[3, 1] + x[5, 3], x[1, 4] + x[3, 1] + x[5, 3],
x[2, 1] + x[3, 2] + x[5, 3], x[2, 4] + x[3, 2] + x[5, 3],
x[3, 4] + x[4, 1] + x[5, 3], x[3, 4] + x[4, 2] + x[5, 3],
x[1, 2] + x[4, 1] + x[5, 4], x[1, 3] + x[4, 1] + x[5, 4],
x[2, 1] + x[4, 2] + x[5, 4], x[2, 3] + x[4, 2] + x[5, 4],
x[3, 1] + x[4, 3] + x[5, 4], x[3, 2] + x[4, 3] + x[5, 4]}
Then, we use the NMaximise to solve this problem:
Incsolution[r_] := NMaximize[{r, And @@ Map[GreaterEqual[ 1, #, 0] &, vars]
&& vars ∈ Integers
&& And @@ Map[GreaterEqual[2, #] &, vars3]}, vars];
solution= Incsolution[r][[1]];
Our problem is that when we try 25*25 matrix, the speed is very slow. Is there any solution to solve this problem like using Compile function (using C)? I have tried Compile but failed.