GECODE Парные отличимые столбцы в матрице
Я работаю над решателем GECODE для реализации задачи Matrix Generation. Я понял все ограничения, которые мне нужны, кроме одного:
Given a Matrix[M, N], all column vectors must be pairwise distinct.
Вот код, который я хотел бы написать:
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
{
if( i != j )
{
notsame(*this, m.col(i), m.col(j));
}
}
}
Но я не могу понять, как выразить это с помощью примитивных ограничений. я знаю distinct()
существует, однако я не могу понять, как работать со столбцами в матрице вместо элементов в самой матрице столбцов. Как лучше всего выразить это ограничение по матрицам?
1 ответ
Я придумал реализацию, которая, кажется, работает.
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
{
if( i != j )
{
// Every column should not be equal to any other column
// Check each column pairwise element
BoolVarArgs equalities;
for(int r = 0; r < M; r++)
{
equalities << expr(*this, m(i, r) == m(j, r));
}
rel(*this, BOT_AND, equalities, 0);
}
}
}