Я использую CPLEX для решения проблемы с отправкой грузовиков MILP, и обнаружил две проблемы, которые не могу решить.
Сначала я пытаюсь использовать переменную с несколькими индексами как
int p=...; //plant index
int r=...; //request index
int k=...; //truck index
int t=...; //concrete type index
range plant = 1..p;
range request = 1..r;
range truck = 1..k;
int m=...;
int j=...;
range deliveries = 1..m; //total number of delivery each customer
range jobs = 1..j; //total jobs in a day each truck
dvar boolean x[plant][request][deliveries][truck][jobs]
но индексные поставки (m) и задания (j) являются подмножеством запроса (r) и грузовика (k) соответственно. Максимальное количество доставок «m» зависело от спроса на запрос, а максимальное количество заданий зависело от времени в пути. Затем он изменился согласно запросу и грузовику.
Во-вторых, значения «m» и «j» получают путем вычисления:
m [r] = сводка (max {Q [r] [t]} / мин {C [k]})
j [k] = сводка (длина рабочего дня / минимальная длина задачи для каждого грузовика [k])
для моего "m" моего текущего кода, который я пытался использовать, но он не работает, потому что не может применить индекс (первый вопрос):
float maxQ = maxl(demand[r][t]);
float minC = minl(capacity[k]);
int m = ftoi(ceil(maxQ/minC));
range deliveries = 1..m;
но для расчета "минимальной длины задачи для каждого грузовика", полученного из ограничений времени в пути, рассчитанных после запуска модели, следует ли вводить значение "j" в качестве константы, а затем обновлять его при запуске модели? или это можно сделать другим способом? Заранее спасибо.
PS. извините за мой плохой английский.