Гуроби не может добавить ограничений

Я пишу программу на Java для решения проблемы MIP с Gurobi. Эта проблема требует множества ограничений и переменных, но первые из них не могут быть добавлены в мою модель. Глубже в проблеме, когда я пытаюсь добавить ограничение, модель показывает его (читается через отладку), но row_no равно -1. Перво-наперво:

  • Создайте многомерную матрицу переменных:

        GRBVar[][] x = new GRBVar[iMax][jMax];
        for (int i = 0; i < iMax; i++) {
            for (int j = 0; j < jMax; j++) {
                x[i][j] = model.addVar(0.0, GRB.INFINITY, 0.0, GRB.SEMIINT, "xi" + i + "j" + j);
            }
        }
    
  • Добавьте ограничения (выглядит как Xij ‹10):

        for (int i = 0; i < iMax; i++) {
            for (int j = 0; j < jMax; j++) {
    
                GRBLinExpr lhs = new GRBLinExpr();
                GRBLinExpr rhs = new GRBLinExpr();
    
                lhs.addTerm(1.0, x[i][j]]);
                rhs.addConstant(10);
    
                model.addConstr(lhs, GRB.LESS_EQUAL, rhs, "Vi" + i + "j" + j);
            }
        }
    
  • Отладка проекта: есть iMax * jMax столбца, iMax * jMax переменные, iMax * jMax ограничения (с row_no = -1) и 0 строк.

Любая идея?

РЕДАКТИРОВАТЬ

Я не уверен в использовании row_no, но полагаю, что Gurobi (с абстрактной точки зрения) организует данные в псевдоматрицу, где переменные хранятся в виде столбцов, а ограничения - в виде строк. Почему я так говорю? Поскольку каждый раз, когда я добавляю переменную, счетчик столбцов увеличивается на 1, а его col_no связаны с конкретным столбцом, вместо этого, когда я добавляю ограничение, счетчик строк не изменяется.

Отладка модели Гуроби

Столбцы: http://www.gurobi.com/documentation/6.0/refman/java_grbmodel_getcol.html Строки: http://www.gurobi.com/documentation/6.0/refman/java_grbmodel_getrow.html

РЕДАКТИРОВАТЬ 2

У меня нет проблем со столбцами, строками или чем-то еще, но когда я пытаюсь решить расслабленную модель, Гуроби показывает следующий результат:

Optimize a model with 0 rows, 1475400 columns and 0 nonzeros
Coefficient statistics:
  Matrix range    [0e+00, 0e+00]
  Objective range [0e+00, 0e+00]
  Bounds range    [1e+00, 1e+03]
  RHS range       [0e+00, 0e+00]
Presolve removed 0 rows and 1475400 columns
Presolve time: 0.36s
Presolve: All rows and columns removed
Iteration    Objective       Primal Inf.    Dual Inf.      Time
       0    0.0000000e+00   0.000000e+00   0.000000e+00      1s

Solved in 0 iterations and 0.72 seconds
Optimal objective  0.000000000e+00

Решение возможно, но не может показать никакой полезной информации. Я подумал, что мне следует обновлять модель только после добавления переменных, а не ограничений. Кроме того, я прочитал из документации Gurobi, что если модель необходимо обновить, она выдает исключение (не в моем случае):

«Наиболее частым признаком отсутствия обновления является исключение NOT_IN_MODEL, которое указывает на то, что объект, на который вы пытаетесь сослаться, еще не включен в модель»

РЕДАКТИРОВАТЬ 3

Я следил за вашим предложением обновить модель (после добавления ограничений), и все работает правильно. Я предположил, что это не было обязательным, но, в отличие от документации (и примеров кода), это так.


person Samuele Colombo    schedule 25.04.2015    source источник
comment
Я не совсем понимаю: когда вы решаете модель, действительно ли нарушаются ограничения? Или каков именно эффект row_no = -1?   -  person J Fabian Meier    schedule 26.04.2015
comment
А каков практический эффект? Гуроби решает вашу модель правильно или нет?   -  person J Fabian Meier    schedule 26.04.2015
comment
PS: Возможно, для просмотра всех эффектов требуется model.update ().   -  person J Fabian Meier    schedule 26.04.2015


Ответы (1)


Я предполагаю, что ваша модель показывает странное поведение, потому что все ваши переменные имеют коэффициент 0,0 в целевой функции. Более того, установка всех переменных на ноль - возможное решение.

Хотя я не могу объяснить внутренний механизм Gurobi для обнуления строк, он определенно дает правильный ответ для этой (странной) модели.

person J Fabian Meier    schedule 26.04.2015