Целочисленная программа (это может быть хорошей идеей или нет):
Для каждой вершины v пусть x v будет 1, если вершина v посещена, и 0 в противном случае.Для каждой дуги a пусть y a будет количеством раз, которое используется дуга a.Пусть s будет источником, а t будет пунктом назначения.Цель:
увеличить ∑ v значение (v) x v .
Ограничения:
∑ a значение (a) y a ≤ порога ∀v, ∑ a имеет голову v y a - ∑ a имеет хвост v y a = {-1, если v = s;1, если v = t;0 в противном случае (сохранение потока)
∀v ≠ x, x v ≤ ∑ a имеет голову v y a (необходимо ввести вершину для посещения)
∀v, x v ≤ 1 (посещать каждую вершину не более одного раза)
∀v ∉ {s, t}, ∀ вырезывает S, отделяющие вершину v от {s, t},x v ≤ ∑ a такой, что хвост (a) ∧ S ∧ head (a) ∈ S y a (выгода только от вершин, а не на изолированных петлях).
Чтобы решить, делайте ветвление и привязывайте значения релаксации.К сожалению, последняя группа ограничений является экспоненциальной по количеству, поэтому, когда вы решаете ослабленный двойственный тип, вам нужно будет генерировать столбцы.Обычно для проблем с подключением это означает многократное использование алгоритма минимального сокращения, чтобы найти принудительное сокращение.Удачи!