К вашему сведению, см. Ниже подход, который я в итоге реализовал. Возможно, это интересно / полезно?
аюсь реализовать "Минимальная стоимость сетевого потока«решение транспортной проблемы вR
.
Я понимаю, что это можно реализовать с нуля, используя что-то вродеlpSolve
, Тем не менее, я вижу, что есть удобныйigraph
реализация для "Максимальный поток«Такое уже существующее решение было бы намного удобнее, но я не могу найти эквивалентную функцию для минимальной стоимости.
Естьigraph
функция, которая рассчитывает минимальные затраты на решения сетевого потока, или есть способ применитьigraph::max_flow
функция к проблеме минимальной стоимости?
igraph
пример сети:
library(tidyverse)
library(igraph)
edgelist <- data.frame(
from = c(1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8),
to = c(2, 3, 4, 5, 6, 4, 5, 6, 7, 8, 7, 8, 7, 8, 9, 9),
capacity = c(20, 30, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99),
cost = c(0, 0, 1, 2, 3, 4, 3, 2, 3, 2, 3, 4, 5, 6, 0, 0))
g <- graph_from_edgelist(as.matrix(edgelist[,c('from','to')]))
E(g)$capacity <- edgelist$capacity
E(g)$cost <- edgelist$cost
plot(g, edge.label = E(g)$capacity)
plot(g, edge.label = E(g)$cost)
Это сеть с направленными ребрами, «исходный узел» (1) и «приемный узел» (9). Каждое ребро имеет «емкость» (здесь часто обозначается как 99 для неограниченного) и «стоимость» (стоимость одной единицы, проходящей через это ребро). Я хочу найти целочисленный вектор потоков (x, length = 9), который минимизирует стоимость при передаче предопределенного потока через сеть (скажем, 50 единиц от узла 1 в узел 9).
отказ: эта почта задал похожий вопрос, но не привел к удовлетворительному ответу и довольно устарел (2012).