2012-07-04 4 views
1

Я борюсь с, казалось бы, простой моделью в MathProg. Модель выглядит следующим образом:Ошибка «вне домена» в MathProg (GLPK)

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 Diet Example, и несмотря на то, что я не вижу разницы в соответствующей части моей модели, он все еще не работает. Что не так?

ответ

0

Параметр 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 могут быть заменены в файле данных.