我有一个问题,我已经提出了一些解决方案,但我对可扩展性不满意。我正在寻找一些不同方法/算法的输入来解决它。
问题:
软件可以在电子控制器(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这一明显的说法不是一种选择。最后,不,这与学校或大学提出的任何任务或问题无关。
很抱歉这个很长的问题,但希望我已经充分描述了我想要做的事情,这引起了那里某人的兴趣。
真诚的,保罗。
答案 0 :(得分:2)
看起来单个功能插件可以作为二分匹配来解决。
你制作了二分图:
让我通过例子2解释:
图表如何显示:
然后找到无序二分图的最大匹配。很少有众所周知的算法: https://en.wikipedia.org/wiki/Matching_(graph_theory)
如果最大匹配覆盖每个特征顶点,我们可以使用它来插入特征。
如果最大匹配不覆盖每个特征顶点,那么我们缺少资源。
不幸的是,这种方法就像贪婪算法一样。它不知道即将推出的功能,也不会调整解决方案以适应更多功能。对于简单案例的部分优化可以像您所描述的那样工作,但通常它的死胡同 - 仅考虑整个特征集中每个特征的算法可以使整体有效的解决方案。
您可以尝试同时向一个ECU添加多个功能。如果要为给定的ECU添加新功能,可以尝试所有已分配的功能和候选功能。在这种情况下,将找到给定特征集的局部最优解(如果可以将它们全部插入一个ECU)。
答案 1 :(得分:0)
我没有足够的声誉来评论,所以这就是我想为你的问题提出的建议:
与 GA 类似,还有一些其他基于随机的方法,例如贝叶斯Apporaoch ,决策树等
在我看来,决策树将适合您的问题,因为它对某些输入数据集/属性显示了每个类(在您的情况下为ECU)中有助于选择正确的类/ ECU的路径。使用一些示例数据集训练您的系统,以便它可以为您的实际数据集/功能决定正确的ECU。
检查weight_decay
以获取更多信息。希望它有所帮助!