GECODE Парные отличимые столбцы в матрице - PullRequest
0 голосов
/ 02 февраля 2019

Я работаю над решателем 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 Ответ

0 голосов
/ 04 февраля 2019

Я придумал реализацию, которая, кажется, работает.

    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);
        }
      }
    }
...