Проблема с GLPK при использовании переменной для ограничения суммирования - PullRequest
0 голосов
/ 13 мая 2018

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

s.t. accumulative_times{i in JOBS}: actimes[i] = sum{j in  PLACES,k in JOBS : j <= placing[i] } t[k,j]*time[k];

со следующими определениями:

param n >=0;

set JOBS  := 1..n;
set PLACES := 1..n;


param d{PLACES};
param time{JOBS};
var t{i in PLACES,j in JOBS} binary;
var delay{i in JOBS} integer;
var placing{i in JOBS} integer;
var actimes{i in JOBS} integer;

s.t. constraint1{i in PLACES} :sum{j in JOBS} t[i,j] =1;


s.t. constraint2{j in JOBS} :sum{i in PLACES} t[i,j] =1;

s.t. place_cons{i in JOBS}: placing[i] = sum{j in PLACES} j*t[j,i];


s.t. accumulative_times{i in JOBS}: actimes[i] = sum{j in  PLACES,k in JOBS : j <= placing[i] } t[k,j]*time[k];

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

1 Ответ

0 голосов
/ 18 мая 2018

GLPK может решать только линейные задачи.Поэтому коэффициенты LP не могут зависеть от переменной.

Вместо размещения целочисленной переменной вы можете использовать массив двоичных переменных, который указывает на то, что задание i ожидает в периоде j.

Или выиспользуйте двоичные файлы, указывающие, что задание i обрабатывается в периоде j, и другие нецелочисленные переменные в зависимости от этих двоичных файлов.

...