Fw: [问题] cplex 变量累加问题

楼主: sacidoO (阿骂)   2012-10-15 04:50:19
※ [本文转录自 java 看板 #1GUo1HpA ]
作者: sacidoO (33) 看板: java
标题: [问题] cplex 变量累加问题
时间: Mon Oct 15 04:27:58 2012
哈囉板上大大大家好,
想请问一个有关cplex变量累加的问题
我现在有一个变量 x[i], i=0..9999
因为我想把他转成矩阵以1000为单位,对各行各列作累加
变成
x[0], x[1],..., x[999]
x[100],x[101],...,x[1999]
.
.
.
..................x[9999]
想对各行各列做加总,但是因为cplex 对+ - =有固定的表示方式
像是加法cplex.sum
等于 cplex.addEq
所以不能直接对各行以"+="表示
下面是我试过的方式 可是都无效
1.
official method for add variables:
code with:
以加总第一列为例
cplex.addEq(x[i],x[i+1],x[i+2].....to x[i+999], row[0]);
因为变量最多只能加七个, fail
2.2. use += method in java cplex
code with:
for (int b=0; b<1000; b++)
//assign the column/row
{ IloLinearNumExpr accurow = cplex.linearNumExpr();
//assign the space for adding numbers
for(int i=0;i<1000*1000;i++){
//index of x variables
if((i % 1000) ==b){
//calculating the row/column vector
accurow.addTerm(1, x[i]);
//adding x[i]+x[i+1]+...to a row/column
cplex.addEq(accurow, inbound[b]); //assign the value to xji,xij
}
}
}
简画的逻辑就是 新订一个储存空间 叫做accurow, ex:
存x[0]+x[1]+...+x[999]=accurow
但是因为每行每列的总不一样
这个method又不能让我对accurow做脚码的loop
像如果我可以表示accurow[i]就代表i列的总加 所以这个方法也失败
如果我直接定义不同accurow0, accurow1...accurow1000 这样会造成内存空间不足
3. directly assign a new variables to store the sum{i,j} xij
which will code with ex:
IloNumVar[] outgoing_row0 = cplex.intVarArray(1200, 0, 1);
仍然,因为有1000row, 1000column 会造成内存空间不足
4.我看网络上有人直接以
for(int b=0; b<1000;b++){
for(int i=0; i< 1000*1000;i++){
if( (i/1000) == b)
cplex.addEq( (cplex.sum(x[i])) , row[b])
}
}
这个方法就是对各列做加总
但不知道为什么我这边的cplex.sum 的sum会让我error....
不知道板上有没有人可以帮忙我解决这个问题呢? 谢谢!!!

Links booklink

Contact Us: admin [ a t ] ucptt.com