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