Ошибка "вне домена" в MathProg (GLPK)

Я борюсь с, казалось бы, простой моделью в MathProg. Модель выглядит следующим образом:

set W;
set V;

param b {W, V} binary;
param p;

var w {j in W} <= 0, >= 1;

minimize obj: 0;

subject to within_radius_of {i in V}:
    sum {j in W} b[i,j] * w[j] >= 1;

subject to p_limit:
    sum {j in W} w[j] <= p;

end;

Когда я запускаю его, это дает мне ошибку feasibility.glp:11: b[v1,w1] out of domain, Я понятия не имею, что происходит не так. Еще более странно для меня, если я изменю соответствующую строку на b[j,i] он продолжает выдавать одну и ту же ошибку (не b[w1,v1] как я и предполагал).

Я тщательно осмотрел пример диеты AMPL, и, несмотря на то, что не вижу различий в соответствующей части моей модели, он все равно не работает. Что случилось?

1 ответ

Параметр b объявлен как binary поэтому он может принимать только значения 0 или 1. Вы не предоставили файл данных, но сообщение об ошибке предполагает, что данные для b находится вне домена (не 0 или 1), например:

data;
set W := w1;
set V := v1;
param b := w1 v1 0.5;

AMPL дает более подробное сообщение об ошибке в этом случае:

error processing param b['w1','v1']:
    failed check: param b['w1','v1'] = 0.5
        is not binary (0 or 1);

Причина, по которой порядок индексов в данном случае не имеет значения, заключается в том, что данные для b проверяется полностью, прежде чем модель будет фактически создана. Так что кажется, что w1 а также v1 можно поменять местами в файле данных.

Другие вопросы по тегам