Представьте себе, что существует машинная среда с 5 этапами производства, и каждый из этих этапов содержит различное количество идентичных машин (так называемый цех с гибким потоком).
Теперь есть задания, которые нужно запланировать.Все задания должны начинаться на этапе 1 и обрабатываться на этапах производственной среды от этапа 1 до этапа 5. На каждом этапе только одна машина должна работать над одним заданием.Для каждой дополнительной работы требуется только максимум один компьютер на каждом этапе (некоторые задания могут пропустить этап 4, поскольку их там не нужно готовить).
У меня есть 2 ограничения с переменной решения x [j] [i] [f].
Первый говорит, что каждое задание может быть обработано макс.одна машина на сцену.Второй говорит, что каждая машина может обрабатывать только макс.одна работа одновременно.
Теперь моя задача - определить переменную решения, потому что количество машин f зависит от стадии i.Т.е.:
- ступень i = 1: m [1] = 3 машины
- ступень i = 2: m [2] = 2 машины
- ...и т. д.
Таким образом, верхняя граница (т. е. m [i]) суммы обоих ограничений C5 и C6 зависит от значения i.
// Indices
int Nmax = ...;
range N = 1..Nmax; // jobs j in N
int Mmax = ...;
range M = 1..Mmax; // stages i in M
{int} m[M] = [{1,2,3},{1,2},{1,2,3,4,5},{1},{1,2,3}]; // Numbers of machines per stage
{int} F = union(i in M) m[i];
//decision variables:
dvar int+ S[N][M]; // starting time of job j in stage i
dvar int+ E[N]; // earliness of job j
dvar int+ T[N]; // tardiness of job j.
dvar boolean x[N][M][F]; // decision variable
// objective function
dexpr float Costs = sum(j in N) (E[j] + T[j]);
minimize Costs
subject to{
C5: forall (j in N, i in M) sum(f in m[i]) x[j][i][f] <= 1;
C6: forall(i in M, f in m[i]) sum(j in N) x[j][i][f] <= 1;
}
К счастью, у меня больше нет сообщений об ошибках.Но кажется, что CPLEX не понимает, что число машин принадлежит этапам.
Например: как решение для переменной решения x [j] [i] [f] я получил семь 5x5-матрицы.Таким образом, одна матрица для каждой работы, которая на первый взгляд кажется правильной.Но все значения матриц равны нулю.Более того, cplex запланировал задания на этапе 2 таким образом, чтобы было как минимум 3 параллельных компьютера, но их было всего 2 ...