首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Choco中的约束

Choco中的约束
EN

Stack Overflow用户
提问于 2014-05-22 05:27:22
回答 2查看 1.5K关注 0票数 0

我发现了一款Choco作为约束编程软件,可以与solver一起使用。我想学得更多。我已经做了一些基本的例子。但现在我想尝试一些更复杂的东西(Pritsker project scheduling alg),我需要你的帮助。为了取得进展,我必须了解如何对矩阵变量的行进行约束。准确地说,我需要使行数之和等于1(任务只开始一次)。我试过了,但没有成功。你能帮忙吗?我使用的是Choco 2.1.5,我的矩阵如下:

代码语言:javascript
复制
int n = 10; // projects
int m = 12; // time horizon in months
IntegerVariable[][] x = new IntegerVariable[n][m];
int i, j;
for (i = 0; i < n; i++){
    for (j = 0; j < m; j++){
        x[i][j] = Choco.makeIntVar("x_" + i +"_" + j, 0, 1, Options.V_ENUM);
        model.addVariable(x[i][j]);
    }
}
EN

回答 2

Stack Overflow用户

发布于 2014-05-22 05:48:45

您应该首先将变量定义为rowscolumns

然后,您可以使用this文档继续操作。下面这样的代码可能会有所帮助:

代码语言:javascript
复制
IntegerVariable[][] rows;
int n; //number of rows
for(int i=0; i<n; i++)
   model.addConstraint(eq(sum(rows[i], 1));
票数 1
EN

Stack Overflow用户

发布于 2020-11-22 16:23:17

要在行上添加约束,应转置矩阵并将约束应用于行:

代码语言:javascript
复制
transposed = ArrayUtils.transpose(x);
for(int i=0; i<n; ++i){
    model.sum(transposed[i], "=", 1);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23794115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档