Я пишу свою диссертацию о проблеме планирования линий для железнодорожного пассажирского транспорта. Я хочу взглянуть на различные методы, которые рассчитывают надежность в железнодорожной сети. Поскольку у меня нет опыта работы с OPL, я сталкиваюсь с некоторыми проблемами при решении модели. Мой начальник не может мне помочь. Я отчаянно ищу человека, который мог бы помочь мне понять мою модель правильно. Модель должна определять, какие линии подразумевать, вместе с частотой и количеством вагонов поездов, сохраняя при этом минимальные затраты.
У меня есть две следующие проблемы:
У меня есть набор ребер (E) и набор потенциальных линий (L). Как я могу сказать OPL, что, например, строка 1 состоит из ребер 1 и 2. Мне трудно связать эти переменные.
Я работаю с бинарной переменной решения x [L] [F] [C], которая представляет линию, частоту линии и количество вагонов соответственно. Как мне сказать модели, что значение умножается только на значение F. Например, третье ограничение, я хочу умножить значения F и C на capC.
int nv = ...;
range V = 1..nv; //set of stations.
int ne =...;
range E =1..ne; //set of edges.
int nf = ...;
range F = 1..nf; //set of possible frequencies.
int nc = ...;
range C = 1..nc; //set of possible carriages.
int nl = ...;
range L = 1..nl; //set of potential lines.
//Parameters
int capC = ...; //Capacity per carriage
int w[L] = ...; //cost for using line l
int fmin[E] = ...; //min freq per line l
int fmax[E] = ...; //max freq per line l
int h[E] = ...; //Demand edge e
//Decision variable
dvar boolean x[L][F][C];
//Objective function
minimize sum(l in L, f in F, c in C) w[l] * x[l][f][c];
//Constraints
subject to {
forall (e in E)
sum(l in L, f in F, c in C) x[l][f][c] >= fmin[e]; //Min edge freq
forall (e in E)
sum(l in L, f in F, c in C) x[l][f][c] <= fmax[e]; //Max edge freq
forall (e in E)
sum(l in L, f in F, c in C) x[l][f][c] * capC >= h[e]; //Transfer all passengers
forall (l in L)
sum(f in F, c in C) x[l][f][c] <= 1; //Per line at most 1