Да, это целочисленная проблема программирования. Вы можете написать это как:
minimize |x1 - x2| + |x2 - x3| + ... + |xn-1 - xn|
subject to x1 + x2 + x3 + ... + xn == c,
xi == Ai1*yi1 + Ai2*yi2 + ... + Aip*yip, i=1,...,n,
yi1 + yi2 + ... + yip == 1, i=1,...,n,
yij binary for i=1,...,n j=1,...,p,
xi integer for i=1,...,n,
здесь Aij - это известные входные данные, которые описывают, какие целые числа может принимать конкретное значение xi. Ниже приведен конкретный пример с 3 переменными (n = 3), где каждый xi может принимать одно из двух целочисленных значений (p = 2). То есть x1 может быть 1 или 3, x2 может быть 3 или 4, x3 может быть 2 или 3.
minimize |x1 - x2| + |x2 - x3|
subject to x1 + x2 + x3 == 8,
x1 == 1*y11 + 3*y12,
x2 == 3*y21 + 4*y22,
x3 == 2*y31 + 3*y32,
y11 + y12 == 1,
y21 + y22 == 1,
y31 + y32 == 1,
yij binary i=1,2,3 j=1,2
xi integer i=1,2,3
Вы можете переформулировать вышеуказанную проблему как MIP (смешанная целочисленная программа), создав
новый набор переменных u для представления целевой функции.
minimize u1 + u2 + ... + un
subject to ui >= xi - xi+1, i=1,...,n-1,
ui >= xi+1 - xi, i=1,...,n-1,
x1 + x2 + x3 + ... + xn == c,
xi == Ai1*yi1 + Ai2*yi2 + ... + Aip*yip, i=1,...,n,
yi1 + yi2 + ... + yip == 1, i=1,...,n,
yij binary for i=1,...,n j=1,...,p,
xi integer for i=1,...,n,
ui real for i=1,...,n-1,
Вы можете использовать любой стандартный MIP solver для решения вышеуказанной проблемы.