问题描述
我正在通过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 (将#修改为@)