Ошибка "вне домена" в 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
можно поменять местами в файле данных.