微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何通过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 举报,一经查实,本站将立刻删除。