amp — Построение нескольких моделей (итеративно) в C ++ (разложение по Бендерсу с несколькими сценариями)

Я пытаюсь написать код разложения Benders на C ++, чтобы решить проблему местоположения объекта. Это пример двухэтапного стохастического программирования, и параметры спроса зависят от сценариев. Я написал подобный код в AMPL и раньше, и запуск файла запускался следующим образом:

option solver cplexamp;

option omit_zero_rows 1;
option display_eps .000001;
option solver_msg 0;
option show_boundto1 0;

problem Master: r, y, theta,
Master_Cost, Cut_Defn, Open_Facilities_Facility_Capacity, Number_of_Facilities_Per_Node;

problem Sub{s in 1..NSec}:
{k in 1..K, (i,j) in LINKS} x[k,s,i,j],
{k in 1..K, i in 1..nnodes} z[k,s,i],
{k in 1..K, i in 1..nnodes} w[k,s,i],
BSP_Cost[s],
{i in 1..nnodes, k in 1..K} Flow_Conservation[i,k,s],
{(i,j) in LINKS} Arc_Capacity[i,j,s];

let nCUT := 0;
let {s in 1..NSec} theta[s] := 0;
let {k in 1..K, i in 1..nnodes} R[k,i] := 0;

param GAP default Infinity;
param newGAP;

Однако в C ++ я не знаю, как создавать подзадачи (модели сборки) по отношению к сценариям. (Я должен построить модель для каждого сценария, индексируемого s)

Ниже приведена часть генерации подзадачи моего кода (количество моделей); однако я понял, что это неправильно, потому что это только добавление ограничений к одной большой проблеме вместо s подзадач.

IloModel model_sub(env);

IloObjective Objective_sub(env);

model_sub.add(Objective_sub);

for (int s=0; s<S; s++){
for (int i=0; i<I; i++){
for (int j=0; j<J; j++){
model_sub.add(MU[i][s] + Beta[j][s] <= c[j][i]);
}
}
}

IloCplex cplex_sub(model_sub);

Любая помощь приветствуется, большое спасибо.

Замечания: Эта ссылка имеет код, который работает только с одной подзадачей (один сценарий). Это в основном то, что я пытаюсь воспроизвести (или основать свой код), если кому-то интересно. Если у вас также есть ссылка или файл кода Benders с несколькими сценариями, это также было бы удивительно щедро.

Еще раз спасибо.

1

Решение

Вы можете иметь один IloModel по сценарию или есть один IloModel для вашей подзадачи, но изменяйте ее каждый раз, когда вам нужно решить проблему для конкретного сценария.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector