首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环中变量的C++ cplex值

循环中变量的C++ cplex值
EN

Stack Overflow用户
提问于 2013-03-22 12:02:42
回答 2查看 1.3K关注 0票数 0

我的程序出了点问题。我知道在哪里,但我不知道为什么。

下面是我的代码:

代码语言:javascript
复制
#include <ilcplex/ilocplex.h>
ILOSTLBEGIN
using namespace std;
typedef IloArray<IloNumArray>    NumMatrix;
typedef IloArray<IloNumVarArray> NumVarMatrix;

int main() {
IloEnv env; 
IloInt i, j, k;
IloModel model(env); 
IloInt pro = 4; 
IloInt empl = 5;

IloNumArray e(env, project, 2, 2, 2, 3);
IloNumArray pr(env, project, 1000, 2000, 500, 1500);

IloNumVarArray p(env, project, 0, 1);
NumVarMatrix x(env, project);

for(k = 0; k < pro; k++) {
    x[k] = IloNumVarArray(env, empl+1, 0, 1);
}

for(k = 0; k < pro; k++) {     
    IloExpr sum_over_i(env);
    for(i = 0; i < empl; i++)
        sum_over_i += x[i][k];
    model.add(sum_over_i >= e[k] * p[k]);
    sum_over_i.end();
}

}

当pro和empl的值相同或empl小于pro时,一切都会正常工作。但是如果empl比pro更专业,它就不能再工作了。

有人知道为什么empl不能比pro更好吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-22 13:24:41

内部循环中x的索引是颠倒的。您应该引用xk,而不是xi。这两种方法都不起作用,只是因为你用pro+1元素而不是pro元素创建数组,所以只有当你使用empl > pro时,它才会崩溃。通过使用IloSum,您可以完全避免编写内部循环。

代码语言:javascript
复制
for(k = 0; k < pro; k++) {
    x[k] = IloNumVarArray(env, empl, 0, 1); // don't add additional elements
}

for(k = 0; k < pro; k++) {     
    model.add(IloSum(x[k]) >= e[k] * p[k]);
}
票数 0
EN

Stack Overflow用户

发布于 2013-03-22 12:38:15

我不知道CPLEX,但我会大胆猜测:

代码语言:javascript
复制
NumVarMatrix x(env, project);

for(k = 0; k < pro; k++) {
    x[k] = IloNumVarArray(env, empl+1, 0, 1);
}

...

for(i = 0; i < empl; i++)
    sum_over_i += x[i][k];

所以如果empl > pro,它看起来就像是读过了矩阵的最下面一行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15562518

复制
相关文章

相似问题

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