我正在使用列生成算法来解决一些问题,例如多商品流。我使用 gurobi .net api 。当我试图获得约束的影子价格时,我发现它们与不同的单纯形算法不同,例如原始单纯形算法和双单纯形算法。在gurobi .net api中,我设置如下:
GRBEnv env = new GRBEnv();
env.Set(GRB.IntParam.Method, GRB.METHOD_PRIMAL);//primal
or env.Set(GRB.IntParam.Method, GRB.METHOD_DUAL);//DUAL
而且,对于预先解决而不是预先解决影子价格的结果也会有所不同,我的设置如下:
env.Set(GRB.IntParam.Presolve, 0);//turn off presolve
env.set(GRB.IntParam.presolve,1);//with presolve
我困惑的问题是:
在列生成算法中,我应该使用哪个单纯形算法,原始一个还是双一个?我应该关闭预解算吗?
我分别测试了这两种算法,我发现没有预解的双单纯形算法中的影子价格更合理。因此,我将GRBEnv设置为双单纯形算法并关闭预求解,但在列生成迭代期间,通常在第3次迭代中,阴影价格将是原始单纯形算法的结果。因为我将continue lp模型写入* .lp文件重新读取模型并用两种算法求解,原始结果与列生成迭代结果相同,那么为什么在迭代过程中,双单纯形算法会转向原始算法。
有没有人可以帮助我,提前谢谢你。