К вашему сведению, см. Ниже подход, который я в итоге реализовал. Возможно, это интересно / полезно?

аюсь реализовать "Минимальная стоимость сетевого потока«решение транспортной проблемы в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).

Ответы на вопрос(2)

Ваш ответ на вопрос