最低资源要求的算法

时间:2017-01-11 08:09:20

标签: algorithm


   我有一个问题,我已经提出了一些解决方案,但我对可扩展性不满意。我正在寻找一些不同方法/算法的输入来解决它。

问题:

  

软件可以在电子控制器(ECU)上运行并且需要   运行给定功能的不同资源。它可能需要给定   存储量或RAM或数字或模拟输入或输出   实例。如果我们有多个功能和多个控制器选项   我们希望找到最小化硬件的组合   要求(成本)。我会简化信件的资源   简化理解。

示例1:

Feature1(A)
ECU1(A,B,C)

首先是一个简单的例子。让我们假设一个功能需要1个单位的资源A,并且ECU有1个单位的资源A,B和C可用,很明显该功能将适用于具有资源B和B的ECU。 C遗留下来。

示例2:

Feature2(A,B)
ECU2(A|B,B,C)

在此示例中,功能2需要资源A和B,并且ECU有3个资源,第一个可以是A或B.在这种情况下,您可以再次看到该功能适合ECU,但是只有按特定顺序检查。如果将F(A)指定给E(A | B),则F(B)指定为E(B)它可以工作,但如果将F(B)指定给E(A | B)则没有剩余资源F(A)的ECU因此看起来不合适。这将使人们首先观察到我们应该首先选择非OR的资源来避免这种冲突。 上述示例可以是模拟输入也可以用作例如数字输入。

示例3

Feature3(A,B,C)
ECU3(A|B|C, B|C, A|C)

现在情况有点复杂,但对于一个人来说,这个功能适合ECU的情况仍然很明显。

我的问题只是这些示例的更大规模版本(即每个ECU的多个功能,有更多的ECU可供选择。

算法

GA
我的第一个方法是使用遗传算法。对于给定的一组特征,即F(A,B,C,D),以及当前可用的ECU列表,找到符合要求的单个或组合的ECU。

最初将随机选择ECU并检查它们的特征并将其添加到它们中。如果某个功能不适合,则会在架构中添加另一个ECU。创建了这些体系结构的群体,并根据容纳所有功能的最低成本进行排名。然后,建筑物可以在连续几代中进行交配,并具有突变性,从而提高适应性。

这种方法很有效,但是基于我亲手工作的一个黄金例子,它往往陷入局部最小值(不是最便宜的选项)。

组合/排列
我的下一个方法是计算ECU的所有可能的排列(上面的OR),看看这些特征是否合适。

如果我们回到示例2并扩展OR,我们得到2个排列;

Feature2(A,B)
ECU2(A|B,B,C) = (A,B,C), (B,B,C)

从这里可以轻松地检查该特征是否适合第一个排列,而不是第二个排列。

...例如3有12个排列

Feature3(A,B,C)
ECU3(A|B|C, B|C, A|C) = (A,B,A), (B,B,A), (C,B,A), (A,C,A), (B,C,A), (C,C,A), (A,B,C), (B,B,C), (C,B,C), (A,C,C), (B,C,C), (C,C,C)

同样重要的是检查特征3是否适合至少一个排列(第3,第5和第7)。

基于这种方法,我也能够得到一个解决方案,但是我的ECU有很多OR输入,我有数百万个ECU排列,这大大增加了运行时间(分钟)。我可以忍受这个,但首先想看看除了平行化这种方法之外,是否有更好的方法让猫皮肤更好。

  

这就是问题......

我对如何处理它有更多的想法,但是假设这个问题有一个奇特的名字,或者已经存在了20多年的算法名称,我不熟悉,我希望有人可以指引我指向一些论文或相关算法的名称。

简单地总结功能资源要求并创建新的单片ECU这一明显的说法不是一种选择。最后,不,这与学校或大学提出的任何任务或问题无关。

很抱歉这个很长的问题,但希望我已经充分描述了我想要做的事情,这引起了那里某人的兴趣。

真诚的,保罗。

2 个答案:

答案 0 :(得分:2)

看起来单个功能插件可以作为二分匹配来解决。

你制作了二分图:

  • 左侧对应于要素要求
  • 右侧对应ECU子节点
  • 边缘用左边和右边的顶点连接公用字母

让我通过例子2解释:

  • 特征2(A,B)
  • ECU2(A | B,B,C)

图表如何显示:

  • 2个左顶点:L1(A),L2(B)
  • 3个右顶点:R1(A | B),R2(B),R3(C)
  • 3个边:L1-R1(A-A | B),L2-R1(B-A | B),L2-R2(B-B)

然后找到无序二分图的最大匹配。很少有众所周知的算法: https://en.wikipedia.org/wiki/Matching_(graph_theory)

如果最大匹配覆盖每个特征顶点,我们可以使用它来插入特征。

如果最大匹配不覆盖每个特征顶点,那么我们缺少资源。

不幸的是,这种方法就像贪婪算法一样。它不知道即将推出的功能,也不会调整解决方案以适应更多功能。对于简单案例的部分优化可以像您所描述的那样工作,但通常它的死胡同 - 仅考虑整个特征集中每个特征的算法可以使整体有效的解决方案。

您可以尝试同时向一个ECU添加多个功能。如果要为给定的ECU添加新功能,可以尝试所有已分配的功能和候选功能。在这种情况下,将找到给定特征集的局部最优解(如果可以将它们全部插入一个ECU)。

答案 1 :(得分:0)

我没有足够的声誉来评论,所以这就是我想为你的问题提出的建议:

GA 类似,还有一些其他基于随机的方法,例如贝叶斯Apporaoch 决策树

在我看来,决策树将适合您的问题,因为它对某些输入数据集/属性显示了每个类(在您的情况下为ECU)中有助于选择正确的类/ ECU的路径。使用一些示例数据集训练您的系统,以便它可以为您的实际数据集/功能决定正确的ECU。

检查weight_decay以获取更多信息。希望它有所帮助!