【问题标题】:How to declare a dynamic array with IloNumArray type?如何声明具有 IloNumArray 类型的动态数组?
【发布时间】:2020-04-14 02:30:33
【问题描述】:

Cplex Concert C++ 中函数的参数之一是 IloNumArray 类型,它必须是一个空的动态数组。直到解决方案结束才知道数组的大小。我这样声明数组:

    const IloNumVarArray var(env);
    IloNumArray down;
    IloNumArray up;
    IloInt64 iteration1 = var.getSize();
    IloCplex::getStrongBranch(down, up, var, iteration1);  

但我得到了这个错误:no instance of overloaded function matches the argument list

链接是here。 down 和 up 数组必须是动态数组。

【问题讨论】:

    标签: cplex


    【解决方案1】:

    CPLEX 中包含的示例显示了如何执行此操作。比如这个sn-p来自ilolpex4.cpp

      IloNumArray vals(env);
      cplex.getValues(vals, var);
    

    您可以在 <COSDIR>/cplex/examples/src/cpp 下找到示例,其中 <COSDIR> 是您安装 ILOG CPLEX Optimization Studio 的位置。示例说明见here

    编辑:

    在你的代码sn-p中,你还没有初始化downup

    ilolpex2.cpp 示例的以下修改在我的 x86-64 Linux 机器上运行良好:

      cplex.extract(model);
      if ( !cplex.solve() ) {
         env.error() << "Failed to optimize LP" << endl;
         throw(-1);
      }
      else {
         IloNumArray down(env);
         IloNumArray up(env);
         IloInt64 itmax = cplex.getParam(IloCplex::Param::Simplex::Limits::Iterations);
         cplex.getStrongBranch(down, up, var, itmax);
    
         for (int i = 0; i < var.getSize(); ++i) {
            env.out() << var[i].getName()
                      << "(" << down[i] << ", " << up[i]
                      << ")" << endl;
         }
      }
    

    底层CPXstrongbranch函数的文档是here

    【讨论】:

    • 感谢您的回复。不幸的是,我再次遇到同样的错误。我想实现这个功能 [ibm.com/support/knowledgecenter/SSSA5P_12.7.0/….据我了解,我必须将 downobj 定义为一个动态的空数组,然后函数用所需的值填充它。
    • 请向我们展示错误来自的代码行以及参数的类型和整个错误消息。另外,你的链接失效了。您在调用哪个 CPLEX 函数?
    • 非常感谢@rkersh 的帮助。我收到错误 1017。我在此页面上看到了您对此错误的回答(stackoverflow.com/questions/51737277/…)。我使用 importModel 方法来导入基准,所以我没有为变量指定任何类型。我该如何解决这个错误?
    • 您的模型必须包含整数变量,或 MIP 建模结构,例如指标约束、SOS 约束等。在使用 CPXstrongbranch 之前,您需要将模型转换为 LP。
    • 我使用的基准是 MIP 问题,例如“air05”和“aflow30”,它们是 LPs 并且具有二进制和连续变量。您的意思是问题中的所有变量都必须是整数?我用 IloNumVarArray 类型声明变量。
    猜你喜欢
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多