Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 最小资源需求算法_Algorithm - Fatal编程技术网

Algorithm 最小资源需求算法

Algorithm 最小资源需求算法,algorithm,Algorithm,我有一个问题,我已经提出了一些解决方案,但我对可伸缩性不满意。我正在寻找一些不同方法/算法的输入来解决它 问题: 软件可以在电子控制器(ECU)上运行,并且需要 运行给定功能的不同资源。它可能需要一个给定的 存储量或RAM或数字或模拟输入或输出 例如。如果我们有多个功能和多个控制器选项 我们希望找到一种能够最小化硬件的组合 要求(费用)。我将把资源简化为信件 简化理解 示例1: Feature1(A) ECU1(A,B,C) Feature2(A,B) ECU2(A|B,B,C) 首先是一个


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

问题:

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

示例1:

Feature1(A)
ECU1(A,B,C)
Feature2(A,B)
ECU2(A|B,B,C)
首先是一个微不足道的例子。假设一个特性需要1单位的资源a,而ECU有1单位的资源a、B和C可用,很明显,该特性将适合剩余资源B和C的ECU

示例2:

Feature1(A)
ECU1(A,B,C)
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),则ECU上没有剩余的用于F(A)的资源,因此它似乎不适合。这将导致一种观点,即我们应该首先选择非政府资源来避免这种冲突。 例如,上述示例可以是模拟输入,也可以用作数字输入

示例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计算所有可能的排列(上面的ORs),以查看功能是否适合

如果我们回到例子2,展开ORs,我们得到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)也很简单

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

这就是问题所在

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

简单总结功能资源需求和创建新的单片ECU这一显而易见的说法不是一个选项。最后,不,这与学校或大学给出的任何作业或问题没有任何关系

很抱歉问了这么长的问题,但我希望我已经充分描述了我正在尝试做的事情,这也激起了一些人的兴趣


诚恳地说,保罗。

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

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

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


查看更多信息。希望能有所帮助!

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

创建二部图:

  • 左侧对应于功能要求
  • 右侧对应于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)
然后找到无序二部图的最大匹配。关于它,有几种著名的算法:

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

如果最大匹配不能覆盖所有的特征点,则会导致资源短缺

不幸的是,这种方法就像贪婪算法一样,它不知道即将推出的功能,也不调整解决方案以适应更多的featu