如何规划庭院灯最有效的路线

2024-06-26

我正在尝试挂一些庭院灯。基于另一个问题 https://cs.stackexchange.com/questions/80134/christmas-light-route-efficiency我问,我意识到我需要一种算法来解决路由检查问题 https://en.wikipedia.org/wiki/Route_inspection_problem找出灯光应采取的最有效路线,以便最大限度地减少被灯光覆盖的重复边缘。经过一番搜索后,我意识到也许这样的东西是我最好的选择:用欧拉化求解中文Postman算法 https://stackoverflow.com/q/40576910/1152809.

但是,我在创建图表时遇到了麻烦。

它需要如下所示:

  • 粉红色圆圈代表结构中我可以悬挂灯的位置
  • “启动”是唯一可用的电源插座
  • 黄点代表灯光应该覆盖的所有地方

这是参考这篇文章后我的图表的样子:根据权重可视化节点之间的距离 - 使用 R https://stackoverflow.com/q/9452221/1152809:

正如您所看到的,所有节点都位于正确的位置,但边缘在不应该连接的地方连接起来。这是我的代码:

library(igraph)
gg<-graph.ring(20)
ll=matrix(
  c( 0,0,    75.25,0,    150.5,0,    225.8125,0,    302.8125,0, 
     0,-87,                                          302.8125,-87,
     0,-173.8125,                                    302.8125,-173.8125,
     0,-260.9375,                                    302.8125,-260.9375,
     16,-384.3125,                                   302.8125,-384.3125,
     16,-435.9575,                                   302.8125,-435.9375,
     16,-525.1875, 75.25,-525.1875, 150.5,-525.1875, 225.8125,-525.1875, 302.8175,-525.1875),
  ncol=2,byrow=TRUE)
plot(gg,layout=ll)

我认为这与性质有关graph.ring,但我无法找出另一种方法来无错误地定义图的边长度。


我认为您可以使用 graph_from_edgelist 来精确指定要连接的节点。指定以何种顺序连接哪些节点就足够了。顺便说一句,好问题!

  gg <- graph_from_edgelist(cbind(c(1:4, 6, 8, 10, 12, 14, 16:19, 1, 6, 8, 21, 12, 14, 5, 7, 9, 11, 13, 15), 
                                  c(2:5, 7, 9, 11, 13, 15, 17:20, 6, 8, 10, 12, 14, 16, 7, 9, 11, 13, 15, 20)))
  ll=matrix(
    c( 0,0,    75.25,0,    150.5,0,    225.8125,0,    302.8125,0, 
       0,-87,                                          302.8125,-87,
       0,-173.8125,                                    302.8125,-173.8125,
       0,-260.9375,                                    302.8125,-260.9375,
       16,-384.3125,                                   302.8125,-384.3125,
       16,-435.9575,                                   302.8125,-435.9375,
       16,-525.1875, 75.25,-525.1875, 150.5,-525.1875, 225.8125,-525.1875, 302.8175,-525.1875, 16, -260.9375),
    ncol=2,byrow=TRUE)
  plot(gg,layout=ll, edge.arrow.size = 0, vertex.size = c(rep(18, 20), 0),
       edge.color="orange")

我添加了一个节点(n 21)以允许类似于您的方案的分支。这看起来或多或少是应该的吗?

enter image description here I had a look at the previous post on Stack Overflow (the one you suggested) to try making this an Euler cycle. Actually, the custom function does work out of the box, but you may want to double check if you can use the resulting solution or not. Maybe, you could try defining a better connection design before "eulerizing" the circuit. This is what I got.

# load custom f(x) as in
# https://stackoverflow.com/questions/40576910/solving-chinese-postman-algorithm-with-eulerization/40596816#40596816

eulerian <- make.eulerian(gg)
eulerian$info
g <- eulerian$graph

# set the layout as before to keep the circuit formatted according to your specs
par(mfrow=c(1,2))
plot(gg,layout=ll, edge.arrow.size = 0, vertex.size = c(rep(18, 20), 0),
     edge.color="orange", main = "Proposed")
plot(g,layout=ll, edge.arrow.size = 0, vertex.size = c(rep(18, 20), 0),
     edge.color="orange", main = "Eulerized")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何规划庭院灯最有效的路线 的相关文章

  • 如何使用R在csv文件中按列添加数据?

    我有向量中包含的信息 例如 sequence1 lt seq 1 20 sequence2 lt seq 21 40 我想将该数据附加到文件中 所以我使用 write table sequence1 file test csv sep ap
  • 库存推文、文本挖掘、表情符号错误

    我希望您能够协助进行文本挖掘练习 我对 AAPL 推文感兴趣 并且能够从 API 中提取 500 条推文 我自己克服了几个障碍 但最后一部分需要帮助 由于某种原因 tm 包没有删除停用词 您能看一下可能是什么问题吗 表情符号会引起问题吗 绘
  • 如何使用 R 获取所有 S&P500 公司代码列表?

    我想在R中制作FOR语句来一次性分析股票数据 但我不知道如何获得 S P 公司代码列表 请让我知道解决方案 谢谢 library rpart library rpart plot library quantmod startDate as
  • 基于百分比的路由算法

    四处浏览基于百分比的路由 偶然发现这个线程 https stackoverflow com a 52044571 3154233 根据建议的算法如下 对于给定模型如下 public class Host private String nam
  • R 中的离散化

    有谁知道有一个包可以实现连续变量离散化的监督学习算法 dprep 包包含类似的功能 但该包已被弃用 有任何想法吗 感谢您的帮助 您仍然可以使用dprep包 但你必须从源代码安装它 我刚刚测试过 它运行良好 不过 您或许可以看看离散化 htt
  • 求R中3列中每一行的最大值

    我需要计算 3 列中每行的最大值 一个表可以是 x c 1 2 3 4 5 y c 2 3 3 1 1 z c 4 3 2 1 1 df lt data frame x y z 我需要得到 x y z max 1 1 2 4 4 2 2 3
  • igraph - 将文本添加到社区图

    使用下面的代码 我可以在 igraph 提供的 空手道俱乐部 示例中生成社区图 请参见第一张图片 library igraph karate lt make graph Zachary wc lt cluster walktrap kara
  • 将矩形均匀分布在另一个矩形内所需的算法

    我正在寻找一种算法 可以帮助在较大的矩形内分配不同大小的矩形 同时最大限度地减少重叠 我研究过装箱算法 但它们似乎最小化了矩形之间的空间量 在我的例子中 所有被包装的物品都将是正方形 我想我想最大化所有正方形和外部矩形边界之间的距离 这是我
  • 在 R 中调用“boot”时没有数据

    我有一个包含很多列的数据框 第一列包含 系统 1 系统 2 等类别 第二列包含代表 0 和 1 的数字 请看下面 例如 SYSTEM Q1 Q2 S1 0 1 S1 1 0 S2 1 1 S2 0 0 S2 1 1 我在 R 中有这段代码来
  • 从谷歌街道地址中提取城市和州信息

    我有一个数据集 其中包含不同点位置的纬度 经度信息 我想知道与每个点关联的城市和州 按照此example https stackoverflow com questions 22911642 applying revgeocode to a
  • 没有适用于“filter_”的方法应用于类“c('double', 'numeric')”的对象

    使用下面的代码 我尝试过滤我的数据集 以便仅选择 CG less14 0 和 CG High14 0 的数据集 我收到错误 没有适用于 filter 的方法应用于 c double numeric 类的对象 我的代码有问题吗 married
  • 德尔福 LZMA

    我在 7 zip 网站上找到了一个 LZMA 库 但是没有用 我不使用文件 只使用流 出于某些原因 7 zip 站点上的库只将标头写入流而不压缩流 有人遇到了一些问题吗 有例子吗 知道 Delphi 的其他 LZMA 库吗 Tks 我自己没
  • 如何找到包含序列所有元素的最小长度子序列

    给定一个序列 例如S 1 8 2 1 4 1 2 9 1 8 4 我需要找到包含所有元素的最小长度子序列S 没有重复 顺序无关紧要 如何有效地找到这个子序列 注意 有 5 个不同的元素 S 1 2 4 8 9 最小长度子序列必须包含所有这
  • 使用同一变量的多个子集创建新数据框

    我想创建一个新的数据框 其中的列是由不同变量分割的同一变量的子集 例如 我想创建一个新的变量子集 b 其中列由不同变量 year 的子集分割 set seed 88 df lt data frame year rep 1996 1998 3
  • 在 R 中,将一列值与所有其他列进行比较

    我对 R 非常陌生 我有一个问题对于这里的专家来说可能非常简单 假设我有一个表 sales 其中包含 4 个客户 ID 123 126 和 4 个产品 A B C D ID A B C D 123 0 1 1 0 124 1 1 0 0 1
  • 在 ggplot2 中隐藏单个几何图例

    我将相同的变量 颜色 映射到两个不同几何图形中的颜色 我希望它们要么出现在单独的图例中 DHJ 和 EFI 要么最好完全跳过第二个图例 对于 E F 和 I 目前 R 将两者混合在一起 并给我一个图例 其中按字母顺序列出了 DEFHIJ 所
  • 如何为 R 中接下来的 2 个单元格复制相同的列值[重复]

    这个问题在这里已经有答案了 我正在尝试使用 R 为列中接下来的 2 个单元格复制相同的列值 我有以下形式的数据框 Time World Cate Data 1994 Africa A 12 1994 B 17 1994 C 22 1994
  • 根据值绘制具有条件颜色的折线图

    我想绘制折线图 根据值 它应该改变它的颜色 我发现的是 plot sin seq from 1 to 10 by 0 1 type p col ifelse sin seq from 1 to 10 by 0 1 gt 0 5 red ye
  • 在 R 中提取栅格的最快方法(提高我的可重现代码的时间)

    我想知道我是否已最大化提取栅格中某个点周围缓冲区域平均值的速度 本地的性能可以进一步提高吗 I use parallel mclapply已经 我知道我可以通过在集群上设置和运行它来获得进一步的收益 使用集群或获得更多的CPU不是我正在寻找
  • 矩阵行列式算法 C++

    我是编程新手 我一直在寻找一种找到矩阵行列式的方法 我在网上找到了这段代码 但我很难理解这里的算法 我对递归的基础没有问题 但继续和主循环我很难理解 非常感谢任何可以向我解释该算法的人 int determ int a MAX MAX in

随机推荐