Главная страница
Навигация по странице:

  • Алгоритм Данцига для линейной одномерной задачи о ранце.

  • 1. Постановка и особенности задач дискретного


    Скачать 177.02 Kb.
    Название1. Постановка и особенности задач дискретного
    Дата15.12.2020
    Размер177.02 Kb.
    Формат файлаpdf
    Имя файлаlect.pdf
    ТипЗадача
    #160820
    страница2 из 3
    1   2   3
    3. Задача о ранце
    Задача об одномерном ранце. Пусть имеется
    n
    предметов, каждый из которых имеет ценность
    0
    >
    j
    c
    и вес
    n
    j
    a
    j
    ,...,
    2
    ,
    1
    ,
    0
    =
    >
    . Имеется ранец рюкзак, грузоподъемность которого
    R
    , при этом

    =
    >
    n
    j
    j
    R
    a
    1
    , те. все предметы в ранец положить невозможно. Необходимо положить в ранец набор предметов с максимальной суммарной ценностью. Введем переменных
    0
    =
    j
    x
    , если предмет с номером
    j
    не кладется в ранец,
    1
    =
    j
    x
    , если предмет с номером
    j
    кладется в ранец,
    n
    j
    ,...,
    2
    ,
    1
    =
    . После введения этих переменных суммарная ценность и грузоподъемность соответственно имеют вид 2
    1
    ,...,
    ,
    ,
    (
    )

    =
    =
    n
    j
    j
    j
    n
    x
    a
    x
    x
    x
    g
    1 Поэтому задача об одномерном ранце имеет вид, (3.1)
    15

    R
    x
    a
    n
    j
    j
    j



    1
    , (3.2)
    { }
    n
    j
    x
    j
    ,...,
    2
    ,
    1
    ,
    1
    ;
    0
    =

    . (Естественно предположить, что Множество допустимых решений этой задачи – это множество мерных булевых векторов
    (
    )
    n
    x
    x
    x
    x
    ,...,
    ,
    2 1
    =
    , удовлетворяющих условию (3.2). Вместе с задачей (3.1)-(3.3) будем рассматривать задачу линейного программирования, в которой вместо условий (3.3) вводятся условия 0
    =


    . (Существование допустимого решения. В задаче (3.1)-(3.3) допустимое решение всегда существует (например, нулевое. Если решить задачу линейного программирования (3.1)-(3.4) ив полученном оптимальном решении заменить дробные значения
    j
    x
    нулевыми, то получим допустимое решение задачи (3.1)-(3.3). Отсев подмножеств булевых векторов, не содержащих оптимальных решений Рассмотрим вектор
    (
    )
    n
    x
    x
    x
    x
    ,...,
    ,
    2 1
    =
    , имеющий единиц и нулей. Если вектор
    x
    является допустимым (те. условие
    (3.2.) выполнено, то можно исключить из дальнейшего рассмотрения векторов, получающихся из
    x
    заменой любого числа единиц нулями, так как для любого такого вектора
    x
    значение функции
    ( )
    x
    f
    будет меньше, чем
    ( )
    x
    f
    . Если вектор
    x
    не является допустимым (те. условие (3.2) не выполняется, то можно исключить из дальнейшего рассмотрения векторов, которые получаются из
    x
    заменой любого числа нулей единицами, так как все эти векторы недопустимы.
    Оценка точности приближенных булевых решений. Пусть
    (
    )
    0 0
    2 0
    1 0
    ,...,
    ,
    n
    z
    z
    z
    z
    =
    - допустимое булево решение задачи (3.1)-(3.3);
    (
    )
    0 0
    2 0
    1 0
    ,...,
    ,
    n
    x
    x
    x
    x
    =
    - оптимальное булево решение
    (
    )
    0 0
    2 0
    1 0
    ,...,
    ,
    n
    y
    y
    y
    y
    =
    - оптимальное решение задачи (3.1)-(3.4). Тогда имеет место следующее неравенство

    ( ) ( ) ( )
    0 0
    0
    y
    f
    x
    f
    z
    f


    . (3.5) Величина
    ( ) ( )
    0 0
    z
    f
    y
    f

    =

    есть гарантированная оценка отклонения приближенного решения от оптимума Нахождение вектора
    0
    y
    связано с решением задачи линейного программирования. Далее будет показано, что задача (3.1)-(3.4) решается просто.
    Алгоритм Данцига для линейной одномерной задачи о ранце.
    Рассмотрим задачу линейного программирования (3.1)-(3.4) и опишем алгоритм нахождения оптимального решения
    (
    )
    0 0
    2 0
    1 Теорема (правило Данцига).
    Пусть переменные
    n
    j
    x
    j


    1
    ,
    перенумерованы так, что
    n
    λ
    λ
    λ



    2 1
    , где
    j
    j
    j
    a
    c /
    =
    λ
    . Тогда оптимальное решение
    (
    )
    0 0
    2 0
    1 0
    ,...,
    ,
    n
    y
    y
    y
    y
    =
    имеет вид 0
    1 0
    2 0
    1
    =
    =
    =
    =

    s
    y
    y
    y
    ,
    0 0
    0 2
    0 1
    =
    =
    =
    =
    +
    +
    n
    s
    s
    y
    y
    y
    ,
    s
    s
    j
    j
    s
    a
    a
    R
    y
    /
    1 1
    0
    

    


    =


    =
    ,
    где
    s
    определяется из условия Смысл этого правила очевиден. Единичные значения следует последовательно назначать переменным, начиная с наибольшей удельной ценности (ценности на единицу веса, при этом
    ( )
    s
    s
    j
    j
    s
    s
    j
    j
    a
    a
    R
    c
    c
    y
    f
    /
    1 1
    1 Если все компоненты
    n
    j
    y
    j
    ,...,
    2
    ,
    1
    ,
    0
    =
    целые (число дробных компонент не больше одной, то
    0 0
    x
    y
    =
    ; если
    1 0
    0
    <
    <
    s
    y
    , то план получится при
    0 0
    =
    s
    y
    , тогда

    ( ) ( )
    s
    s
    j
    j
    s
    a
    a
    R
    c
    z
    f
    y
    f
    /
    1 1
    0 Алгоритмы последовательного назначения единиц для приближенного решения задачи об одномерном ранце.

    Прямые алгоритмы В алгоритмах этого типа в качестве начального рассматривается нулевой вектор, в котором переменным присваиваются единичные значения в соответствии с заданными правилами.
    Правило 1. При построении допустимого целочисленного решения следует назначать единичные значения в соответствии с последовательностью
    n
    j
    j
    j
    λ
    λ
    λ



    2 1
    , начиная с наибольшего значения. Если для некоторого такое назначение выполнить невозможно, то полагаем
    0 0
    =
    k
    j
    z
    и переходим к номеру
    1
    +
    k
    j
    . Процесс завершается после просмотра всех переменных или при нарушении условия. Это правило основано на теореме, приведенной выше.
    Рассмотрим примеры.
    Пример 3.1.
    max
    3 7
    8 4
    5 4
    3 2
    5 6
    10 9
    8 7
    6 5
    4 3
    2 1

    +
    +
    +
    +
    +
    +
    +
    +
    +
    x
    x
    x
    x
    x
    x
    x
    x
    x
    x
    ,
    10 3
    3 2
    2 2
    2 2
    2 10 9
    8 7
    6 5
    4 3
    2 1

    +
    +
    +
    +
    +
    +
    +
    +
    +
    x
    x
    x
    x
    x
    x
    x
    x
    x
    x
    ,
    { Решение. Вычислим значения
    j
    λ
    :
    3 1
    =
    λ
    ,
    2
    /
    5 2
    =
    λ
    ,
    1 3
    =
    λ
    ,
    3 4
    =
    λ
    ,
    2 5
    =
    λ
    ,
    2
    /
    5 6
    =
    λ
    ,
    2 7
    =
    λ
    ,
    3
    /
    8 8
    =
    λ
    ,
    3
    /
    7 9
    =
    λ
    ,
    3 10
    =
    λ
    . Дальнейшие вычисления сведены в табл. Таблица Значения переменных
    0
    j
    y
    ( )
    0
    y
    f
    ( )
    0
    y
    g
    3 1
    =
    λ
    1 0
    1
    =
    y
    6 2
    3 4
    =
    λ
    1 0
    4
    =
    y
    6+3=9 2+1=3 3
    10
    =
    λ
    1 0
    10
    =
    y
    9+3=12 3+1=4 3
    /
    8 8
    =
    λ
    1 0
    8
    =
    y
    12+8=20 4+3=7 18

    2
    /
    5 2
    =
    λ
    1 0
    2
    =
    y
    20+5=25 7+2=9 2
    /
    5 6
    =
    λ
    (
    )
    5
    ,
    0 2
    /
    9 10 0
    6
    =

    =
    y
    25+0,5*5=27,5 Из табл. 3.1 получаем, что 0
    9 0
    7 0
    5 Решение линейной задачи имеет вид 0
    =
    y
    ,
    ( )
    5
    ,
    27 Допустимое целочисленное решение имеет вид 0
    =
    z
    ,
    ( )
    25 Поэтому можно записать
    ( )
    5
    ,
    27 25 Полученное отклонение
    5
    ,
    2
    =

    приближенного решения от оптимума можно улучшить, если обратить внимание на то, что все значения
    j
    c
    целые. Поэтому )
    27 25 Отметим, что в данном примере прибыло бы получено точное решение
    0
    x
    . Первое правило последовательного назначения единичных значений в рассмотренном примере дало достаточно хороший результат. Рассмотрим другой пример, в котором полученное поэтому правилу решение
    0
    z
    сильно отличается от оптимального.
    Пример 3.2.
    max
    200 5
    2 1

    +
    x
    x
    ,
    401 400 5
    2 1

    +
    x
    x
    ,
    { Решение Оптимальное решение
    ( )
    1
    ,
    0 0
    =
    x
    ,
    ( )
    200 Воспользуемся правилом Данцига:
    1 1
    =
    λ
    ,
    5
    ,
    0 2
    =
    λ
    ,
    (
    )
    99
    ,
    0
    ;
    1 0
    =
    y
    ,
    ( )
    203 0
    =
    y
    f
    ,
    ( )
    0
    ;
    1 0
    =
    z
    ,
    ( )
    5 0
    =
    z
    f
    ,
    ( )
    203 Полученный плохой результат можно, по-видимому, объяснить большим разбросом в значениях элементов каждого из векторов
    (
    )
    2 1
    , c
    c
    c
    =
    и
    (
    )
    2 1
    , a
    a
    a
    =
    . В первом примере такого разброса нет. Пример 3.2 указывает
    19
    второе правило последовательного назначения единичных значений в следующей последовательности
    n
    j
    j
    j
    c
    c
    c



    2 1
    . В примере 3.2 по второму правилу получаем )
    1
    ;
    0 0
    =
    z
    ,
    ( )
    200 0
    =
    z
    f
    ,
    ( )
    203 200 Применим второе правило для примера 3.1. Вычисления сведены в табл. Таблица Значения булевых переменных )
    0
    z
    f
    ( )
    0
    z
    g
    8 8
    =
    c
    1 0
    8
    =
    z
    8 3
    7 9
    =
    c
    1 0
    9
    =
    z
    15 6
    6 1
    =
    c
    1 0
    1
    =
    z
    21 8
    5 2
    =
    c
    1 0
    2
    =
    z
    26 10 0
    0 10 0
    7 0
    6 0
    5 0
    4 Получено допустимое целочисленное решение 0
    =
    z
    ,
    ( )
    26 0
    =
    z
    f
    ;
    ( )
    27 26 0


    x
    f
    Сформулируем второе правило последовательного назначения единиц.
    Правило 2. Назначения единичных значений выполняются в соответствии с последовательностью
    n
    j
    j
    j
    c
    c
    c



    2 Можно предложить и другие правила. По-видимому, не представляется возможным указать наилучшее правило из заданного их набора для решения конкретной задачи. Но всегда возможно применение всех правил из набора к этой задаче и выбор лучшего из полученных результатов. Алгоритмы, основанные на описанных здесь правилах, получили название алгоритмов типа «greedy» (жадные, пожирающие алгоритмы. Основная особенность этих алгоритмов состоит в том, что глобальная оптимизация целевой функции заменяется многошаговой локальной оптимизацией на каждом шаге
    Рассмотрим модификации правили, которые в ряде случаев позволяют улучшить допустимые целочисленные решения
    0
    z
    . Эти модификации предполагают фиксацию каждой из переменных последовательно назначениях и 1, значения других переменных определяются с помощью правили В примере 3.1 положим
    0 0
    10
    =
    z
    , остальные значения определим по правилу 1. Вычисления сведены в табл. 3.3.
    Таблица Значения булевых переменных )
    0
    z
    f
    ( )
    0
    z
    g
    3 10
    =
    λ
    0 0
    10
    =
    z
    0 0
    3 1
    =
    λ
    1 0
    1
    =
    z
    6 2
    3 4
    =
    λ
    1 0
    4
    =
    z
    9 3
    3
    /
    8 8
    =
    λ
    1 0
    8
    =
    z
    17 6
    2
    /
    5 2
    =
    λ
    1 0
    2
    =
    z
    22 8
    2
    /
    5 6
    =
    λ
    1 0
    6
    =
    z
    27 10 0
    0 9
    0 7
    0 5
    0 Получено допустимое целочисленное решение 0
    =
    z
    ,
    ( )
    27 0
    =
    z
    f
    ,
    которое в силу условия
    ( )
    27 27 0


    x
    f
    оптимально, те.
    0 Рассмотрим применение правила 2 для этого же примера при
    0 0
    8
    =
    z
    ; здесь Вычисления сведены в табл. 3.4.
    Таблица3.4
    j
    c
    Значения булевых переменных )
    0
    z
    f
    ( )
    0
    z
    g
    8 8
    =
    c
    0 0
    8
    =
    z
    0
    0
    7 9
    =
    c
    1 0
    9
    =
    z
    7
    3
    6 1
    =
    c
    1 0
    1
    =
    z
    13
    5
    5 2
    =
    c
    1 0
    2
    =
    z
    18
    7
    5 6
    =
    c
    1 0
    6
    =
    z
    23
    9
    4 5
    =
    c
    0 0
    5
    =
    z
    23
    9
    21

    4 7
    =
    c
    0 0
    7
    =
    z
    23
    9
    1 10
    =
    c
    1 0
    10
    =
    z
    26
    10
    0 0
    4 Получено булево решение 0
    =
    z
    ,
    ( )
    26 совпадающее с полученным в табл. 3.2 по значению целевой функции.
    Рассмотренные алгоритмы решения одномерной задачи о ранце получили название эвристических Под эвристическими понимаются алгоритмы, основанные на правдоподобных, ноне обоснованных строго предположениях о свойствах оптимального решения задачи. В первом правиле алгоритм точного решения задачи (3.1)-(3.4) переносится на формирование допустимого целочисленного решения задачи (3.1)-(3.3), в результате такого перенесения получается эвристический алгоритм для задачи (3.1)-(3.3). Полученное целочисленное решение может оказаться сильно отклоняющимся от оптимального. Причина такого поведения эвристического алгоритма состоит, по-видимому, в том, что любая эвристика верна лишь в некоторой, неизвестной, как правило, области изменения параметров задачи.
    Двойственные алгоритмы Рассмотренные ранее алгоритмы типа
    «greedy» часто называют прямыми. В алгоритмах этого типа формирование допустимого решения
    0
    z
    начинается с нулевого вектора, те. реализуется процедура подъема по допустимым целочисленным решениям. Формирование допустимого решения
    0
    ω
    в двойственных алгоритмах начинается с вектора
    x
    , все компоненты которого равны 1. Замена единиц нулями начинается с наименьшего значения
    j
    λ
    (или
    j
    c
    ) по возрастанию значений, те. реализуется процедура спуска по недопустимым целочисленным векторам
    В примере 3.1 положим
    0 0
    10
    =
    z
    , остальные значения определим по правилу 1. Вычисления сведены в табл. Таблица Значения булевых переменных )
    x
    f
    ( )
    x
    g
    10
    ,...,
    2
    ,
    1
    ,
    1
    =
    =
    j
    x
    j
    47 20 1
    3
    =
    λ
    0 3
    =
    x
    45 18 2
    5
    =
    λ
    0 5
    =
    x
    41 16 2
    7
    =
    λ
    0 7
    =
    x
    37 14 3
    /
    7 9
    =
    λ
    0 9
    =
    x
    30 11 2
    /
    5 6
    =
    λ
    0 6
    =
    x
    25 Получено двойственное допустимое решение 0
    =
    ω
    ,
    ( ) ( )
    25 Из табл. 3.5 видно, что на последнем шаге можно получить
    0 2
    =
    x
    , тогда двойственное решение имеет вид 0
    =
    ω
    ,
    ( )
    25 0
    =
    ω
    f
    ,
    0 Для иллюстрации работы двойственного алгоритма рассмотрим пример Пример 3.3.

    max
    4 6
    3 2
    1

    +
    +
    x
    x
    x
    ,
    3 2
    2 3
    2 1

    +
    +
    x
    x
    x
    ,
    { Решен и е.

    Поскольку
    1
    ,
    2
    ,
    3 3
    2 1
    =
    =
    =
    λ
    λ
    λ
    , то прямой алгоритм дает допустимое решение 0
    =
    z
    ,
    ( )
    7 0
    =
    z
    f
    ,
    (
    )
    0
    ;
    5
    ,
    0
    ;
    1 0
    =
    y
    ,
    ( )
    8 Вычисления для двойственного алгоритма сведены в табл. Таблица Значения булевых переменных )
    x
    f
    ( )
    x
    g
    23

    j
    λ
    3
    ,
    2
    ,
    1
    ,
    1
    =
    =
    j
    x
    j
    11 5
    1 3
    =
    λ
    0 3
    =
    x
    10 4
    2 2
    =
    λ
    0 2
    =
    x
    6 Получено двойственное решение 0
    =
    ω
    ,
    ( )
    6 0
    =
    ω
    f
    ,
    0 0
    j
    j
    z

    ω
    ,
    ( ) ( )
    0 Для изучения отношения
    ( ) ( )
    0 0
    /
    z
    f
    f
    ω
    рассмотрим пример Пример 2
    3 2
    1

    +
    +
    x
    x
    x
    γ
    ,
    2 2
    3 2
    1

    +
    +
    x
    x
    x
    γ
    ,
    { }
    3
    ,
    2
    ,
    1
    ,
    1 Решение Поскольку
    2 1
    =
    λ
    ,
    2
    /
    3 2
    =
    λ
    ,
    1 3
    =
    λ
    , то
    (
    )
    1
    ;
    0
    ;
    1 0
    =
    z
    ,
    ( )
    1 Для определения
    0
    ω
    вычисления сведены в табл.3.7.
    Таблица Значения булевых переменных )
    x
    f
    ( )
    x
    g
    3
    ,
    2
    ,
    1
    ,
    1
    =
    =
    j
    x
    j
    4 2
    +
    γ
    γ
    +
    3 1
    3
    =
    λ
    0 3
    =
    x
    3 2
    +
    γ
    γ
    +
    2 2
    /
    3 2
    =
    λ
    0 Получено решение для двойственного алгоритма 0
    =
    ω
    ,
    ( )
    γ
    ω
    2 0
    =
    f
    ,
    0 0
    j
    j
    z

    ω
    ,
    ;
    3
    ,
    2
    ,
    1
    =
    j
    ( ) ( )
    0 0
    z
    f
    f
    <
    ω
    ,
    ( )
    ( )
    0 1
    2 2
    lim lim
    0 0
    0 Наряду с задачей об одномерном ранце рассматривается задача о многомерном ранце Упражнения для самостоятельного решения

    Методом Данцига решить задачи о ранце. max
    2 7
    15 13 11 9
    17 7
    6 5
    4 3
    2 1

    +
    +
    +
    +
    +
    +
    x
    x
    x
    x
    x
    x
    x
    ,
    15 2
    6 5
    4 3
    7 7
    6 5
    4 3
    2 1

    +
    +
    +
    +
    +
    +
    x
    x
    x
    x
    x
    x
    x
    ,
    { }
    7
    ,...,
    2
    ,
    1
    ,
    1
    ;
    0
    =

    j
    x
    j
    3.6. max
    3 10 20 10 40 60 60 7
    6 5
    4 3
    2 1

    +
    +
    +
    +
    +
    +
    x
    x
    x
    x
    x
    x
    x
    ,
    10 3
    4 4
    5 3
    7 6
    5 4
    3 2
    1

    +
    +
    +
    +
    +
    +
    x
    x
    x
    x
    x
    x
    x
    ,
    { }
    7
    ,...,
    2
    ,
    1
    ,
    1
    ;
    0
    =

    j
    x
    j
    1   2   3


    написать администратору сайта