Optimization 用线性规划绘制最长路径

Optimization 用线性规划绘制最长路径,optimization,graph,linear-programming,lpsolve,longest-path,Optimization,Graph,Linear Programming,Lpsolve,Longest Path,我有一个加权有向图,其中没有循环,我希望定义约束,这样我就可以用线性规划来解决路径权重的最大化问题。然而,我不知道该怎么做 为此,我希望使用LPSolve工具。我曾考虑过制作一个邻接矩阵,但我不知道如何使用LPSolve来实现 如何使用约束定义每个节点的可能路径,并使其具有足够的通用性,以便于适应其他图?因为您有一个加权有向图,为每个边定义一个二进制变量x_e,并添加约束,指定源节点具有流平衡1(选择的输出边比选择的输入边多一个),目标节点具有流平衡-1(选择的输入边比选择的输出边多一个),并且

我有一个加权有向图,其中没有循环,我希望定义约束,这样我就可以用线性规划来解决路径权重的最大化问题。然而,我不知道该怎么做

为此,我希望使用LPSolve工具。我曾考虑过制作一个邻接矩阵,但我不知道如何使用LPSolve来实现


如何使用约束定义每个节点的可能路径,并使其具有足够的通用性,以便于适应其他图?

因为您有一个加权有向图,为每个边定义一个二进制变量
x_e
,并添加约束,指定源节点具有流平衡1(选择的输出边比选择的输入边多一个),目标节点具有流平衡-1(选择的输入边比选择的输出边多一个),并且每个其他节点的流平衡为0(选择的传出边和传入边的数量相同)。因为您的图形没有循环,这将导致从源到目标的路径(假设存在)。可以最大化选定边的权重

我将使用
lpSolve
包在R中继续说明。考虑一个具有下列边的图:

(edges <- data.frame(source=c(1, 1, 2, 3), dest=c(2, 3, 4, 4), weight=c(2, 7, 3, -4)))
#   source dest weight
# 1      1    2      2
# 2      1    3      7
# 3      2    4      3
# 4      3    4     -4
现在,我们可以将所有内容组合到我们的模型中,并解决:

library(lpSolve)
mod <- lp(direction = "max", 
          objective.in = edges$weight,
          const.mat = constr,
          const.dir = rep("=", length(nodes)),
          const.rhs = rhs,
          all.bin = TRUE)
edges[mod$solution > 0.999,]
#   source dest weight
# 1      1    2      2
# 3      2    4      3
mod$objval
# [1] 5
库(lpSolve)
mod 0.999,]
#源目标重量
# 1      1    2      2
# 3      2    4      3
mod$objval
# [1] 5
library(lpSolve)
mod <- lp(direction = "max", 
          objective.in = edges$weight,
          const.mat = constr,
          const.dir = rep("=", length(nodes)),
          const.rhs = rhs,
          all.bin = TRUE)
edges[mod$solution > 0.999,]
#   source dest weight
# 1      1    2      2
# 3      2    4      3
mod$objval
# [1] 5