我有一个用MathProg编写的线性规划。我的未知二进制变量是一个二维数组,定义为:
var x{i in V, l in L}, >=0, <=1;其中V和L是整数的集合。
但是,有些变量的值是预先知道的,我想为求解器指定这一点,以减少ILP的大小。例如,我知道x4,l,当l=2为1时,对于任何其他值,l是零。目前,我将其指定为约束。
s.t. initial4{i in V: i=4}: sum{l in L}(l*x[i,l]) = 2;我想知道这是否是预先指定未知数子集的有效方法。
理想情况下,我希望将这些信息与数据部分一起放在单独的文件中,而不是在模型文件中。
发布于 2012-05-16 15:57:10
为每个变量创建一个上限和下限:
var x{i in index_set}, >=x_L[i], <=x_U[i];调整已知值的下界和上界。
下面是一个MathProg片段,将x[2]修正为零:
set index_set;
param x_L{index_set};
param x_U{index_set};
var x{i in index_set}, >=x_L[i], <=x_U[i];
s.t.
dummy:
sum{i in index_set} x[i] = 2;
solve;
display x;
data;
set index_set := 1, 2, 3;
param x_L default 0;
param x_U default 1 :=
2 0;
end;从(过滤的)输出可以清楚地看出,预处理器足够聪明,可以将x[2]修正为0:
glpsol --math test.mod
OPTIMAL SOLUTION FOUND BY LP PREPROCESSOR
x[1].val = 1
x[2].val = 0
x[3].val = 1https://stackoverflow.com/questions/10619389
复制相似问题