我正在研究GECODE求解器,以实现矩阵生成问题。我已经弄清了我需要的所有约束,除了一个约束:
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()
存在,但是我不知道如何操作矩阵中的列,而不是列矩阵本身中的元素。表达对矩阵的约束的最佳方法是什么?
答案 0 :(得分:0)
我想出了一个可行的实现。
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);
}
}
}