#include #include #include #include #include #include #include ILOSTLBEGIN using namespace std; #define EPSL 0.0001 int main(int argc, char * argv[]) { IloEnv env; try{ IloInt n; IloInt K; ifstream entrada; entrada.open(argv[1]); entrada >> n >> K; //P é um array numérico com n posições IloNumArray P(env, n); IloNumArray V(env, n); for(IloInt i = 0; i < n; i++){ entrada >> V[i] >> P[i]; } //Variaveis IloIntVarArray X(env, n, 0, 1); //Modelo IloModel model(env); /* IloExpr expr(env); for(IloInt i = 0; i < n; i++){ expr += P[i] * X[i]; } model.add(expr <= K); */ model.add(IloScalProd(P, X) <= K); model.add(IloMaximize(env, IloScalProd(V, X))); IloCplex solver(model); solver.setParam(IloCplex::Param::MIP::Tolerances::MIPGap, 0.00001); solver.solve(); cout << "Status solução: " << solver.getStatus() << endl; cout << "Valor solução: " << std::fixed << solver.getObjValue() << endl; for(IloInt i = 0; i < n; i++){ if(solver.getValue(X[i]) >= 1 - EPSL) cout << i << " " << endl; } } catch (IloException& ex) { cerr << "Error: " << ex << endl; } catch (...) { cerr << "Error" << endl; } env.end(); return 0; }