Or tools CP-SAT

Решаю с помощью Google Or-tools на c# следующую классическую задачку - есть длинные заготовки (дорожки), из них надо нарезать нужное количество отрезков (плиты). Соответственно, создаем массив, в котором указывается сколько штук конкретной плиты нужно взять (нарезать) из конкретной дорожки.

// Массив привязок плит к дорожке
IntVar[,] arrSlabOnTrack = new IntVar[slabsCount, tracksCount];
for (int i = 0; i < slabsCount; i++)
{
    for (int j = 0; j < tracksCount; j++)
    {
        arrSlabOnTrack[i,j] = model.NewIntVar(0, varUpperBound, $"arrSlabOnTraсk[{i},{j}]");
    }
}

Также создается массив переменных-индикаторов:

IntVar[] arrTrackUsed = new IntVar[tracksCount];

в котором указывается использовалась ли та или иная дорожка(заготовка) для производства ходя бы одной плиты.

Вопрос: как записать это условие для незафиксированного жестко на этапе компиляции числа плит и дорожек, к примеру, если взять дорожку с индексом 2:

    if (arrSlabOnTrack[0,2] >0 || arrSlabOnTrack[1,2] >0 || arrSlabOnTrack[2,2] >0 || ...  arrSlabOnTrack[N,2] >0 ) 
    {
        arrTrackUsed[2] = 1;
    } 

Где-то прочитал, что для этого нужно использовать model.AddMaxEquality() но у меня с ней ничего не получилось, вполне возможно, я неверно записывал.


Ответы (0 шт):