繁体   English   中英

如何比较 Cplex C++ API 中的两个 IloNumArrays?

[英]How do I compare two IloNumArrays in Cplex C++ API?

我想为我的 Cplex model 添加约束,以确保一堆 arrays 是成对不同的。 也就是说,至少一个条目应该在两者中有所不同。

(澄清一下:IloNumVarArray h 表示一个 nxm 矩阵,约束应确保没有两行相同)

我下面的代码有两个我似乎无法解决的错误(至少):
- 首先,“没有合适的 function 从 IloNumVar 到 IloNum 的转换”,
- 其次,不允许使用 .= 运算符来比较 IloNumArrays。

IloNumVarArray h(env, n*m);
IloNumArray temp1(env, m);
IloNumArray temp2(env, m);
for (int i = 0; i < n - 1; i++) {
    temp1.clear();
    temp2.clear();
    for (int k = 0; k < n - i; k++)
        for (int j = 0; j < m; j++) {
            temp1[j] = h[j + i * m];
            temp2[j] = h[j + (i + k) * m];
        }
    model.add(temp1 != temp2);
}

那么如何更改 temp1 和 temp2 以便可以从 h 复制并比较两者?
(或完全不同)
我对 Cplex 很陌生,如果有任何帮助/建议,我将不胜感激

你可以使用逻辑约束。

让我给你一个 OPL CPLEX 中的例子,你可以适应 C++

int n=3;
int m=2;

range N=1..n;
range M=1..m;

float epsilon=0.0001;

dvar float temp1[N][M] in 0..10;
dvar float temp2[N][M] in 0..10;

minimize sum(i in N,j in M) (temp1[i][j]+temp2[i][j]);
subject to
{
  // at least for one (i,j) the 2 arrays are different
  1<=sum(i in N,j in M) (abs(temp1[i][j]-temp2[i][j])>=epsilon);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM