2014-10-10 3 views
1

Я собираюсь провести оптимизацию, но получаю сообщение об ошибке, которое я не могу найти. Компилятор жалуется, что servicetime, startlimit и endlimit не являются недействительными. В частности, компилятор жалуется на ограничение TimeConstraint, что нет значения для servicetime ['ORIGINS'].AMPL: недопустимые индексы

Ограничение на вопрос:

subject to TimeConstraint {k in H}: sum{i in UNI, j in UNI} servicetime[i]*x[i,j,k] <= 1440; 

где:

set ORIGINS; 
set DESTINATIONS; 
set UNI; 
param servicetime{UNI} integer > 0; 
var x{UNI,UNI, H} binary; 
param startlimit{UNI}; 
param endlimit{UNI}; 

файл .dat является:

set ORIGINS := 1 2 3 4 5 6 7; 
set DESTINATIONS := 8 9 10 11 12 13 14; 
set UNI = ORIGINS union DESTINATIONS; 


param: startlimit endlimit servicetime:= 
1 0 1440 360 
2 0 1440 360 
3 0 1440 360 
4 0 1440 360 
5 0 1440 360 
6 0 1440 120 
7 0 1440 120 
8 0 1440 360 
9 0 1440 360 
10 0 1440 360 
11 0 1440 360 
12 0 1440 360 
13 0 1440 120 
14 0 1440 120; 

Я не могу видеть, как это не работает. Для меня это выглядит точным. Надеюсь, кто-то может пролить свет на это! С уважением,

+1

Как определяются начальный и конечный ограничения? – vitaut

+1

Спасибо, что ответили! У меня были некоторые проблемы с Интернетом, поэтому я не смог войти в систему до сих пор, чтобы проверить форумы. Я редактировал свое оригинальное сообщение, чтобы включить определения. – Cenderze

ответ

1

AMPL формат данные не допускают выражения, так ORIGINS, union и DESTINATIONS интерпретируются буквально как строки, а не набор выражение ORIGINS union DESTINATIONS в отчете данных

set UNI = ORIGINS union DESTINATIONS; 

Вы можете исправить это инициализация набор в декларации в файле модели:

set ORIGINS; 
set DESTINATIONS; 
set UNI = ORIGINS union DESTINATIONS; 
param servicetime{UNI} integer > 0; 
... 
+1

Спасибо большое! Это решило мою проблему! Из документации, которую я прочитал, не всегда было очевидно, в каких файлах должны записываться файлы. – Cenderze

Смежные вопросы