C++ 如何在一个代码文件中使用CPLEX concert求解多个数学模型?
这可能是一个简单的问题,但我从未做过。我有两个不同的数学模型代码在C++和解决CPLEX演唱会在两个不同的代码文件。基本上,这两个代码是两个子例程,在求解模型后,将所需结果存储在两个三维向量中。这两个向量将用于为主要启发式算法生成初始可行解。我的问题是如何在一个代码文件中解决这两个模型,以获得这两个向量,并在下一步中使用它们 我最初的想法是,当我定义模型时,它们可以按如下方式编号: 对于第一个模型:C++ 如何在一个代码文件中使用CPLEX concert求解多个数学模型?,c++,cplex,C++,Cplex,这可能是一个简单的问题,但我从未做过。我有两个不同的数学模型代码在C++和解决CPLEX演唱会在两个不同的代码文件。基本上,这两个代码是两个子例程,在求解模型后,将所需结果存储在两个三维向量中。这两个向量将用于为主要启发式算法生成初始可行解。我的问题是如何在一个代码文件中解决这两个模型,以获得这两个向量,并在下一步中使用它们 我最初的想法是,当我定义模型时,它们可以按如下方式编号: 对于第一个模型: //building the model in CPLEX IloEnv en
//building the model in CPLEX
IloEnv env1;
//Construct Model
IloModel mod1(env);
对于第二个模型:
//bilding the model in CPLEX
IloEnv env2;
//Construct Model
IloModel mod2(env);
要在第二个模型中使用第一个模型的解决方案,可以使用 让我引用文件: 没有从多维数组创建MIP起点的方法 变量的集合。为了从多维开始创建MIP 变量数组,首先必须将所有这些变量复制到一个平面中 数组。下面的示例假设m乘n维的矩阵 开始[i][j]中x[i][j]的起始值
IloNumVarArray startVar(env);
伊洛努马里斯塔特瓦尔(环境);
对于(int i=0;i
我最初的想法是正确的,而且奏效了。我唯一需要补充的是,由于有两个目标,ILO目标也需要有不同的名称。两个模型的解决方案彼此不相关。但是,在主算法中,两种解决方案都将被用来解决主启发式问题。那么,您是否尝试创建一个包含创建和解决这两个独立模型的单个C++源文件?它起作用了吗?如果它不起作用,出了什么问题?还要注意的是,它们不必在同一个源代码文件中,就可以将它们的结果合并到一个值数组中,以热启动主模型。是的,我刚刚尝试过,在工作了一天之后,它起了作用。对许多人来说,一个大问题是“CPLEX”往往在人们的头脑中扮演着巨大的角色。记住,它只是一个软件——实际上,它作为一种工具比人们预期的要容易得多。
IloNumVarArray startVar(env);
IloNumArray startVal(env);
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j) {
startVar.add(x[i][j]);
startVal.add(start[i][j]);
}
cplex.addMIPStart(startVar, startVal);
startVal.end();
startVar.end();