循环中变量的复数值
C++ cplex value of variable in loop for
我的程序有问题。我知道在哪里,但我不知道为什么。
下面是我的代码:#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?
谢谢
内循环中x的下标是颠倒的。你应该引用x[k][i]而不是x[i][k]。这两种方式都不起作用,只是当你有empl> pro时,它才会崩溃,因为你正在创建带有pro+1元素的数组,而不是pro
元素。您可以使用IloSum来避免编写内部循环。
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]);
}
我不知道CPLEX,但我要大胆猜测:
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,它看起来就像是你在阅读矩阵的最后一行
相关文章:
- 在循环中按顺序遍历成员变量
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 与 for 循环中的变量混淆
- 如何在循环之外重新输入变量
- 如何使用将字符串拆分为 for 循环中的变量的程序
- 在变量声明中使用 for 循环
- C++ 和 Boost.Python - 如何将变量公开给 python 并在循环中更新它?
- C++ Code 在 for 循环期间不会累积变量中的总和,仅提供最终迭代值
- C++ 在循环中添加计数器变量并再次初始化其值
- (C++)虽然循环一次不起作用,但我引入了多个变量
- 如何添加循环期间分配的变量?
- C++,每个循环初始化一个新的静态变量
- 在 for 循环中更新两个变量时遇到问题C++
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- 需要循环帮助以迭代方式添加到程序集中的总和变量
- 在 c++ 中基于范围的 for 循环中使用引用作为控制变量
- 如何在循环中动态创建变量(c++)
- 变量循环范围会导致返回局部变量的地址引用
- ifstream变量循环不打印任何内容
- c++变量/循环问题