Каноническая форма задачи ЛП

Будем считать, что задача линейного программирования записана в канонической форме, если ее целевая функция максимизируется, ограничения имеют вид равенств с неотрицательной правой частью и все переменные неотрицательны.

Задача линейного программирования в канонической форме имеет вид:

f = c1x1 + c2x2 +…+ cnxn → max;

 

a11x1 + a12x2 +…+ a1nxn = b1,

a21x1 + a22x2 +…+ a2nxn = b2, (4)

……………………………..

am1x1 + am2x2 +…+ amnxn = bm,

 

xj >= 0 (j= 1, n); bi >= 0 (i= 1, m).

Так как общая задача линейного программирования имеет ограничения не только вида «=», но и «<=», «>=», а целевая функция может либо максимизироваться, либо минимизироваться, то необходимо уметь приводить любые задачи линейного программирования к канонической форме. С этой целью рассмотрим два частных вида задач линейного программирования и покажем, как эти задачи привести к канонической форме.

 

Одна из частных задач линейного программирования может быть представлена моделью:

 

f = c1x1 + c2x2 +…+ cnxn → max;

 
 


a11x1 + a12x2 +…+ a1nxn <= b1,

a21x1 + a22x2 +…+ a2nxn <= b1, (5)

……………………………..

am1x1 + am2x2 +…+ amnxn <= bm,

 

xj >= 0 (j= 1, n), где bi >= 0 (i= 1, m).

 

Левая часть каждого ограничения данной задачи меньше либо равна правой. Для того, чтобы левая часть ограничения была равна правой, необходимо к левой части каждого ограничения прибавить соответственно неотрицательные переменные xn+1, xn+2,…, xn+m. Эти переменные вводятся в целевую функцию с нулевыми коэффициентами, чтобы не изменить ее значение.

 

После приведения к канонической форме задача (5) будет иметь вид:

 

f = c1x1 +…+ cnxn + 0*xn+1 + 0*xn+2 +…+ 0*xn+m → max;

 

 

a11x1 +…+ a1nxn + xn+1 = b1,

a21x1 +…+ a2nxn + xn+2 = b2, (6)

…………………………….

am1x1 +…+ amnxn + xn+m = bm,

 

xj >= 0 (j= 1, n+m).

 

Рассмотрим другой частный вид задачи линейного программирования:

f = c1x1 + c2x2 +…+ cnxn → min;

 

 

a11x1 + a12x2 +…+ a1nxn >= b1,

a21x1 + a22x2 +…+ a2nxn >= b2, (7)

……………………………..

am1x1 + am2x2 +…+ amnxn >= bm,

 

xj >= 0 (j= 1, n),

где bi >= 0 (i= 1, m).

 

Определение минимального значения целевой функции f можно свести к определению максимального значения функции (- f), так как min f = - max (- f).

Для приведения ограничений вида «>=» к ограничениям-равенствам необходимо из левой части каждого ограничения вычесть соответственно неотрицательные переменные xn+1, xn+2,…, xn+m. Эти переменные вводятся в целевую функцию с нулевыми коэффициентами, чтобы не изменить ее значение.

 

После приведения к канонической форме задача (7) будет иметь вид:

 

f = - c1x1 -…- cnxn + 0*xn+1 + 0*xn+2 +…+ 0*xn+m → max;

 

a11x1 +…+ a1nxn - xn+1 = b1,

a21x1 +…+ a2nxn - xn+2 = b2, (8)

…………………………….

am1x1 +…+ amnxn - xn+m = bm,

 

xj >= 0 (j= 1, n+m).

 

Таким образом, если в задаче линейного программирования определяется минимум целевой функции, то такую задачу необходимо свести к определению максимума целевой функции, а все имеющиеся ограничения вида «<=» и «>=» привести к ограничениям-равенствам.

 

Замечание. Требование максимизации целевой функции при приведении задачи к канонической форме не обязательно и выдвигается с целью простоты изложения материала, связанного с решением задач линейного программирования симплекс-методом. Методика решения задач на минимум несколько отличается от методики решения задач на максимум. Поэтому требование максимизации целевой функции дает возможность решать задачу по единому алгоритму.