Cplex.IntParam.WorkDir 属性 在 Visual Studio 2015 年从 C# 调用 Cplex 且未创建节点文件时的值不正确

Cplex.IntParam.WorkDir property has incorrect value when calling Cplex from C# in Visual Studio 2015 and not creating Node Files

我在 Visual Studio 2015 年从 C# 调用 cplex。

Cplex cplex = new Cplex();

我检查 Cplex.IntParam.WorkDir 的值(使用 cplex.GetParam(Cplex.IntParam.WorkDir)),它给了我以下值 ".[=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=][=31=]"

然后我执行下面这行代码,

cplex.SetParam(Cplex.IntParam.WorkDir, "D:\Temp\cplex");

现在,Cplex.IntParam.WorkDir 的值为 "C:\TEMP\cplex[=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=][=29=]"

当我调用 cplex.Solve() 时,构建模型后,在任何时间点,节点文件实际上都在目录 "D:\TEMP\cplex" 中创建,即使我将 WorkMem 的值设置为极低的东西只有 128 MB。内存消耗扩展到我的 RAM 容量,然后尽管值 Cplex.IntParam.NodeFileInd 设置为 3。

我试着把模型文件写出来,看看会写在哪里,是在项目的默认目录下。

有谁知道为什么没有创建节点文件?以及为什么 IntParam.WorkDir 给出这个值以及如何在内存不足时实际强制 cplex 创建节点文件?

我可以强制使用如下代码创建节点文件:

cplex.SetParam(Cplex.Param.MIP.Limits.TreeMemory, 1);
cplex.SetParam(Cplex.Param.WorkMem, 1);
cplex.SetParam(Cplex.Param.WorkDir, ".");
cplex.SetParam(Cplex.Param.MIP.Strategy.File, 2);
cplex.WriteParam("param.prm");

有了它,您应该会看到像 "cpxdczQeT" 这样的文件名。请注意我是如何在上面最后一行写出参数文件的。这是确保参数设置正确的好方法。

最后,请问您的问题是不是在根节点最优解了?在那种情况下,CPLEX 甚至不需要启动分支定界,也不会创建任何节点文件。