应用程序子模块的确定方法、装置、电子设备及存储介质与流程

文档序号:26139149发布日期:2021-08-03 14:22阅读:120来源:国知局
应用程序子模块的确定方法、装置、电子设备及存储介质与流程

本发明涉及计算机技术领域,尤其涉及一种应用程序子模块的确定方法、装置、电子设备及存储介质。



背景技术:

推荐系统用于根据用户的信息需求、兴趣等,将用户感兴趣的信息、产品等推荐给用户。推荐系统api(applicationprogramminginterface,应用程序接口)是用户与推荐系统之间的接口。推荐系统api输入用户信息与环境信息,输出推荐结果。

应用于复杂场景的推荐系统api,为了满足用户多样化的需求,除了用于提供基础功能的必备子模块外,一般还会设置多种功能的可选子模块供用户选择。以音乐app中的歌曲推荐api为例,其推荐流程包含的子模块较多,这些子模块所涉及的功能包括:多种类型的推荐召回,最新最热内容,在线排序,各种混排策略,人工干预等。

但在具体的运行环境下,支持推荐系统的资源——如内存资源、cpu资源、带宽资源、io资源等——是有限的。为了保障服务质量,满足性能指标约束,推荐系统api中的可选子模块在实际应用中一般不会被全部选取,而只会选择其中的一部分,因此需要为推荐系统api确定在某一具体运行环境下所支持的子模块。

在现有技术中,在为推荐系统api确定子模块时,一般是先集成场景可能用到的所有子模块;然后在推荐流程设计和开发完毕后进行性能压测;如果没有达到性能指标约束,再采取人工方式进行大量代码调整和优化,例如增加缓存或并发处理,直至达到性能指标约束。

上述方法应用于子模块较少的推荐系统api时尚可接受,若推荐系统api中的子模块较多时,该方法投入的成本和风险相对较高,不仅增大了代码的整体复杂度,也给线上服务运行的稳定性带来隐患,例如对缓存开销预估不足而带来的内存溢出风险。

除了前述的推荐系统外,对于子模块可选的应用程序,当部署在具体的运行环境下时,也需要根据实际运行环境所提供的资源来确定子模块。对于此类应用程序,现有技术中同样采用了先集成所有子模块,然后进行性能压测,当没有达到性能指标约束时,再采取人工方式进行代码调整和优化的方法。因此,现有技术中的应用程序子模块确定方法也具有成本和风险相对较高的缺陷。



技术实现要素:

针对现有技术中存在的上述缺陷,本发明提供一种应用程序子模块的确定方法、装置、电子设备及存储介质。

本发明提供一种应用程序子模块的确定方法,包括:

获取第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,以及第一应用程序在第一运行环境下的性能指标约束值;其中,所述效用预估分用于反映所述候选子模块在所述第一应用程序中的重要程度;所述性能指标消耗值用于反映候选子模块在对应性能指标上的数值;

根据第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,采用贪心算法与随机化相结合的方式生成多种初始组合结果,每种初始组合结果中包括所述多个候选子模块的部分或全部;

采用模拟退火算法对所述多种初始组合结果进行求解运算,得到第一组合结果;所述第一组合结果所包括的多个候选子模块的性能指标消耗值的总和小于所述性能指标约束值,所述第一组合结果所包括的多个候选子模块为所述第一应用程序在所述第一运行环境下运行时所包含的子模块。

根据本发明提供的一种应用程序子模块的确定方法,所述根据第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,采用贪心算法与随机化相结合的方式生成多种初始组合结果,包括:

根据第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,对所述多个候选子模块进行排序,根据所述排序结果得到第一数量的第一初始结果;

以随机化的方式生成第二数量的第二初始结果;

根据所述第一初始结果和所述第二初始结果,得到所述初始组合结果。

根据本发明提供的一种应用程序子模块的确定方法,所述根据第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,对所述多个候选子模块进行排序,根据所述排序结果得到第一数量的初始组合结果,包括:

将第一应用程序中的多个候选子模块按照效用预估分从大到小的顺序进行排序,从排序结果中依次选取n个子模块,得到所述多个候选子模块的一种初始组合结果;其中,所述n个子模块的性能指标消耗值之和小于所述性能指标约束值;

为第一应用程序中的多个候选子模块分别计算l种效用预估分密度,将第一应用程序中的多个候选子模块按照所述l种效用预估分密度的大小顺序,生成l种排序结果,从所述l种排序结果中分别依次选取nz个子模块,得到所述多个候选子模块的l种初始组合结果;

其中,l表示性能指标的类型数量,1≤z≤l,第z种效用预估分密度是候选子模块的效用预估分与第z种性能指标消耗值之间的比值;所述nz个子模块的性能指标消耗值之和小于所述性能指标约束值。

根据本发明提供的一种应用程序子模块的确定方法,所述采用模拟退火算法对所述多种初始组合结果进行求解运算,得到第一组合结果,包括:

步骤s1、将多种初始组合结果作为当前解;

步骤s2、在当前温度值下,根据所述当前解生成待定新解,根据待定新解的性能指标消耗值与所述性能指标约束值之间的比较结果,以及根据当前解的效用评估分与待定新解的效用预估分之间的比较结果,确定是否用待定新解更新所述当前解;

步骤s3、降低当前温度值,若降低后的当前温度值大于预设的温度下限值,重新执行步骤s2,若降低后的当前温度值小于或等于预设的温度下限值,执行下一步;

步骤s4、从所述当前解所对应的所述多个候选子模块的多种组合结果中,选取效用评估分满足预设要求的组合结果作为第一组合结果。

根据本发明提供的一种应用程序子模块的确定方法,所述在当前温度值下,根据所述当前解生成待定新解,包括:

确定当前温度值所在的温度区间;

根据所述温度区间与随机反转元素数量的预设对应关系,对所述当前解中对应数量的元素进行随机反转,得到待定新解。

根据本发明提供的一种应用程序子模块的确定方法,所述随机反转元素的数量与第一比值成正比,所述第一比值为温度区间所包括的最高温度值与模拟退火算法中所设置的温度初始值的比值。

根据本发明提供的一种应用程序子模块的确定方法,所述采用模拟退火算法对所述多种初始组合结果进行求解运算,得到第一组合结果,包括:

采用模拟退火算法对所述多个候选子模块的多种组合结果进行并行求解运算,根据并行求解运算的结果确定第一组合结果。

本发明还提供了一种应用程序子模块的确定装置,包括:

数据获取模块,用于获取第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,以及第一应用程序在第一运行环境下的性能指标约束值;其中,所述效用预估分用于反映所述候选子模块在所述第一应用程序中的重要程度;所述性能指标消耗值用于反映候选子模块在对应性能指标上的数值;

初始组合结果生成模块,用于根据第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,采用贪心算法与随机化相结合的方式生成多种初始组合结果,每种初始组合结果中包括所述多个候选子模块的部分或全部;

子模块确定模块,用于采用模拟退火算法对所述多种初始组合结果进行求解运算,得到第一组合结果;所述第一组合结果所包括的多个候选子模块的性能指标消耗值的总和小于所述性能指标约束值,所述第一组合结果所包括的多个候选子模块为所述第一应用程序在所述第一运行环境下运行时所包含的子模块。

本发明还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如所述应用程序子模块的确定方法的步骤。

本发明还提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如所述应用程序子模块的确定方法的步骤。

本发明提供的应用程序子模块的确定方法、装置、电子设备及存储介质,通过模拟退火算法对第一应用程序中的各个候选子模块是否适用于第一运行环境进行判断,从各个候选子模块中选取满足性能指标约束值、且效用评估分最大的子模块组合,从而能够在应用程序设计阶段确定应用程序所能包含的子模块,能有效减少后期项目开发的盲目性,并提高应用程序运行的稳定性。而在模拟退火算法实现过程中采用贪心算法与随机化相结合的方式来确定初始解有助于保证初始解的优质性,避免完全盲目的随机化,并能加快收敛到全局最优解的速度。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的应用程序子模块的确定方法的流程图;

图2为本发明提供的应用程序子模块的确定装置的示意图;

图3示例了一种电子设备的实体结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明提供的应用程序子模块的确定方法的流程图,如图1所示,本发明提供的应用程序子模块的确定方法,包括:

步骤101、获取第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,以及第一应用程序在第一运行环境下的性能指标约束值。

在本发明中,第一应用程序是需要根据实际运行环境所提供的资源来确定所包含子模块的应用程序。在本实施例中,第一应用程序为某一应用场景下的推荐系统api,如音乐app中的个人电台的歌曲推荐api(以下简称歌曲推荐api)。在其他实施例中,第一应用程序也可以是其他类型的应用程序,如购物app中的商品推荐api。

第一应用程序的候选子模块是第一应用程序理论上可包含的功能子模块。以歌曲推荐api为例,候选子模块可包括:用户画像子模块,歌曲内容标签召回子模块,关注歌手子模块,喜欢或收藏行为子模块,歌曲或歌手负反馈子模块,在线排序子模块,热点歌曲和歌手子模块,最新歌曲子模块,混排子模块,人工运营子模块等。

需要说明的是,在本发明中,第一应用程序的候选子模块仅是指第一应用程序中的可选功能子模块。第一应用程序中必选的功能子模块,如用户请求参数校验子模块、输入数据预处理子模块,必然被包含在第一应用程序中,无需采用本发明的方法进行选取。

效用评估分用于反映候选子模块在第一应用程序中的重要程度。候选子模块所对应的功能通常可应用于不同类型的应用程序中。例如,用户画像子模块不仅可以用于音乐app中的个人电台的歌曲推荐api,也可以用于购物app中的商品推荐api。同一功能的子模块在不同应用程序中的重要程度可能是不一样的,因此在本发明中,采用效用评估分来反映候选子模块在第一应用程序中的重要程度。

不同的候选子模块具有各自的效用评估分。在本实施例中,候选子模块的效用评估分是预先设定的,在其他实施例中,将对效用评估分的设定过程进行说明。

性能指标是本领域技术人员的公知概念,在本实施例中,性能指标包括调用时长以及内存占用量。在其他实施例中,性能指标还可包括以下指标中的至少一种:cpu占用量、带宽占用量、i/o占用量。

性能指标消耗值用于反映候选子模块在对应性能指标上的数值。例如,在本实施例中,性能指标包括调用时长以及内存占用量,则歌曲推荐api中的在线排序子模块的性能指标消耗值包括两个分量,其中一个分量用于描述所述在线排序子模块的调用时长,另一个分量用于描述所述在线排序子模块在运行时的内存占用量。

不同的候选子模块具有各自的性能指标消耗值。各个候选子模块的性能指标消耗值可通过测试得到。例如,通过mock测试可得到候选子模块的调用时长;通过mock测试调用候选子模块,并dump出javaheap快照,然后利用mat内存快照分析工具,可计算出内存占用量。

本领域技术人员很容易理解,第一应用程序可以被部署在不同的运行环境中。当第一应用程序被部署在不同的运行环境中时,不同运行环境能够为第一应用程序所提供的资源是不一样的。例如,同样是部署歌曲推荐api,运营商a在部署时,可以为其提供100g的内存资源,运营商b在部署时,可以为其提供50g的内存资源。在本发明中,第一运行环境用于表示第一应用程序的运行环境。

基于第一运行环境所能提供的资源,可获得第一应用程序在第一运行环境下的性能指标约束值。所述性能指标约束值用于反映所述第一运行环境在对应性能指标方面所能提供资源的上限值。

本领域技术人员很容易理解,第一应用程序在第一运行环境下运行时所包含的所有子模块的性能指标消耗值之和,不应大于对应的性能指标约束值。例如,在本实施例中,性能指标包括调用时长以及内存占用量,则对应的性能指标约束值包括调用时长约束值,内存占用量约束值。若调用时长约束值为200毫秒,内存占用量约束值为4g,那么第一应用程序在第一运行环境下运行时所包含的所有子模块的调用时长消耗值之和不应大于200毫秒,第一应用程序在第一运行环境下运行时所包含的所有子模块的内存占用量消耗值之和不应大于4g。

综上所述,在本步骤中,在为第一应用程序确定其在第一运行环境下运行时所包含子模块时,首先需要为第一应用程序确定多个候选子模块,得到这些候选子模块各自的效用预估分与性能指标消耗值,同时还需要确定第一应用程序在第一运行环境下的性能指标约束值。在后续的步骤中,将基于这些数据来确定第一应用程序在第一运行环境下运行时所包含的子模块。

本步骤中所获得的上述数据可以用关系数据表进行存储。在下面的表1中给出了当第一应用程序为歌曲推荐api时,所确定的候选子模块的类型、各个候选子模块的效用评估分、各个候选子模块的性能指标消耗值以及第一应用程序的性能指标约束值。

如表1所示,当第一应用程序为歌曲推荐api时,候选子模块一共有23个,23个子模块各自的名称与编码可参见表1中的描述。23个候选子模块有各自的效用评估分,这些效用评估分可采用矩阵[v1,v2,v3,v4,v5,……,v23,]表示,其中的v1对应编码1的用户实时喜好歌曲召回子模块,v2对应编码2的用户离线喜好召回子模块,……,v23对应编码23的相同曲风歌曲限制子模块。23个候选子模块有各自的性能指标消耗值,在本实施例中,性能指标包括调用时长与内存占用量,因此性能指标消耗值可分为两个矩阵,其中[c11,c12,……,c1n,]表示23个候选子模块各自的调用时长消耗值,其中c11对应编码1的用户实时喜好歌曲召回子模块的调用时长消耗值,c12对应编码2的用户离线喜好召回子模块的调用时长消耗值,……,c1n(n为23)对应编码23的相同曲风歌曲限制子模块的调用时长消耗值。类似的,矩阵[c21,c22,……,c2n,]表示23个候选子模块各自的内存占用量消耗值,其中c21对应编码1的用户实时喜好歌曲召回子模块的内存占用量消耗值,c22对应编码2的用户离线喜好召回子模块的内存占用量消耗值,……,c2n(n为23)对应编码23的相同曲风歌曲限制子模块的内存占用量消耗值。第一应用程序的性能指标约束值包括两个分量,其中一个分量是服务调用时长,在表1中为100毫秒,另一个分量是内存占用量,在表1中为200g。

表1

步骤102、采用贪心算法与随机化相结合的方式生成多种初始组合结果,每种初始组合结果中包括所述多个候选子模块的部分或全部。

在之前的步骤中,已经确定了第一应用程序的多个候选子模块,以及这些候选子模块各自的效用预估分与性能指标消耗值,还确定了第一应用程序在第一运行环境下的性能指标约束值。在本步骤中,需要采用贪心算法与随机化相结合的方式生成多种初始组合结果。

具体的说,生成多种初始组合结果的过程为:

根据第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,对所述多个候选子模块进行排序,根据所述排序结果得到第一数量的第一初始结果;

以随机化的方式生成第二数量的第二初始结果;

根据所述第一初始结果和所述第二初始结果,得到所述初始组合结果。

由于生成多组初始组合结果的过程与后续利用模拟退火算法对多种初始组合结果进行求解运算的过程紧密联系,因此将在后文中结合具体的例子对多种初始组合结果的生成过程一并进行说明。

步骤103、采用模拟退火算法对所述多种初始组合结果进行求解运算,得到第一组合结果;所述第一组合结果所包括的多个候选子模块的性能指标消耗值的总和小于所述性能指标约束值,所述第一组合结果所包括的多个候选子模块为所述第一应用程序在所述第一运行环境下运行时所包含的子模块。

在本步骤中,利用模拟退火算法对所述多个候选子模块的多种组合结果进行筛选,得到第一组合结果;然后根据所述第一组合结果确定第一应用程序在第一运行环境下运行时所包含的子模块。其中,所述第一组合结果的性能指标消耗值小于所述性能指标约束值,且所述第一组合结果的效用评估分满足预设要求;所述第一组合结果的性能指标消耗值是基于所述第一组合结果中所包含的各个子模块的性能指标消耗值得到的,所述第一组合结果的效用评估分是基于所述第一组合结果中所包含的各个子模块的效用评估分得到的。

在从所述第一应用程序的多个候选子模块中选取若干个候选子模块时,应当满足以下最优化目标模型:

……

xi=1或0。

在上述公式中,n表示第一应用程序中的候选子模块的总数;xi表示第i个候选子模块的二位值,当xi=0时,表示第i个候选子模块在候选子模块的组合结果中未被选中,当xi=1时,表示第i个候选子模块在候选子模块的组合结果中被选中;vi表示第i个候选子模块的效用预估分;limitj(j=1,……,m)表示性能指标约束值的第j个分量,如在之前的实施例中,性能指标包括调用时长与内存占用量这两个指标,则j的取值为2;cji表示性能指标约束值的第j个分量下、第i个候选子模块的性能指标消耗值。如c11表示第1个候选子模块(用户实时喜好歌曲召回子模块)的第1个分量(调用时长)的消耗值。

在本实施例中,采用模拟退火算法(sa,simulatedannealing)来筛选候选子模块。由于sa的目标是求最小值,所以前述最优化目标模型中的max的目标值取相反数,即可符合sa的要求。

在本实施例中,采用模拟退火算法对所述多个候选子模块的多种组合结果进行筛选,得到第一组合结果,包括:

步骤s1、将采用贪心算法与随机化相结合的方式所得到的多种初始组合结果作为当前解;

步骤s2、在当前温度值下,根据所述当前解生成待定新解,根据待定新解的性能指标消耗值与所述性能指标约束值之间的比较结果,以及根据当前解的效用评估分与待定新解的效用预估分之间的比较结果,确定是否用待定新解更新所述当前解;

步骤s3、降低当前温度值,若降低后的当前温度值大于预设的温度下限值,重新执行步骤s2,若降低后的当前温度值小于或等于预设的温度下限值,执行下一步;

步骤s4、从所述当前解所对应的所述多个候选子模块的多种组合结果中,选取效用评估分满足预设要求的组合结果作为第一组合结果。

在本实施例中,所述预设要求为效用预估分最大。

为了更好的理解步骤102和步骤103的内容,下面结合实例,对步骤102和步骤103的具体实现过程做进一步的说明。

步骤s11、根据第一应用程序的多个候选子模块的效用预估分与性能指标消耗值,以及第一应用程序在第一运行环境下的性能指标约束值,设置模拟退火算法中的参数的初始值。

根据模拟退火算法的基本原理,需要设置以下参数:

初始温度值,在本实施例中可设置一个充分大的温度的初始值t,例如100000;

模拟退火算法结束的温度下限值tmin,例如e-8

同一温度下的扰动状态次数k,例如100;

温度下降率delta(小于1但是接近于1的值),例如0.99。

此外,还需要根据第一应用程序的多个候选子模块的效用预估分与性能指标消耗值,以及第一应用程序在第一运行环境下的性能指标约束值设置对应的参数。

以前述的歌曲推荐api为例,需要设置以下参数:

用于表示歌曲推荐api中的多个候选子模块的参数。该参数用x表示,根据之前的描述,歌曲推荐api中的候选子模块共有23个,每个候选子模块可以用一个唯一的编码值加以表示,将候选子模块的编码值赋予对应的参数xi(xi是x的第i个分量),即可实现歌曲推荐api中的各个候选子模块的参数设置。

用于表示歌曲推荐api中的多个候选子模块的效用评估分的参数。该参数用v表示,根据之前的描述,参数v的表达式为:[v1,v2,v3,v4,v5,……,v23,]。

用于表示歌曲推荐api中的多个候选子模块的性能指标消耗值的参数。该参数用c表示,根据之前的描述,参数c的表达式为:[[c11,c12,……,c1n,],[c21,c22,……,c2n,]]。

用于表示第一应用程序在第一运行环境下的性能指标约束值的参数。该参数用limit表示,根据之前的描述,参数limit的表达式为:{s1:xms,s2:yg},其中s1表示性能指标约束值的第一分量,其用于描述调用时长x,x的单位为ms(毫秒);s2表示性能指标约束值的第二分量,其用于描述内存占用量y,y的单位为g(千兆字节)。

步骤s12、根据模拟退火算法中的参数的初始值,生成符合所述性能指标约束值的多组初始解。

在本实施例中,根据前述的参数x、参数c以及参数limit,可初始化k组符合limit约束的初始解a[k][n]。其中,k即为前述的同一温度下的扰动状态次数,n为候选子模块的数量。

在生成k组符合limit约束的初始解时,可通过随机化的方式生成。但为了提高搜寻全局最优解的效率,在本实施例中,可采用“小部分贪心与大部分随机化相结合”的策略来生成初始解。具体的说,在k组初始解中,可采用贪心策略产生l组初始解(l<k),剩余的k-l组初始解以随机化的方式产生。

以歌曲推荐api为例,所述贪心策略分为两种:

a、将歌曲推荐api中的多个候选子模块x按照各个子模块的效用预估分v从大到小进行排列,并依次选取符合limit约束的子模块形成的一组初始解;

b、按照歌曲推荐api中的多个候选子模块x的效用预估分密度m(m=效用预估分v/对应性能指标x的消耗c)从大到小排列,并依次选取符合limit约束的子模块形成的l组初始解。其中,l表示性能指标数目,如性能指标包括调用时长和内存占用量,则l的值为2;如果消耗c为0,那么m=效用预估分v/s,其中s表示一个接近0的数,如0.01。

从上述举例可以看出,采用贪心策略一共可得到三组初始解,即l值为3。剩余的k-3组初始解以随机化的方式产生。

每一组初始解的表达式为[xi1,xi2,…,xi23],其中,i表示第i组初始解;xij的值为0或1。

当xij的值为0时,表示第i组初始解中第j个子模块未被选中,当xij的值为1时,表示第i组初始解中第j个子模块被选中。例如,歌曲推荐api的初始解[1,0,1,0…0,1]代表选择“用户实时喜好歌曲召回子模块、用户离线标签召回子模块和相同曲风歌曲限制子模块”。

步骤s13、判断当前的温度值是否达到温度下限值,若尚未达到,执行步骤s14,否则,执行步骤s19。

在步骤s11中分别设置了温度值的初始值以及温度下限值,在模拟退火过程中,温度值是可变化的,根据当前的温度值与温度下限值之间的大小关系,可决定步骤的执行流程。

步骤s14、在当前温度值不变的状态下,判断执行步骤s15-步骤s17的次数i是否大于同一温度下的扰动状态次数k,如果是,执行步骤s18,否则,以当前解a[i]为可行解,产生待定新解b[i],然后执行下一步。

在本步骤中,i表示在当前温度值不变的状态下执行步骤s15-步骤s17的次数。显然,在第一次执行时,i的值为1;i的最大值为k。

在开始时,当前解a[i]为k个初始解a[k][n]中的一个(省去了a[k][n]中的第二维度n),在后续操作时,迭代后的优化结果会被保存在当前解a[i]中。

在本实施例中,可根据现有技术中的模拟退化算法产生待定新解b[i]。

步骤s15、判断待定新解b[i]是否符合limit约束,如果符合,执行下一步,如果不符合,将次数i增1后,重新执行步骤s14。

判断待定新解b[i]是否符合limit约束是本领域技术人员的公知常识,因此不在此处重复说明。

步骤s16、计算当前解对应的效用预估分以及待定新解对应的效用预估分。

在之前的步骤中,已经知道第一应用程序中的多个候选子模块各自的效用预估分。而无论是当前解,还是待定新解,都描述了第一应用程序所包含的候选子模块的一种可能。

根据当前解或待定新解所确定的第一应用程序所包含的候选子模块,可以计算出当前解或待定新解的效用预估分。

例如,当前解或待定新解的形式为(1,0,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,1,0,1,0,1,0),那么将编号为1、编号为3、编号为4、编号为5、编号为7、编号为8、编号为9、编号为13、编号为15、编号为16、编号为17、编号为18、编号为20和编号为22的子模块的效用预估分进行相加,即可得到当前解或待定新解的效用预估分。

即:当前解或待定新解的效用预估分v′的计算公式为:

其中,xi(i=1,2,……,n)是当前解或待定新解中的各个元素的值。

步骤s17、根据当前解对应的效用预估分以及待定新解对应的效用预估分,判断待定新解b[i]是否能被接受,如果能被接受,新解b[i]取代a[i]作为当前解,如果不能被接受,舍弃b[i],保持a[i]作为当前解不变。接着,将次数i增1后重新执行步骤s14。

在本步骤中,判断待定新解b[i]是否能被接受可采用模拟退化算法中的metropolis准则,该准则以一定概率接受不好解(使得推荐效用值变小),从而使算法具有摆脱局部极值和避免过早收敛的全局优化能力,接受新解b[i]的准则为:

df=e(xnew)-e(x)。

其中,t为当前温度值,exp为自然指数,df为当前温度值t下,第i次内循环的新解b[i]的效用预估分(e(xnew))与当前解a[i]的效用预估分(e(x))的差;当前温度值t越小,则降温概率y就越小;当前温度值t越高,降温概率y就越大。

降温概率y反映了接受新解b[i]作为新的当前解a[i]的概率程度。具体的说,如果b[i]大于a[i],反转即–b[i]<-a[i],此时df<0,则根据降温概率y的计算公式y=1,因此待定新解b[i]必须取代当前解a[i]。如果df>=0,此时根据概率来决定是否用b[i]替换a[i],即:随机生成一个[0,1]间的浮点数p,看其是否在之间,如果则用待定新解b[i]替换当前解a[i];否则保持a[i]作为当前解不变。

步骤s18、按照温度下降率更新当前的温度值,然后重新执行步骤s13。

在之前的步骤s11中,已经预先设置了温度下降率delta的大小。在本步骤中,可将当前温度值t乘以温度下降率delta,得到更新后的温度值t。

步骤s19、对最终得到的解a[i]进行遍历,根据具有最大效用预估分的解,确定第一应用程序在第一运行环境下运行时所包含的子模块。

在之前的步骤中,根据模拟退火算法得到了最终解。所述最终解有k个,在本步骤中,对k个最终解进行遍历,从中选出具有最大效用预估分的解,也就得到了所述的第一组合结果。具有最大效用预估分的解有n个分量,每个分量对应第一应用程序的一个候选子模块,根据各个分量的值是0还是1,可确定各个分量所对应的候选子模块是否被选中。

例如,根据模拟退火算法,计算得到歌曲推荐api具有最大效用预估分的解为(1,0,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,1,0,1,0,1,0),结合前述表1可知歌曲推荐api在第一运行环境下运行时所包含的子模块包括:用户实时喜好歌曲召回子模块,用户离线标签召回子模块,用户离线行为相似召回子模块,用户关注歌手召回子模块,用户搜藏行为召回子模块,用户歌曲负反馈处理子模块,用户歌手负反馈处理子模块,xgboost在线排序子模块,热点歌曲召回子模块,热点歌手召回子模块,最新歌曲召回子模块,最新歌手召回子模块,歌手不重复处理子模块,不同模块召回歌曲混排子模块。

本发明提供的应用程序子模块的确定方法通过模拟退火算法对第一应用程序中的各个候选子模块是否适用于第一运行环境进行判断,从各个候选子模块中选取满足性能指标约束值、且效用评估分最大的子模块组合,从而能够在应用程序设计阶段确定应用程序所能包含的子模块,能有效减少后期项目开发的盲目性,并提高应用程序运行的稳定性。而在模拟退火算法实现过程中采用贪心算法与随机化相结合的方式来确定初始解有助于保证初始解的优质性,避免完全盲目的随机化,并能加快收敛到全局最优解的速度。

基于上述任一实施例,在本实施例中,所述在当前温度值下,根据所述当前解生成待定新解,包括:

确定当前温度值所在的温度区间;

根据所述温度区间与随机反转元素数量的预设对应关系,对当前解中对应数量的元素进行随机反转,得到待定新解。

在模拟退火算法中,温度的初始值一般被设置成一个较高的值,之后不断减小。当温度值较高时,从数学上而言,此时对目标求解函数的最优解的探索范围才进行不久,因此可以在较大的领域范围内探索,避免过早陷入局部最优解;在较大的领域范围内探索,也就意味着在自变量的邻域范围内,可随机反转的元素的个数较多。而随着温度值的不断降低,为了保证目标解的收敛速度,只能在较小的领域范围内探索。在较小的领域范围内探索,也就意味着在自变量的邻域范围内,可随机反转的元素的个数较少。即在本实施例中,所述随机反转元素的数量与第一比值成正比,所述第一比值为温度区间所包括的最高温度值与模拟退火算法中所设置的温度初始值的比值。

在本实施例中,可根据当前温度值所在的温度区间与随机反转元素数量的预设对应关系,对当前解中预设数量的元素进行邻域随机反转,得到待定新解。

例如,在本实施例中,将模拟退火算法中的温度值分为三个温度区间,第一温度区间包括大于2/3t的温度值,第二温度区间包括大于1/3t且小于或等于2/3t的温度值,第三温度区间包括小于或等于1/3t的温度值;其中,t表示模拟退火算法中所设置的温度初始值。

温度区间与随机反转元素数量的预设对应关系为:

若当前温度在第一温度区间内,随机反转元素的数量为3;

若当前温度在第二温度区间内,随机反转元素的数量为2;

若当前温度在第三温度区间内,随机反转元素的数量为1。

以上对温度区间的划分仅为举例说明之用,在其他实施例中,可对温度区间的数量、划分方式等进行调整。

在确定随机反转元素的数量后,可对当前解中预设数量的元素进行随机反转,包括:

若当前温度在第一温度区间内,随机反转a[i]数组的其中3个元素;

若当前温度在第二温度区间内,随机反转a[i]数组的其中2个元素;

若当前温度在第三温度区间内,随机反转a[i]数组的其中1个元素。

在本实施例中,随机反转元素的数量是可变的。但为了保证只在当前解附近较小邻域产生变化,反转的最大个数控制在候选子模块总数的10%左右。

在本实施例中,随机反转是指:a[i]数组的其中一个元素a[i][j]的值若为0,那么反转后所得到的待定新解中的元素b[i][j]的值为1;反之,若a[i]数组的其中一个元素a[i][j]的值为1,那么反转后所得到的待定新解中的元素b[i][j]的值为0。

例如,当前解随机反转的一个位置对应热点歌曲召回子模块,如果其值为1(代表选择),那么待定新解将不选择该子模块;如果其值为0(代表不选择),那么待定新解将选择该子模块。

发明提供的应用程序子模块的确定方法通过对模拟退火算法中的温度值分为多个温度区间,在温度值较高的温度区间内,设置较大的探索范围,以避免过早陷入局部最优解,在温度值较小的温度区间内,设置较小的探索范围,以保证目标解的收敛速度。

基于上述任一实施例,在本实施例中,所述采用模拟退火算法对所述多种初始组合结果进行求解运算,得到第一组合结果,包括:

采用模拟退火算法对所述多个候选子模块的多种组合结果进行并行求解运算,根据并行求解运算的结果确定第一组合结果。

由于模拟退火算法在理论上是依概率为1收敛到目标函数的全局最优解(即统计意义上的收敛,而不是确定收敛),因此在本实施例中,可并行运行模拟退火算法对所述多个候选子模块的多种组合结果进行求解运算的过程,在并发次数为n时,得到n个最优解,从中选择最终最优解。根据最终最优解确定第一组合结果。

例如,假设并发次数n为3,3个最优解各自对应的效用预估分分别为376.0、265.0、312.4,则选取效用预估分为376.0的解作为最终最优解。根据最终最优解中各个位置的值(0或1),确定第一组合结果,进而根据第一组合结果确定第一应用程序在第一运行环境下运行时所包含的子模块。

本发明提供的应用程序子模块的确定方法通过模拟退火算法对所述多个候选子模块的多种组合结果进行并行筛选,根据并行筛选结果确定第一应用程序在第一运行环境下运行时所包含的子模块,从而能够加快和增大找到全局最优解的速度和概率。

基于上述任一实施例,在本实施例中,所述获取第一应用程序的多个候选子模块各自的效用预估分,包括:

根据所述候选子模块在第一应用程序的应用场景中的重要程度以及所述候选子模块与应用场景无关的重要程度,为第一应用程序中的候选子模块计算效用预估分。

在之前的实施例中,第一应用程序中的候选子模块的效用预估分是预先设定的。在本实施例中,对效用评估分的计算过程进行说明。

在本实施例中,基于候选子模块在第一应用程序的应用场景下的重要程度以及候选子模块与应用场景无关的重要程度,计算效用评估分。

候选子模块一般适用于多种应用场景中,在不同应用场景中,同一个候选子模块的重要程度可能是不一样。如用户实时喜好歌曲召回子模块,在私人电台场景中,其重要程度就比较高,因为私人电台业务要求能尽快推荐用户刚听过歌曲的类似歌曲;但是在固定场景电台,比如华语歌曲电台,其重要程度就会偏低,该场景更需要诸如用户离线喜好子模块。

候选子模块的重要程度除了与应用场景相关外,也与其自身的功能相关,如相似歌曲去重处理子模块会在不同的应用场景中被用到,证明该子模块自身的重要程度较高。

基于上述两点,在本实施例中,同时基于候选子模块在第一应用程序的应用场景下的重要程度以及候选子模块与应用场景无关的重要程度,计算效用评估分。对应的计算公式为:

vi=r×va+(1-r)×vb。

其中,va表示基于候选子模块在第一应用程序的应用场景下的重要程度所设定的第一效用评估分,vb表示基于候选子模块与应用场景无关的重要程度所设定的第二效用评估分,r表示系数,其取值范围为0.0<=r<=1.0。

va、vb以及r的具体取值可根据历史数值设定。例如,作为一种可选的实现方式,可基于历史数值训练一个用于评估前述第一效用评估分的机器学习模型,然后利用该机器学习模型得到对特定候选子模块的第一效用评估分。类似的,也可基于历史数值训练一个用于评估前述第二效用评估分的机器学习模型,然后利用该机器学习模型得到对特定候选子模块的第二效用评估分。

本发明提供的应用程序子模块的确定方法结合了业界的重要性均衡评估,和具体场景下的更有针对性的重要性评估,使得计算得到的效用评估分更贴合实际情况。

下面以歌曲推荐api这一应用程序为例,对本发明的方法做一个完整的说明。

在歌曲推荐api的设计阶段,根据歌曲推荐场景提炼出的23个候选子模块x,各个子模块的效用预估分组成v;各个子模块的性能指标消耗值(性能指标包括调用时长和内存持久化占用)组成c;数据v和c详细如下面的表2所示:

其他的重要参数包括:

初始温度t:100000;

算法结束的温度下界tmin:1e-8;

同一温度下的扰动状态次数k:100;

温度下降率delta(小于1但是接近于1):0.99;

并发执行线程数:10。

表2

java下实现sa,结合不同的性能指标约束,运行得到歌曲推荐场景下的最大预估效用分和相关解如下:

组一:服务调用时长limit要求控制在200ms内;推荐服务内存占用量不超过4g。

通过模拟退火算法得到的结果为:

最大预估效用分为376.0;

当前性能指标总消耗为:调用时长200ms,内存占用量2.4g;

最优解为:(1,0,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,1,0,1,0,1,0);

歌曲推荐api在第一运行环境下运行时所包含的子模块包括:用户实时喜好歌曲召回子模块,用户离线标签召回子模块,用户离线行为相似召回子模块,用户关注歌手召回子模块,用户搜藏行为召回子模块,用户歌曲负反馈处理子模块,用户歌手负反馈处理子模块,xgboost在线排序子模块,热点歌曲召回子模块,热点歌手召回子模块,最新歌曲召回子模块,最新歌手召回子模块,歌手不重复处理子模块,不同模块召回歌曲混排子模块。

组二:服务调用时长limit要求控制在100ms内;推荐服务内存的占用不超过2g。

通过模拟退火算法得到的结果为:

最大预估效用分为265.0;

当前性能指标总消耗为:调用时长99ms,内存占用量1.349999999999999g;

最优解为:(1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0);

歌曲推荐api在第一运行环境下运行时所包含的子模块包括:用户实时喜好歌曲召回子模块,用户离线标签召回子模块,用户关注歌手召回子模块,用户搜藏行为召回子模块,用户歌曲负反馈处理子模块,用户歌手负反馈处理子模块,热点歌曲召回子模块,热点歌手召回子模块,不同模块召回歌曲混排子模块。

从组一和组二的结果来看,针对歌曲推荐场景,本发明所采用的sa能得到最大推荐预估效用的最优解;其中,具有较高预估效用分和指标消耗适中的推荐子模块,如:用户实时喜好歌曲召回子模块、用户关注歌手召回子模块、用户搜藏行为召回子模块、热点召回子模块、不同模块召回歌曲混排子模块都被纳入最后的推荐流程考虑;同时在调用时长指标约束比较宽裕的情况下(组一调用时长200ms),加入了预估效用更大,但是指标消耗更高的xgboost在线排序模块;在项目后续的开发阶段,将sa得到的最优解作为歌曲推荐服务的核心构成;能有效减少开发阶段的盲目性,并提高后期线上推荐服务运行的稳定性。

基于上述任一实施例,图2为本发明提供的应用程序子模块的确定装置的示意图,如图2所示,本发明提供的应用程序子模块的确定装置,包括:

数据获取模块201,用于获取第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,以及第一应用程序在第一运行环境下的性能指标约束值;其中,所述效用预估分用于反映所述候选子模块在所述第一应用程序中的重要程度;所述性能指标消耗值用于反映候选子模块在对应性能指标上的数值;

初始组合结果生成模块202,用于根据第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,采用贪心算法与随机化相结合的方式生成多种初始组合结果,每种初始组合结果中包括所述多个候选子模块的部分或全部;

子模块确定模块203,用于采用模拟退火算法对所述多种初始组合结果进行求解运算,得到第一组合结果;所述第一组合结果所包括的多个候选子模块的性能指标消耗值的总和小于所述性能指标约束值,所述第一组合结果所包括的多个候选子模块为所述第一应用程序在所述第一运行环境下运行时所包含的子模块。

本发明提供的应用程序子模块的确定装置通过模拟退火算法对第一应用程序中的各个候选子模块是否适用于第一运行环境进行判断,从各个候选子模块中选取满足性能指标约束值、且效用评估分最大的子模块组合,从而能够在应用程序设计阶段确定应用程序所能包含的子模块,能有效减少后期项目开发的盲目性,并提高应用程序运行的稳定性。而采用贪心算法与随机化相结合的方式来确定初始解有助于保证初始解的优质性,避免完全盲目的随机化,并能加快收敛到全局最优解的速度。

图3示例了一种电子设备的实体结构示意图,如图3所示,该电子设备可以包括:处理器(processor)310、通信接口(communicationsinterface)320、存储器(memory)330和通信总线340,其中,处理器310,通信接口320,存储器330通过通信总线340完成相互间的通信。处理器310可以调用存储器330中的逻辑指令,以执行如下方法:

获取第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,以及第一应用程序在第一运行环境下的性能指标约束值;其中,所述效用预估分用于反映所述候选子模块在所述第一应用程序中的重要程度;所述性能指标消耗值用于反映候选子模块在对应性能指标上的数值;

根据第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,采用贪心算法与随机化相结合的方式生成多种初始组合结果,每种初始组合结果中包括所述多个候选子模块的部分或全部;

采用模拟退火算法对所述多种初始组合结果进行求解运算,得到第一组合结果;所述第一组合结果所包括的多个候选子模块的性能指标消耗值的总和小于所述性能指标约束值,所述第一组合结果所包括的多个候选子模块为所述第一应用程序在所述第一运行环境下运行时所包含的子模块。

需要说明的是,本实施例中的电子设备在具体实现时可以为服务器,也可以为pc机,还可以为其他设备,只要其结构中包括如图3所示的处理器310、通信接口320、存储器330和通信总线340,其中处理器310,通信接口320,存储器330通过通信总线340完成相互间的通信,且处理器310可以调用存储器330中的逻辑指令以执行上述方法即可。本实施例不对电子设备的具体实现形式进行限定。

此外,上述的存储器330中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

进一步地,本发明实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:

获取第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,以及第一应用程序在第一运行环境下的性能指标约束值;其中,所述效用预估分用于反映所述候选子模块在所述第一应用程序中的重要程度;所述性能指标消耗值用于反映候选子模块在对应性能指标上的数值;

根据第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,采用贪心算法与随机化相结合的方式生成多种初始组合结果,每种初始组合结果中包括所述多个候选子模块的部分或全部;

采用模拟退火算法对所述多种初始组合结果进行求解运算,得到第一组合结果;所述第一组合结果所包括的多个候选子模块的性能指标消耗值的总和小于所述性能指标约束值,所述第一组合结果所包括的多个候选子模块为所述第一应用程序在所述第一运行环境下运行时所包含的子模块。

另一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的方法,例如包括:

获取第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,以及第一应用程序在第一运行环境下的性能指标约束值;其中,所述效用预估分用于反映所述候选子模块在所述第一应用程序中的重要程度;所述性能指标消耗值用于反映候选子模块在对应性能指标上的数值;

根据第一应用程序的多个候选子模块各自的效用预估分与性能指标消耗值,采用贪心算法与随机化相结合的方式生成多种初始组合结果,每种初始组合结果中包括所述多个候选子模块的部分或全部;

采用模拟退火算法对所述多种初始组合结果进行求解运算,得到第一组合结果;所述第一组合结果所包括的多个候选子模块的性能指标消耗值的总和小于所述性能指标约束值,所述第一组合结果所包括的多个候选子模块为所述第一应用程序在所述第一运行环境下运行时所包含的子模块。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1