首页 > 解决方案 > 如何在一个代码文件中使用 CPLEX Concert 解决多个数学模型?

问题描述

这可能是一个简单的问题,但我从来没有这样做过。我在 C++ 中有两个不同的数学模型代码,并在两个不同的代码文件中使用 CPLEX Concert 解决。基本上,这两个代码是两个子程序,在求解模型后,将所需的结果存储在两个 3 维向量中。这两个向量将用于为主要启发式算法制定初始可行的解决方案。我的问题是如何在一个代码文件中解决这两个模型以获取这两个向量并将它们用于下一步?

我最初的想法是当我定义模型时,它们可以像这样编号:对于第一个模型:

    //building the model in CPLEX 
    IloEnv env1;

    //Construct Model 
    IloModel mod1(env);

对于第二个模型:

    //bilding the model in CPLEX 
    IloEnv env2;

    //Construct Model 
    IloModel mod2(env);

标签: c++cplex

解决方案


要在第二个模型中使用第一个模型的解决方案,您可以使用warmstart

让我引用文档:

没有从多维变量数组开始创建 MIP 的方法。为了从变量的多维数组开始创建 MIP,您首先必须将所有这些变量复制到一个平面数组中。以下示例假定一个 m x n 维矩阵,其中 x[i][j] 的起始值位于 start[i][j] 中。

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

推荐阅读