Метод декомпозиции Данцига — Вулфа представляет собой специализированный вариант симплекс-метода.
 В 1960 г. Джордж Данциг и Филип Вулфruen разработали метод декомпозиции для решения задач высокой размерности со специальной структурой матрицы ограничений.
 Этот метод оказался наиболее эффективным для решения задач, матрица ограничений которых имеет блочно-диагональный вид с небольшим числом переменных. Однако, как показали дальнейшие исследования, метод применим также и для задач линейного программирования с матрицей общего вида. Соответствующий метод предложен Д. Б. Юдиным и Э. Г. Гольштейном и называется блочным программированием.
 Отличительной особенностью метода декомпозиции является использование координирующей задачи, которая имеет, по сравнению с исходной, небольшое число строк и большое число столбцов.
 Существенным является то, что для решения координирующей задачи не требуется задания
всех столбцов в явном виде. Они генерируются в процессе использования симплекс-метода. Такой подход называют методом генерации столбцов.
 Достаточно уметь генерировать столбец и иметь процедуру, выбирающую столбец для ввода в базис.
 Часто такая процедура сводится к решению определенной подзадачи (не обязательно линейного программирования).
 Лемма Пусть 
  
    
      
        R
      
    
    {\displaystyle R}
  
 - непустое замкнутое ограниченное множество в евклидовом пространстве и обладает конечным числом 
  
    
      
        K
      
    
    {\displaystyle K}
  
 крайних точек, которые здесь будут обозначаться 
  
    
      
        
          z
          
            k
            =
            1
            :
            K
          
        
      
    
    {\displaystyle z_{k=1:K}}
  
. Тогда любая точка 
  
    
      
        z
      
    
    {\displaystyle z}
  
 множества 
  
    
      
        R
      
    
    {\displaystyle R}
  
 может быть представлена в виде выпуклой комбинации крайних точек множества R, т.е. для 
  
    
      
        z
      
    
    {\displaystyle z}
  
 найдутся неотрицательные числа 
  
    
      
        
          δ
          
            k
          
        
      
    
    {\displaystyle \delta _{k}}
  
 с общей суммой единица (
  
    
      
        
          ∑
          
            k
            =
            1
          
          
            K
          
        
        
          δ
          
            m
          
        
        =
        1
      
    
    {\displaystyle \sum _{k=1}^{K}\delta _{m}=1}
  
) и такие, что 
 (1) 
  
    
      
        z
        =
        
          ∑
          
            k
            =
            1
          
          
            K
          
        
        
          δ
          
            k
          
        
        
          z
          
            k
          
        
      
    
    {\displaystyle z=\sum _{k=1}^{K}\delta _{k}z_{k}}
  
.
 Пусть поставлена задача
 Максимизировать
 (2) 
  
    
      
        c
        [
        N
        ]
        x
        [
        N
        ]
      
    
    {\displaystyle c[N]x[N]}
  
 
 при ограничениях
 (3) 
  
    
      
        A
        [
        
          M
          
            1
          
        
        ,
        N
        ]
        x
        [
        N
        ]
        =
        b
        [
        
          M
          
            1
          
        
        ]
      
    
    {\displaystyle A[M_{1},N]x[N]=b[M_{1}]}
  
 
 (4) 
  
    
      
        A
        [
        
          M
          
            2
          
        
        ,
        N
        ]
        x
        [
        N
        ]
        =
        b
        [
        
          M
          
            2
          
        
        ]
      
    
    {\displaystyle A[M_{2},N]x[N]=b[M_{2}]}
  

 (5) 
  
    
      
        x
        [
        N
        ]
        ≥
        0
        [
        N
        ]
      
    
    {\displaystyle x[N]\geq 0[N]}
  

 Ограничения (3) задают симплекс S, пусть 
  
    
      
        z
        [
        K
        ]
      
    
    {\displaystyle z[K]}
  
 - его крайние точки.
 Пусть x – допустимое решение
По лемме 
  
    
      
        x
        =
        z
        [
        N
        ,
        K
        ]
        ⋅
        δ
        [
        K
        ]
      
    
    {\displaystyle x=z[N,K]\cdot \delta [K]}
  

 Подставим последнее выражение в (2) и (3).
 Задача примет вид
 Максимизировать
(6) 
  
    
      
        (
        c
        [
        N
        ]
        ⋅
        z
        [
        N
        ,
        K
        ]
        )
        ⋅
        δ
        [
        K
        ]
        =
        g
        [
        K
        ]
        ⋅
        δ
        [
        K
        ]
      
    
    {\displaystyle (c[N]\cdot z[N,K])\cdot \delta [K]=g[K]\cdot \delta [K]}
  

 при ограничениях
 (7) 
  
    
      
        (
        A
        [
        
          M
          
            1
          
        
        ,
        N
        ]
        ⋅
        z
        [
        N
        ,
        K
        ]
        )
        ⋅
        δ
        [
        K
        ]
        =
        D
        [
        
          M
          
            1
          
        
        ,
        K
        ]
        ⋅
        δ
        [
        K
        ]
        =
        b
        [
        
          M
          
            1
          
        
        ]
      
    
    {\displaystyle (A[M_{1},N]\cdot z[N,K])\cdot \delta [K]=D[M_{1},K]\cdot \delta [K]=b[M_{1}]}
  
 
 (8) 
  
    
      
        δ
        [
        K
        ]
        ⋅
        1
        [
        K
        ]
        =
        1
      
    
    {\displaystyle \delta [K]\cdot 1[K]=1}
  
.
 Эта задача эквивалентна исходной (2)-(5) и называется координирующей задачей.
 Она имеет только 
  
    
      
        
          |
        
        
          M
          
            1
          
        
        
          |
        
        +
        1
      
    
    {\displaystyle |M_{1}|+1}
  
 строк ограничений по сравнению с 
  
    
      
        
          |
        
        
          M
          
            1
          
        
        
          |
        
        +
        
          |
        
        
          M
          
            2
          
        
        
          |
        
      
    
    {\displaystyle |M_{1}|+|M_{2}|}
  
 строками исходной задачи, и очень большое число столбцов 
  
    
      
        
          |
        
        K
        
          |
        
      
    
    {\displaystyle |K|}
  
, равное числу крайних точек множества 
  
    
      
        S
      
    
    {\displaystyle S}
  
. Чтобы не хранить все эти столбцы в памяти ЭВМ, будем получать их по мере необходимости, пользуясь методом генерации столбцов.
 Решаем задачу (6)-(8) симплекс-методом с использованием метода генерации столбцов.
 Для простоты предположим, что уже известно некоторое допустимое базисное решение.
 Обозначим через 
  
    
      
        δ
      
    
    {\displaystyle \delta }
  
 ограничение (8), тогда двойственные переменные - это вектор 
  
    
      
        d
        [
        
          M
          
            1
          
        
        ∪
        
          δ
        
        ]
      
    
    {\displaystyle d[M_{1}\cup {\delta }]}
  
.
 Для ввода в базис необходимо найти 
  
    
      
        z
        [
        N
        ,
        m
        ]
      
    
    {\displaystyle z[N,m]}
  
, такой, что
 
  
    
      
        d
        [
        
          M
          
            1
          
        
        ]
        D
        [
        
          M
          
            1
          
        
        ,
        K
        ]
        +
        d
        [
        δ
        ]
        <
        g
        [
        m
        ]
      
    
    {\displaystyle d[M_{1}]D[M_{1},K]+d[\delta ]<g[m]}
  

 Таким образом достаточно найти  m, на котором достигается минимум
 (9) 
  
    
      
        d
        [
        
          M
          
            1
          
        
        ]
        A
        [
        
          M
          
            1
          
        
        ,
        N
        ]
        ⋅
        z
        [
        N
        ,
        m
        ]
        +
        d
        [
        δ
        ]
        −
        c
        [
        N
        ]
        z
        [
        N
        ,
        m
        ]
      
    
    {\displaystyle d[M_{1}]A[M_{1},N]\cdot z[N,m]+d[\delta ]-c[N]z[N,m]}
  

 что эквивалентно решению задачи
 минимизировать
(10) 
  
    
      
        (
        d
        [
        
          M
          
            1
          
        
        ]
        A
        [
        
          M
          
            1
          
        
        ,
        N
        ]
        −
        c
        [
        N
        ]
        )
        ⋅
        x
        [
        N
        ]
        )
      
    
    {\displaystyle (d[M_{1}]A[M_{1},N]-c[N])\cdot x[N])}
  
 
 при ограничениях (4) и (5).
 Если найденный минимум не будет больше 
  
    
      
        −
        d
        [
        δ
        ]
      
    
    {\displaystyle -d[\delta ]}
  
, задача решена.
 В противном случае столбец 
  
    
      
        D
        [
        
          M
          
            1
          
        
        ,
        k
        ]
      
    
    {\displaystyle D[M_{1},k]}
  
, соответствующий найденному решению, вводим в базис.
 Пусть ограничения (4) имеют блочную структуру
 Задача (10),(4),(5) распадается на отдельные подзадачи
 Найти минимум
 (11) 
  
    
      
        (
        d
        [
        
          M
          
            k
          
        
        ]
        A
        [
        
          M
          
            k
          
        
        ,
        
          N
          
            k
          
        
        ]
        −
        c
        [
        
          N
          
            k
          
        
        ]
        )
        z
        [
        
          N
          
            k
          
        
        ]
        +
        d
        [
        δ
        ]
      
    
    {\displaystyle (d[M_{k}]A[M_{k},N_{k}]-c[N_{k}])z[N_{k}]+d[\delta ]}
  

 при условиях
 (12)  
  
    
      
        A
        [
        
          M
          
            k
          
        
        ,
        
          N
          
            k
          
        
        ]
        z
        [
        
          N
          
            k
          
        
        ]
        =
        b
        [
        
          M
          
            k
          
        
        ]
      
    
    {\displaystyle A[M_{k},N_{k}]z[N_{k}]=b[M_{k}]}