如何通过C ++代码使用Gurobi获得最佳基准的索引

问题描述

我正在通过c ++程序调用Gurobi来求解线性程序,我需要提取最佳碱基的索引。

#include "gurobi_c++.h"
#include <stdlib.h>
using namespace std;
#include<vector> 

int
main(int   argc,char *argv[])
{
  try {
    GRBEnv env = GRBEnv();
    GRBModel model = GRBModel(env);

    // Create variables

    GRBVar x1 = model.addVar(0.0,GRB_INFINITY,0.0,GRB_CONTINUOUS,"x1");
    GRBVar x2 = model.addVar(0.0,"x2");

    // Set objective

    // model.setobjective(4 * x1 + 6 * x2,GRB_MAXIMIZE);
    model.setobjective(2 * x1 - 5 * x2,GRB_MAXIMIZE);

    // Add constraints

    model.addConstr(2 * x1 + 3 * x2 <= 30,"c0");

    model.addConstr(4 * x1 - 9 * x2 <= 0,"c1");

    model.addConstr(x1 + x2 >= 5,"c2");

    // Optimize model

    model.optimize();

    //get the indices of the optimal base
    int nbColumns = 3;
    int nbLines = 2;
    int * bhead = (int *) malloc (nbLines); 
     for (int i = 0; i < nbLines; ++i)
    {
    bhead[i] = -1;
    }
    

    GRBModel *p_model = &model;

    int b = GRBgetBasisHead(p_model,bhead);

    cout<<"base 1"<<bhead[0]<<endl;
    cout<<"base 2"<<bhead[1]<<endl;;
    cout<<"base 3"<<bhead[2]<<endl;

  } catch(GRBException e) {
    cout << "Error code = " << e.getErrorCode() << endl;
    cout << e.getMessage() << endl;
  } catch(...) {
    cout << "Exception during optimization" << endl;
  }

  return 0;
}

当我尝试使用C API中定义的GRBgetBasisHead时出现错误错误是:

error: cannot convert ‘GRBModel*’ to ‘GRBmodel* {aka _GRBmodel*}’ for argument ‘1’ to ‘int GRBgetBasisHead(GRBmodel*,int*)’

因为在C ++ API中,模型是使用GRBModel构造的,而在C API中,模型是使用GRBmodel构造的。另一方面,有VBasis给出了当前基础上变量的状态,但是在这种情况下,我们需要测试所有变量的状态以找到最佳基准的索引。我的问题是:有没有办法直接获得最佳基准的指数?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)