Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在一个代码文件中使用CPLEX concert求解多个数学模型?_C++_Cplex - Fatal编程技术网

C++ 如何在一个代码文件中使用CPLEX concert求解多个数学模型?

C++ 如何在一个代码文件中使用CPLEX concert求解多个数学模型?,c++,cplex,C++,Cplex,这可能是一个简单的问题,但我从未做过。我有两个不同的数学模型代码在C++和解决CPLEX演唱会在两个不同的代码文件。基本上,这两个代码是两个子例程,在求解模型后,将所需结果存储在两个三维向量中。这两个向量将用于为主要启发式算法生成初始可行解。我的问题是如何在一个代码文件中解决这两个模型,以获得这两个向量,并在下一步中使用它们 我最初的想法是,当我定义模型时,它们可以按如下方式编号: 对于第一个模型: //building the model in CPLEX IloEnv en

这可能是一个简单的问题,但我从未做过。我有两个不同的数学模型代码在C++和解决CPLEX演唱会在两个不同的代码文件。基本上,这两个代码是两个子例程,在求解模型后,将所需结果存储在两个三维向量中。这两个向量将用于为主要启发式算法生成初始可行解。我的问题是如何在一个代码文件中解决这两个模型,以获得这两个向量,并在下一步中使用它们

我最初的想法是,当我定义模型时,它们可以按如下方式编号: 对于第一个模型:

    //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();