Задача по оптимизации с меняющимся графом

Тема в разделе "WASM.A&O", создана пользователем vgoltsev, 31 дек 2006.

  1. vgoltsev

    vgoltsev New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2006
    Сообщения:
    11
    У меня есть проблема, которая как мне кажется могла бы быть решена с помощью графов, а опыта работы с ними – нет.
    Задача заключается в следующем:
    Дан связанный неориентированный граф. Причем веса ребер представляют собой квадраты разницы весов вершин. Каждое ребро можно „разрезать”, но при этом веса концевых вершин меняются на сумму веса обеих вершин. Задача – декомпозировать граф на отдельные элементы, причем суммарная цена всех срезов должна быть минимальной. Крайний общий вес вершин не имеет значения.

    Есть ли какие-нибудь стандартные подходы для решения подобных задач (кроме полного перебора, конечно)? Или может возникнет идея алгоритма для поиска оптимального пути декомпозирования постоянно меняющихся графов??
    Предварительно благодарю за любой совет!
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Декомпозировать граф на отдельные элементы- что значит? Разбить чтобы была одна вершина, если так то это все ребра резать вариант один.
    Цена среза это что? Сумаа конечных вершин?
     
  3. vgoltsev

    vgoltsev New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2006
    Сообщения:
    11
    Под "декомпозировать" я имею ввиду разрезать граф на отдельные вершины. А цена каждого среза равна весу разрезаемого ребра. И суммарная цена - соответственно сумме цен всех срезов.

    Цель - срезать все ребра, но надо сделать это с минимальной ценой. Так, как каждый срез сразу меняет вес двух вершин и как следствие - вес связанных с ними ребер. Поэтому общая цена сильно зависит от последовательности разрезания ребер. Надо найти оптимальную (или близкую к ней) последовательность разрезов.
     
  4. vgoltsev

    vgoltsev New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2006
    Сообщения:
    11
    Вот пример такого графа и последовательности срезания ребер:
     
  5. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    vgoltsev
    Вроде есть похожие задачи, связанные с разбиением графов, у меня есть книжки, после НГ посмотрю...
     
  6. vgoltsev

    vgoltsev New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2006
    Сообщения:
    11
    спасибо, буду благодарен :)
     
  7. RElf

    RElf New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2004
    Сообщения:
    159
    "Меняются" - это уменьшаются или как?
    То есть, если до разрезания по ребру (x,y) веса вершин были w(x)=a и w(y)=b, то после разреза веса будут w(x)=-b и w(y)=-a. Так?
    Если так, то веса вершин конечного графа будут образовывать некоторую перестановку весов вершин исходного графа с точностью до знаков.
     
  8. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    vgoltsev
    А пример-то где?
     
  9. vgoltsev

    vgoltsev New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2006
    Сообщения:
    11
    Eсли до разрезания по ребру (x,y) веса вершин были w(x)=a и w(y)=a, то после разреза веса будут w(x)=a+b и w(y)=a+b.

    Посылаю прикрепленным файлом пример в виде doc-файла. В предыдущем сообщении послал тот же файл, но он почему то не появился в форуме.
     
  10. vgoltsev

    vgoltsev New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2006
    Сообщения:
    11
    Не могу понять почему прикрепленный файл не появляется в форуме. Уже 2 раза посылаю. Сейчас посылаю еще раз.
     
  11. vgoltsev

    vgoltsev New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2006
    Сообщения:
    11
    Почему то посланный файл с расширением doc не проходит, а архивированный - проходит но у него исчезает расширение и его невозможно прочесть :dntknw:((.

    попропбую послать файл в Word формате но без расширения.
     
  12. vgoltsev

    vgoltsev New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2006
    Сообщения:
    11
     
  13. vgoltsev

    vgoltsev New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2006
    Сообщения:
    11
    А вот вариант в PDF-формате. Может быть он пройдет.
     
  14. vgoltsev

    vgoltsev New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2006
    Сообщения:
    11
     
  15. RElf

    RElf New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2004
    Сообщения:
    159
    Буду предполагать, что веса всех вершин неотрицательны.

    По индукции несложно показать, что для "звезды" (несколько вершин, каждая из которых соединена единственным ребром с одной и той же центральной вершиной) оптимальной является стратегия разрезов, при которой каждый раз разрезается ребро, ведущее в концевую вершину с минимальным весом.

    Пусть теперь нам дан произвольный граф. Его можно рассматривать как объединение звезд, образованных каждой из вершин и всеми ее соседями так, что каждое ребро (x,y) входит ровно в две звезды: с центром в x и с центром в y. При этом процесс разрезания графа можно рассматривать как разрезание каждой из звезд его составляющих. Понятно, что если каждая из звезд будет разрезана оптимальным образом (см. выше), то и соответствующее разрезание графа будет оптимальным (со стоимостью равной половине суммы стоимости разрезов всех звезд).

    Отсюда немедленно получается такой алгоритм:
    1) Выкидываем из графа изолированные вершины. Если получился пустой граф, КОНЕЦ.
    2) Найдем в графе вершину x с минимальным весом.
    3) Среди соседей x найдем вершину y с минимальным весом.
    4) Разрезаем ребро (x,y).
    5) GOTO 1.

    Нетрудно понять, что для вершин x,y найденных указанным образом, разрезание ребра (x,y) является оптимальным как для звезды с центром в x, так и для звезды с центром в y. Поэтому данный алгоритм дает оптимальную последовательность разрезов ребер графа.
     
  16. RElf

    RElf New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2004
    Сообщения:
    159
    Кстати, в примере (Primer.zip) разрезание графа по ребрам
    (1,3), (3,4), (1,2), (2,3)
    как раз и следует оптимальной стратегии. Так как после первого разреза получилось две вершины с минимальным весом (а именно, вершины 1 и 3), то в качестве x можно выбрать любую из них. В примере выбрана x=3. Если же выбрать x=1, то получится другая последовательность разрезов (которая также является оптимальной):
    (1,3),(1,2),(3,4),(2,3)
     
  17. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    RElf
    То есть если таких вершин несколько, то неважно, какую брать?
    Например если взять граф

    1(1)-2(1)-3(1)-4(10) - в скобках вес вершин, перед скобками номер

    то у нас будет выбор между 1,2 и 3. Если взять 2, то в 3) опять же будет выбор между 1 и 3. В результате возможны две неравноценные последовательности разрезов:
    (1-2),(2-3),(3-4) - стоимость 50
    (2-3),(1-2),(3-4) - стоимость 65

    Если не обсчитался, то получается, что нельзя брать произвольную минимальную вершину. Значит нужен какой-то дополнительный критерий?
     
  18. RElf

    RElf New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2004
    Сообщения:
    159
    Да, я не учел, что удаление ребра (x,y) изменяет также звезды, где x и/или y являются концевыми вершинами. Это влияние надо осмыслить...
    Но в любом случае, приведенный алгоритм можно причислить к жадным, так как на каждом ходу он делает локально-оптимальный выбор.
     
  19. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    RElf

    У меня была немного другая идея: если x-y ребро, xw и yw - вес вершин x и y (всегда положительный), a - количество ребер содержащих x (кроме x-y) и b - количество ребер содержащих y (кроме x-y), то можно попытаться всегда разрезать ребро с минимальным "потенциалом" xw*b+yw*a. В случае звезды получается та же самая стратегия, что и у тебя, и для графа в примере тоже выходит оптимальная последовательность. Но все равно алгоритм как-то не сильно нравится, буду придумывать контрпример.
     
  20. vgoltsev

    vgoltsev New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2006
    Сообщения:
    11
    Спасибо за предложения алгоритмов!
    Я попробовал реализовать и сравнить оба предложенных варианта. Оба алгоритма работают очень быстро, но к сожалению дают не очень хорошие решения, часто одинаковые.
    Они не находят лучшее решение даже для маленьких графов (с числом вершин <= 5) и не дают хорошего приближения для больших графов (например, 32 вершины).
    Тупой случаен перебор вариантов при случайном обмене ребер в последовательности разрезания, который работает очень медленно и не дает достаточно хороших результатов, но за 10 секунд находит результат для суммы срезов, который на 1-5 порядков ниже, чем при выборе пути по определенным критериям. :dntknw: