【问题标题】:Best graph algorithm for least transfer in an electric grid电网中最小传输的最佳图算法
【发布时间】:2015-05-27 03:16:36
【问题描述】:

给定了一系列城市,每个城市产生一定量的电力并需要一定量的电力。每个城市最多有8个相邻城市,我正在尽量减少转机次数。 如果 A->B 10 能量,则转移的总成本为 10。 如果 A->B->C 10 能量(A 到 C 到 B),则转移的总成本为 20。 我曾考虑在每个需要能量的点上使用 Djikstra,并在找到足够能量时结束对该点的搜索,但想到了几个陷阱。 我想知道还有什么我可以考虑的可能会起作用? 我还考虑研究 Floyd-Warshall 算法以及 Hagerup(在维基百科上阅读一些关于它们的信息,它们似乎可能可行)

谢谢

【问题讨论】:

  • 你确定有足够的电力吗?您如何评估并非每个城市都能获得“所需”电力的解决方案?
  • 我保证有足够的电力,如果我把所有城市的“电力不足”和“电力过剩”相加,就是0。

标签: c++ graph graph-algorithm


【解决方案1】:

您的问题很容易归结为众所周知的minimum-cost flow problem

最小成本流问题 (MCFP) 是找到最便宜的可能 通过流网络发送一定量的流的方式。

这种减少可以通过以下方式完成。在图形中添加一个虚拟的“源”和“汇”顶点,将有向边从源添加到每个原始顶点,其容量等于该顶点的生产率,将每个原始顶点的有向边添加到容量等于消耗率的汇在那个顶点。根据需要在原始边缘上设置容量和成本,并在生成的网络上解决最大流最小成本问题。

我也怀疑 Dijkstra 算法或任何最短路径算法是否有用,因为它们只关注来自特定城市的一个单位电力的路径,并且不考虑来自特定城市的“干扰”效应不同城市生产的电力。例如,如果您有两个城市(A 和 B)生产 1 个单位的能源,另外一个靠近 A 和 B 的城市(C)消耗 1 个单位的能源,还有一个远离城市(D)消耗 1 个单位的能源。能量,那么您将不得不将能量从 A 或 B 路由到 D,但没有最短路径算法可以为您提供。

【讨论】:

  • 鉴于有多个顶点需要能量/可以提供能量,我将如何选择虚拟“源”和“汇”?还是真的不重要
  • @AeonNeo,你不应该“选择”它们,你应该添加它们。这些将是个顶点,仅用于将多源问题转换为单源问题。对于类似的想法,请参阅,例如,en.wikipedia.org/wiki/…
  • @AeonNeo,或参见此处的幻灯片 3 和 4:ifp.illinois.edu/~angelia/ge330fall09_maxflowl20.pdf
  • 嗯,这似乎应该可行,但我仍有一些问题/在编码之前我无法判断,但谢谢! 1)从两个链接看来,新的 Source/Sink 节点连接到某些点,有什么方法我应该选择这些或做任何工作 2)我知道从单个源到接收器的最大流量将为零,并且根据我的理解,势能从源到汇的转移(程序还不知道它会变为零),将解决不平衡。对吗?
  • @AeonNeo,我的回答完全涵盖了您的第一个问题:“将有向边从源添加到每个原始顶点,其容量等于该顶点的生产率,将每个原始顶点的有向边添加到容量等于该顶点消耗率的水槽”。至于你的第二个问题,我不明白你为什么认为最大流量为零。流量不是所有生产的总和减去所有消费的总和,流量是所有生产的总和,所有消费的总和,相等。
【解决方案2】:

一旦你有足够的能量就结束搜索并不能保证找到最短路径,但是让 Dijkstra 完全运行每个点,这是一个电力消耗者,并且根据计算的大小可能仍然是合理的网络。

【讨论】:

    【解决方案3】:

    Lookup A* 算法在 dijkstra 上进行了改进,启发式可能会消除一些陷阱。 我真的想不出任何其他算法。

    其实我觉得A*应该没问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多