Как я могу получить коэффициент ограничений в технологии Concert с использованием C ++ - PullRequest
0 голосов
/ 26 сентября 2019

Я импортирую файл MPS и хотел бы получить коэффициент переменных и размер правой руки во всех ограничениях.Как я могу получить эти параметры?

1 Ответ

0 голосов
/ 26 сентября 2019

Существует несколько перегрузок метода importModel .Используя это, вы можете легко получить доступ к информации об ограничениях.Приведенный ниже фрагмент кода является модифицированной версией функции main из примера ilomipex2.cpp.Он демонстрирует, как распечатать информацию об ограничениях:

int
main (int argc, char **argv)
{
   IloEnv env;
   try {
      IloModel model(env);
      IloCplex cplex(env);

      if ( argc != 2 ) {
         usage (argv[0]);
         throw(-1);
      }

      IloObjective   obj;
      IloNumVarArray var(env);
      IloRangeArray  rng(env);
      IloSOS1Array   sos1(env);
      IloSOS2Array   sos2(env);
      IloRangeArray  lazy(env);
      IloRangeArray  cuts(env);

      cplex.importModel(model, argv[1], obj, var, rng, sos1, sos2, lazy, cuts);

      cplex.extract(model);

      if ( lazy.getSize() > 0 )  cplex.addLazyConstraints (lazy);
      if ( cuts.getSize() > 0 )  cplex.addUserCuts (cuts);

      // Print out information about the constraints:
      for (int i = 0; i < rng.getSize(); ++i) {
         IloExpr rngexpr = rng[i].getExpr();
         // Constraint name, lower bound, and upper bound (i.e., RHS):
         env.out() << "Constraint: " << rng[i].getName() << ", LB: " <<
            rng[i].getLB() << ", UB: " << rng[i].getUB() << endl;
         // The variables and coefficients in the constraint:
         for (IloExpr::LinearIterator rngit(rngexpr.getLinearIterator());
              rngit.ok(); ++rngit) {
            env.out() << "Var: " << rngit.getVar() << ", Coef: " <<
               rngit.getCoef() << endl;
         }
      }
      ...
   }
   catch (IloException& e) {
      cerr << "Concert exception caught: " << e << endl;
   }
   catch (...) {
      cerr << "Unknown exception caught" << endl;
   }

   env.end();
   return 0;
}  // END main
...