Добрый день.
Оригинальная задача:Дан направленный ациклический граф с единственной точкой входа A (нет входящих ребр) и единственной точкой выхода B (нет исходящих ребр). Для каждого ребра указаны его min и max веса (не отрицательные). Также дан некий общий вес W. Необходимо определить веса
всех ребер (с учетом их min и max) так, чтобы вес любого маршрута из A в B был равен W.
Кроме того, заданы несколько желаемых (могут быть невыполнимы из-за ограничений на веса ребр) соотношений весов ребр вида
.
Примечание 1: Если из-за соотношений весов вес ребра выходит за его допустимые границы, то вес этого ребра следует принять равным соответствующей границе (min или max) и исключить это ребро из желаемых соотношений весов (тем не менее, остальные пропорции должны сохраняться как и вес маршрута A->B).
Примечание 2: Если не учитывать направления ребр, то граф может содержать циклы.
Вот к чему свел: - искомые неизвестные
Дано:
1) система линейных уравнений
(k и w известны).
, причем
Если это поможет, то можно представить эту систему в виде
, причем
или
, т.е. сумма некоторых равна константе,
.
2) ограничения на каждую переменную (система неравенств)
(min и max известны)
, причем в совокупности с системой "
1" имеется хотя бы одно решение (а как правило их больше одного),
.
3) система линейных уравнений
(l известны)
, причем
(если говорить более детально, то в каждом из этих уравнений строго 2 ненулевых коэффициента l). На самом деле эти уравнения получены из заданных соотношений вида
Задача:
найти такие
, что:
- все уравнения из "
1" строго выполняются
- все ограничения из "
2" строго выполняются
- максимальное количество уравнений из "
3" выполняются (уравнения в "
3" приведены в порядке их "предпочтительности", т.е. в случае необходимости исключать их следует начиная с последнего).
В первую очередь интересует решение в целых числах, при этом уравнения из "
3" (или часть из них) могут выполняться не строго, а с некой погрешностью. Во вторую - решение в нецелых, при этом уравнения из "
3" (или часть из них) должны строго выполняться.
Проблемы:Не ясно что делать с min & max: без них все сводится к системе линейных уравнений, в которой, правда, могут быть противоречия (желаемые соотношения весов могут иметь противоречия друг с другом) с которыми тоже надо что-то делать. Кроме того, количество ребер может исчисляться тысячами и требуется пересчитывать веса до пары сотен раз в секунду (граф меняется редко, обычно только W).
Буду рад подсказкам.