CN107992295B - 一种面向粒的动态算法选择方法 - Google Patents
一种面向粒的动态算法选择方法 Download PDFInfo
- Publication number
- CN107992295B CN107992295B CN201711487463.5A CN201711487463A CN107992295B CN 107992295 B CN107992295 B CN 107992295B CN 201711487463 A CN201711487463 A CN 201711487463A CN 107992295 B CN107992295 B CN 107992295B
- Authority
- CN
- China
- Prior art keywords
- program
- algorithm
- individual
- dynamic
- algorithm selection
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/22—Procedural
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种面向粒的动态算法选择方法,属于计算机应用领域,本发明通过上下文的变化触发适合性测试支持程序个体在不同的运行环境中的适合性感知能力;通过适合性测试在程序个体中定位不适合的粒,实现程序个体自主进行具体算法的选择;根据决策模型和粒服务器,通过相似粒的查找和替换实现程序个体的自维护;通过程序中基础体和变体的划分实现最大化代码的可重用性和可扩展性。能够有效解决动态算法选择程序中程序行为与数据集的适合性问题,扩展动态算法选择程序的应用范围,提高了动态算法选择程序的可扩展性,降低程序维护难度。
Description
技术领域
本发明属于计算机应用领域,涉及算法选择的方法,具体涉及一种面向粒的动态算法选择方法。
背景技术
每个程序个体都有其适合运行的环境,这种适合性关系在传统的编程机制中已经隐式或显式地蕴涵了。面向粒的程序构造方法实现对Java语言的扩展,称作GranuleJ;Java语言是GranuleJ的宿主语言;基于GranuleJ,程序个体的基础体是由Java类组成,而粒、影子类、上下文变量是用GranuleJ语法和语义表达的程序单位。面向粒的程序设计范式是通过粒中封装的适合性测试自主感知程序的适合性,并在不满足适合性的情况下通过相似粒替换自主维护程序的适合性。上下文是运行环境的抽象,用以将程序依赖的环境因素表示成程序可识别的环境变量,从而使得程序个体对环境的依赖性简化为其对上下文的依赖。通过将依赖于上下文的程序行为与上下文关联起来有利于维护上下文可知的程序,然而实际运行中的上下文可能会发生变化,其可能形成的上下文组合的数量十分庞大,这就使得一个程序个体的开发和维护面临穷尽所有依赖上下文行为的问题,程序个体的规模会变得庞大、冗余,这也是现有的大多数应用程序存在的问题。
算法选择主要解决这样一类问题:对于现存的一些可用算法,哪一个算法在特定的问题领域中执行得最好,每个待处理的问题实例在给定的算法空间中都有其最适合的算法。算法选择的抽象模型如图1所示,由4部分组成:1)问题空间P表示问题实例的集合;2)特征空间F表示对问题实例P进行特征提取得到的可测特征;3)算法空间A表示适用于问题实例P的算法集合;4)性能空间Y表示每个算法其性能测度集的映射。算法选择问题可以形式化表述如下:对于给定的问题实例x∈P,其特征为f(x)∈F,找到映射S:f(x)->A,使得所选择算法α∈A最大化性能映射。分类、聚类以及回归等算法在各行各业都有着广泛的应用,当非专业的人员需要为自己的问题选择一个适合的算法时,往往需要参考许多的资料对算法进行比较,这个过程是非常耗时的,其中还可能存在错误,那么,算法选择就可以非常方便的帮助非专业人员针对自己的问题域来选择适合的算法。
传统的算法选择最直观的方法是通过反复实验选取性能最优的算法,这种方法虽然简单、直观,但是对计算资源要求过高,而且相当耗时。另一种方法是通过专家经验对算法选择进行指导,以已存在的专家知识为基础,通过规则的形式表示出专家知识,然后根据规则从一些候选模型和算法中选择适当的模型和算法。基于专家经验实现的算法选择方法存在两个方面的缺陷:一是获取专家经验代价较高,且专家经验不一定可靠;二是开发的专家系统缺乏可扩展性,即它不能对新出现的模型或算法进行处理,从而降低了系统的灵活性。
现在也出现了基于机器学习的算法选择方法,将算法选择问题作为一个学习任务,应用机器学习的方法寻求问题的特征与算法相对性能测度之间的映射关系,从而形成数据库、数据特征与算法系统的知识库,算法的选择需要依靠知识库知识的指导。基于机器学习的算法选择相对于传统的算法选择方法对于运行时的耗时变小,但其要求的计算机资源不变。现在的算法选择任务主要是在给定的算法库中选择最优的一个算法或者前top-k个最优的算法。
现有的算法选择框架中,开发人员需要将所有可能的算法模型集成到程序个体中,在程序运行过程中使用算法选择模块选择推荐的算法执行。程序不仅维护当前执行的算法,还需要维护程序中所有的算法模型,这导致了较高的代码冗余性,降低了程序的可扩展性和可维护性。当新的算法被提出后,难以直接将其加入到现有的程序中,而是需要将完整程序代码重新编译,而不能实现程序的部分按需更新。
发明内容
本发明的目的在于提供一种面向粒的动态算法选择方法,能够有效解决动态算法选择程序中程序行为与问题集的上下文信息之间的适合性问题,从而扩展动态算法选择程序的应用范围,提高动态算法选择程序的可扩展性和代码可重用性,降低了动态算法选择程序的维护难度。
本发明采用以下技术方案来实现:
一种面向粒的动态算法选择方法,包括步骤:
1)对于问题域,确定样本数据集库和算法库;
2)根据样本数据集库和算法库,构建数据集—算法的决策模型;
3)动态算法选择程序个体基于运行时系统获取输入数据集的上下文信息;
4)上下文信息的变化触发动态算法选择程序的适合性测试,应用决策模型感知个体的适合性是否被满足,若满足则个体继续运行,转3),否则转5);
5)动态算法选择程序个体定位自身中存在的不适合的算法粒,并通过与粒服务器通信,请求相似粒;
6)粒服务器从其他个体查找相似粒并返回7),若查不到则提示编写相似粒,程序个体重新初始化运行。
7)动态算法选择程序个体将自身不适合的粒替换成6)中获得的相似粒,完成本次的算法选择;
8)动态算法选择程序个体继续运行,并转3)。
所述的决策模型是根据样本数据集库、算法库和算法在样本数据集上的性能构建而成,从输入数据集决策出适合的算法及其参数。决策模型通过离线训练构建,用于动态算法选择程序运行时进行决策。
所述的动态算法选择程序个体的上下文信息和算法库中每个算法的参数是根据离线训练得到。
所述的上下文信息是数据集和动态算法选择程序运行环境中影响程序行为的要素,这个程序行为特指算法选择,算法能否被选中与算法执行性能相关,因此,上下文信息指数据集特征以及算法的运行性能。
所述的算法粒是算法代码和适合性测试封装在一起的面向粒的程序单位。算法代码作为粒的变体部分,上下文测试是该变体能否被执行的前提。
所述的适合性测试必须由上下文的改变来触发,当程序中需要处理输入数据集,并引起上下文变化则触发适合性测试。
所述的粒服务器管理动态算法选择程序个体,并按照面向粒的相似粒查找方法从个体中选择算法粒。
所述的编写相似粒就是离线提供新的算法粒,并更新决策模型。
所述的动态算法选择指的是相似粒替换,程序中以粒封装的不适合算法代码被替换为另一粒封装的其他适合算法代码。
与现有技术相比,本发明具有以下有益的技术效果:
1、本发明通过在数据集上下文改变触发动态算法选择程序个体的适合性测试来反应该程序个体的适合性是否满足,对动态算法选择程序执行输入数据集的适合性自感知能力提供了支持,实现了动态算法选择程序自主地决定何时进行算法选择。
2、本发明通过定位适合性不满足的动态算法选择程序个体中的那些不适合的算法粒,实现了动态算法选择程序自主地决定在何处进行算法选择。
3、本发明通过从粒服务器的算法选择个体中查找相似粒,程序个体通过相似粒替换机制将以粒封装的不适合算法代码替换为另一粒封装的其他适合算法代码,实现了个体程序适合性的自维护性。
4、本发明允许不同的动态算法选择程序个体分布在不同的主机上,每个程序个体只需要维护自身的算法粒,程序规模小,实现了代码的精简化。通过粒服务器进行相似粒的查找与替换,以C/S架构实现了服务器和动态算法选择程序个体的部署,实现了程序个体的并行开发与执行。
5、本发明运行动态算法选择程序时若当前个体的算法不适合处理当前的上下文,优先从粒服务器的个体管理器中查找是否已经存在封装所需算法粒的程序个体,若存在则可以通过相似粒查找替换从该程序个体中获取所需的粒来得到算法,而不需要自身重新编写相似粒,在一定程度上提高动态算法选择程序的可扩展性,最大化程序代码的可重用性。
6、本发明允许动态算法选择程序个体的开发不受问题空间数据集的制约,而每个粒的开发不受其他动态算法选择程序个体粒的影响,从而将动态算法选择程序的开发目标分解为相互独立的动态算法选择程序的通用性目标和问题空间特殊性目标,这有助于降低程序开发难度、维护难度,提高程序的可维护性。
附图说明
图1是算法选择的抽象模型图;
图2是动态算法选择程序的运行支撑图;
图3是动态算法选程序个体的粒组成图;
图4是动态算法选程序个体的相似粒替换原来图;
图5是动态算法选择程序总框架图;
图6是动态算法程序动态代码更新实现算法选择的流程图;
图7是动态算法选程序个体的开发运行流程图;
图8是动态算法选程序个体管理器的开发运行流程图。
具体实施方式
下面结合具体的附图对本发明做进一步的详细说明,所述是对本发明的解释而不是限定。
面向粒的程序构造方法实现对Java语言的扩展,称作GranuleJ;Java语言是GranuleJ的宿主语言;基于GranuleJ,程序个体的基础体是由Java类组成,而粒、影子类、上下文变量是用GranuleJ语法和语义表达的程序单位。
一种面向粒的动态算法选择方法,包括步骤:
1)对于问题域,确定样本数据集库和算法库;
问题域和算法是对应关系的,如解决分类问题的分类算法,解决聚类问题的聚类算法等。
2)根据样本数据集库和算法库,构建数据集—算法的决策模型;
对于算法库中的每个算法离线训练数据集库中的数据集,得到每个数据集相对于每个算法的性能,决策模型是根据样本数据集库、算法库和算法在样本数据集上的性能构建而成,其作用是从输入数据集决策出适合的算法及其参数。
3)动态算法选择程序个体基于运行时系统获取输入数据集的上下文信息;
上下文是运行环境的抽象,用以将程序依赖的环境因素表示成程序可识别的环境变量,从而使得程序个体对环境的依赖性简化为其对上下文的依赖。在动态算法选择程序中,不同的数据集所适合的算法可能不同,而数据集在程序环境中可以以数据集特征的形式表示,因此,上下文信息特指数据集特征。
4)上下文信息的变化触发动态算法选择程序的适合性测试,应用决策模型感知个体的适合性是否被满足,若满足则个体继续运行,转3),否则转5);
每个粒的构造都是基于特定的上下文状态的,在这个特定的上下文状态下程序个体的适合性默认是满足的,当上下文发生改变时,满足原上下文状态的适合性不一定满足改变后的上下文,因此触发程序个体的适合性。动态算法选择程序中的适合性指当前的算法是否适合处理输入数据集,而离线训练的决策模型是这个适合性感知的判断标准。
5)动态算法选择程序个体定位自身中存在的不适合的算法粒,并通过与粒服务器通信,请求相似粒;
6)粒服务器从其他个体查找相似粒并返回7),若查不到则提示编写相似粒,程序个体重新初始化运行。
由于每个面向粒的动态算法选择程序只维护自身当前的算法粒,其他程序个体中可能存在满足当前程序上下文状态的算法粒,程序可以通过粒服务器管理的其他动态算法选择程序获取到适合的算法粒直接运行。若无法从其他的程序个体中获取相似粒,则需要定位的提示程序维护人员编写相似粒。
7)动态算法选择程序个体将自身不适合的粒替换成6)中获得的相似粒,完成本次的算法选择;
相似粒替换是程序中以粒封装的不适合算法代码被替换为另一粒封装的其他适合算法代码,只需要替换粒中的变体部分而不是替换整个粒。
8)动态算法选择程序个体继续运行,并转3)。
实现本发明的面向粒的动态算法选择程序方法,主要由以下几个方面组成:
1、动态算法选择程序的运行支撑
如图2所示,动态算法选择程序个体的运行支撑环境是由计算机系统、上下文服务器、粒服务器以及它们之间的网络构成。
计算机系统中都部署了动态算法选择的本地个体管理器和上下文管理器,个体管理器从粒服务器上获取与运行时动态算法选择程序相关的个体信息,为动态算法选择程序个体的算法选择提供了以粒为模块单位的算法替换;上下文管理器与上下文服务器通信获得本地动态算法选择程序相关的上下文信息,维护动态算法选择程序的上下文信息,为程序个体运行过程中适合性测试提供上下文信息。
所有的上下文都需要在上下文服务器上发布,上下文服务器负责全局所有计算机系统的上下文的全局管理,可以接收计算机系统的上下文管理器的上下文请求和处理上下文信息,为所有算法选择程序个体的适合性测试提供上下文信息。
所有程序个体首次加载执行都需要在粒服务器上注册,粒服务器维护所有计算机系统中程序个体的粒信息,可以接收计算机系统的本地个体管理器的请求,为动态算法选择程序进行适合性测试和相似粒查找等提供运行机制的支持。
所有的动态算法选择程序部署在计算机系统上,与上下文服务器和粒服务器基于网络协议进行通信。
2、动态算法选择程序个体的适合性感知
粒是适合性可知的程序单元,它由适合性测试模块和影子类组成。每一个粒都与一个依赖上下文的适合性测试模块相关联。影子类可以定义新的域和粒方法,也可以改进宿主语言应用程序中定义的方法。
上下文变量是程序个体之间的共享变量,它是运行环境(上下文)在程序语言中的抽象构造。每一个适合性测试都依赖于一个上下文变量;上下文变量及当前值由上下文管理器维护。
适合性测试代码片段是封装在粒中的反映该粒适合性的一个方法,它依赖于一个上下文变量;执行适合性测试代码的结果取决于这个上下文变量的当前值,也就是上下文管理器维护的上下文信息;适合性测试的结果返回真或假;返回结果为真,则粒是适合的,否则,粒是不适合的。
程序个体中的所有粒共同组成一棵粒树,借助于粒树,通过粒的适合性知道程序个体的适合性;有两种触发适合性测试的途径:一个是在程序个体中执行了check-fitness()方法调用;另一个是影子类方法被调用时触发。
3、动态算法选择程序个体算法选择机制
动态算法选择程序中的算法与粒之间的关系是:一个算法对应一个粒来进行粒的构造,而则粒存在每个的程序个体中,程序个体可以是程序员自己开发的,也可以是程序运行过程中根据适合性要求进行了算法动态选择以后形成的新个体。
动态算法选择程序进行相似粒替换是为了维护程序的适合性。运行过程中的程序个体,由于数据集的特征不相同所适合的算法是不同的,通过适合性测试检测到程序个体的适合性不满足,此时,需要将程序个体中不适合的算法,动态替换为适合的算法,保持程序个体的适合性,适合的算法由粒服务器提供。
程序个体的算法替换是针对变体的,替换是以粒为单位进行的,即不适合的粒替换为适合的相似粒,替换过程通过相似粒替换机制来实现。
相似粒与源粒之间满足如下条件:程序个体中粒gA与同种群内另一个程序个体的粒gB互为相似粒,那么gA和gB所依赖的上下文变量是相同的,对应的根类也应该是相同的,且gA的父粒与gB的父粒若存在则也为相似粒。
粒替换必须到达程序的安全点才能进行,若当前的粒没有到达安全点,则替换任务推迟到程序运行到安全点。粒替换的安全点是指被替换的源粒的所有后代粒的粒方法都没有处于活动状态。
4、动态算法选择程序开发运行方法
动态算法选择程序中,每个程序个体对于不同的问题域可以基于已有程序种群开发新个体,也可以开发新的程序种群的新个体。
如图3为程序个体的粒模块组成图,反应粒组成以及适合性测试原理:
粒是由适合性测试和影子类集合组成,并依附于父粒、根粒和上下文变量;适合性测试依赖于上下文变量,它反应了粒的适合性;适合性测试结果返回真,则粒是适合的,否则,粒是不适合的。每个影子类可以定义域和方法。其中方法可以是影子类新定义的方法,也可以是对宿主语言应用程序中的方法进行改进的方法。
在动态算法选择程序中以数据集特征为上下文信息,数据集特征代表数据集,当数据集改变触发粒的适合性测试,适合性测试是应用决策模型进行感知当前粒的适合性,粒中的影子类则是具体算法的实现。在动态算法选择程序中粒封装了应用决策模型进行适合性感知的适合性测试和实现算法具体实现的影子类。
粒的组成原理是以根类为根的基类子树中的类与影子类按照面向粒的程序构造方法产生合成类表示程序的结构和行为;也就是说通过粒使得影子类对基类行为产生改进。
粒与粒之间具有类层次关系,粒和其父粒存在关联关系,程序个体的所有粒共同构成个体的粒树。
如图4所示,为相似粒替换的原理:
动态算法选择程序个体1由基础体和变体组成;基础体由程序个体所有的、具有树状层次关系的基类共同组成,而变体是所有粒对应的影子类集合。每个程序个体都对应一棵粒树,粒树由程序个体所有的、具有层次关系的粒共同组成。
相似粒替换是在同种群范围内,基于个体的粒树,以粒树为单位进行替换的;程序个体2也包括基础体和变体,同时也拥有粒树,程序个体1和程序个体2同属于一个程序种群,那么程序个体1的基础体和程序个体2的基础体完全相同。程序个体1在运行过程中,由于处理的数据集发生变化,程序个体的适合性不满足,也就是当前算法不适合处理输入数据集,算法封装在粒中,则当前粒需要被替换。通过粒服务器查找程序个体1当前的不适合粒的相似粒,相似粒来自同种群的程序个体2中。通过相似粒替换,程序个体1中的不适合粒被替换成程序个体2中的相似粒,而程序个体1粒树中不适合粒的子粒也需要全部替换成程序个体2中相似粒的子粒,保持程序个体1的适合性。
在相似粒替换过程中,基础体保持不变,而因为粒的替换,程序个体1以及其中的变体和粒树都发生了演变;整个相似粒替换是在运行过程中进行的,是针对程序个体进行的代码的更新,也就是算法的重新选择。
如图5所示,动态算法选择程序的开发主要包括离线学习生成决策模型、运行时代码组合实现动态算法选择两个部分。
离线学习生成决策模型。在算法选择问题上,问题域可以分成分类、聚类、回归和维度约减四种类别,每个类里根据具体情况的不同,又有不同的处理方法—算法。每个算法都有自己独特的特点,适合于处理某一类型的数据集,例如人工神经网络算法(ArtificialNeural Networks,ANN)训练需要大量的数据,则其适合于大样本数据的分类问题;贝叶斯算法(Bayes)是一类利用概率统计知识进行分类的算法,由于其独立性假设使其使用与属性关联度较低的数据。离线学习需要对于算法库中的每个算法离线训练数据集库中的数据集,得到每个数据集对算法的性能,决策模型是根据样本数据集库、算法库和算法在样本数据集上的性能构建而成。根据决策模型构造粒中的适合性测试方法。
运行时代码组合实现动态算法选择。在运行时系统中加载程序,获取当前待处理数据集的上下文信息,由于不同的数据集的上下文信息不同,上下文信息的改变触发程序的适合性测试。根据上下文信息进行程序个体的适合性判断,适合性判断中使用了离线学习的决策模型,将决策模型集成到程序个体粒中,成为适合性测试结果的判断标准。如图6所示,若适合性判断满足的,则不进行算法替换选择;否则根据上下文信息和离线学习的决策模型来从服务器上获取相似粒,获取相似粒,程序个体通过相似粒替换机制,将源粒与相似粒进行替换,基础程序与相似粒进行代码组合,实质是替换源程序个体中的算法,通过组合相似粒中的算法形成新个体满足程序的适合性。
如图6是动态算法选择个体的算法选择流程:
首先,有Java虚拟机将动态算法选择程序个体加载到系统上运行,程序运行过程中不断地获取上下文信息,如果上下文发生改变,当程序执行流程到达程序个体的适合性检查点时会触发当前粒适合性测试。如果程序个体中含有check-fitness()方法调用,那么该调用点就是适合性测试触发点,如果当前粒的适合性测试结果是适合的则程序个体继续执行,若适合性不满足则请求相似粒,根据粒服务器中的个体管理器得到存在相似粒的个体信息,对个体粒树的所有粒按照先根序遍历次序逐一检查适合性,这个适合性测试的判断需要应用到离线学习的决策模型,根据当前的上下文信息和决策模型来进行判断当前检测的粒也就是算法是否适合。找到适合的粒则从粒服务器请求得到相似粒,并进行相似粒替换,程序个体继续执行。
所述的check-fitness()方法是宿主语言树状类层次结构的根提供的public方法。
如果程序中不含有check-fitness()方法调用,那么粒方法调用入口就是适合性测试的安全点,触发对该粒的适合性测试,并在不适合时,通过查找相似粒,获取相似粒,通过相似粒替换完成适合性测试过程。
通过相似粒替换更新代码完成算法选择后,原有的适合性测试检查点执行的方法调用将继续执行,若是影子类方法则调用的代码可能经过相似粒替换已经更改,若是check-fitness()方法则成功返回。
适合性检查和相似粒替换过程有别于程序执行的主流程,后者完成程序的功能,前者完成算法动态选择过程,这两个流程是集成在一起的。
如图7所示,为动态算法选择程序个体的开发和运行流程,通过以下步骤完成:
(1)编写基类
基类是通过宿主语言编写的程序,所有的基类共同构成了程序个体的基础体。同一种群下的所有程序个体具有相同的基类集合,通过基类的编写,程序个体所属的程序种群就已经确定。基类适用于各种算法选择问题程序的统一功能开发,可以基于基类开发具有差异化功能的程序个体。
(2)编写粒
粒的编写采用面向粒的编程语言。在同一程序种群下,粒是体现不同程序个体之间差异性的程序构造,它将基类和部分类关联起来。粒与其相似粒之间能够进行替换,更新程序个体中基类和部分类之间的合成关系,以保持程序个体的所有粒的适合性。
(3)编写部分类
部分类的编写采用面向粒的编程语言,部分类编写为基类的影子类。部分类是粒构成的一部分,粒体现程序个体的差异性,追根溯源是粒中的影子类体现程序个体的差异性,在动态算法选择程序中,影子类就是具体算法的实现。
(4)编译产生程序个体
对个体程序的源代码进行编译,产生字节码和相应的配置文件。
(5)加载程序个体
将程序个体加载到运行时环境中运行。
(6)代码动态更新
程序个体基于图6所示的流程更新代码动态选择算法,通过更新代码,使得程序个体总是选择最适合的算法来执行当前数据实例,实现程序个体适合性的自维护性。
如图8是动态算法选程序个体管理器开发运行流程,个体管理器负责所有动态算法选择程序个体的管理,为动态算法选择程序个体的算法选择提供了以粒为模块单位的算法替换,因此,个体管理器中的程序个体的开发主要参照动态算法选择程序个体,包括以下步骤:
(1)借用基类
借用动态算法选择程序个体的基类开发个体管理器中的其他程序个体的版本,保证了这些开发程序个体能够为运行时的动态算法选择程序个体提供适合的算法粒进行算法的替换。
(2)借用粒
个体管理器中的粒编写是与动态算法选择程序个体中的粒编写一一对应的,它是基于动态算法选择程序编写的程序个体粒,开发出在其他的上下文适合的动态算法选择程序个体中粒的另一个版本,也就是其他算法。
(3)编写部分类
通过编写部分类,体现不同的上下文程序个体的个性化特色。
(4)对程序个体进行编译
对个体程序的源代码进行编译,产生字节码和相应的配置文件。
(5)加载程序个体。
将个体程序加载到运行环境中。
(6)进行适合性测试。
根据个体程序中的粒的doFitness()方法进行适合性测试。
(7)将个体程序输出到个体管理器。
将程序个体注册到个体管理器,以备动态算法选择程序个体进行相似粒查找和替换。
个体管理器仅仅为动态算法选择程序个体提供范围内运行的适合算法,所以图7中的开发过程在一个完成个体开发之后,在任何时候从任意步骤开始对该程序个体进行改进都是有效的。
综上所述,本发明通过不同的数据集上下文的改变触发动态算法选择程序个体的适合性测试,适合性测试结果来反映程序个体的适合性是否被满足,能够有效解决动态算法选择程序中程序行为与数据集的上下文信息之间的适合性问题;本发明通过定位适合性不满足的动态算法选择程序个体中的不适合算法粒,具体化到动态算法选择程序个体中由不适合的粒封装的那些模块化的变体代码,通过仅替换相似粒实现动态算法选择程序的自维护性,最大化代码的可重用性;本发明允许动态算法选择程序根据不同的数据集上下文自动的选择不同的算法来解决问题,从而扩展了动态算法选择程序的应用范围;本发明允许通过基于动态算法选择程序个体开发新的程序个体来进行程序功能的扩展,通过分布式的开发方式提高程序开发效率,提高程序的可扩展性,降低程序的维护难度。
Claims (7)
1.一种面向粒的动态算法选择方法,其特征在于,包括步骤:
1)对于问题域,即根据分类问题、聚类问题确定样本数据集库和算法库;
2)根据样本数据集库和算法库,构建数据集—算法的决策模型;决策模型是根据样本数据集库、算法库和算法在样本数据集上的性能构建而成,其作用是从输入数据集决策出适合的算法及其参数,决策模型通过离线训练构建,用于动态算法选择程序运行时进行决策;
3)动态算法选择程序个体基于运行时系统获取输入数据集的上下文信息;上下文信息是数据集和动态算法选择程序运行环境中影响程序行为的要素,这个程序行为特指算法选择,算法能否被选中与算法执行性能相关,因此,上下文信息指数据集特征以及算法的运行性能;
4)上下文信息的变化触发动态算法选择程序的适合性测试,应用决策模型感知个体的适合性是否被满足,若满足则个体继续运行,转3),否则转5);
5)动态算法选择程序个体定位自身中存在的不适合的算法粒,并通过与粒服务器通信,请求相似粒;
6)粒服务器从其他个体查找相似粒并返回7),若粒服务器查不到则提示编写相似粒,程序个体重新初始化运行;
7)动态算法选择程序个体将自身不适合的粒替换成6)中获得的相似粒,完成本次的算法选择;
8)动态算法选择程序个体继续运行,并转3)。
2.根据权利要求1所述的一种面向粒的动态算法选择方法,其特征在于,所述的动态算法选择程序个体的上下文信息和算法库中每个算法的参数是根据离线训练得到。
3.根据权利要求1所述的一种面向粒的动态算法选择方法,其特征在于,所述的算法粒是算法代码和适合性测试封装在一起的面向粒的程序单位,算法代码作为粒的变体部分,上下文测试是该变体能否被执行的前提。
4.根据权利要求1所述的一种面向粒的动态算法选择方法,其特征在于,所述的适合性测试必须由上下文的改变来触发,当程序中需要处理的输入数据集引起上下文变化则触发适合性测试。
5.根据权利要求1所述的一种面向粒的动态算法选择方法,其特征在于,所述的粒服务器管理动态算法选择程序个体,并按照面向粒的相似粒查找方法从个体中选择算法粒。
6.根据权利要求1所述的一种面向粒的动态算法选择方法,其特征在于,所述的编写相似粒就是离线提供粒服务器中不存在的算法粒,并更新决策模型。
7.根据权利要求1所述的一种面向粒的动态算法选择方法,其特征在于,所述的动态算法选择指的是相似粒替换,程序中以粒封装的不适合算法代码被替换为另一粒封装的其他适合算法代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711487463.5A CN107992295B (zh) | 2017-12-29 | 2017-12-29 | 一种面向粒的动态算法选择方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711487463.5A CN107992295B (zh) | 2017-12-29 | 2017-12-29 | 一种面向粒的动态算法选择方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107992295A CN107992295A (zh) | 2018-05-04 |
CN107992295B true CN107992295B (zh) | 2021-01-19 |
Family
ID=62040292
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711487463.5A Active CN107992295B (zh) | 2017-12-29 | 2017-12-29 | 一种面向粒的动态算法选择方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107992295B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109710214A (zh) * | 2018-08-17 | 2019-05-03 | 深圳壹账通智能科技有限公司 | 电子签约软件的组建方法、装置、终端设备及存储介质 |
CN109976723B (zh) * | 2019-03-12 | 2022-08-12 | 北京国电智深控制技术有限公司 | 一种算法开发平台、算法开发方法及计算机可读存储介质 |
CN112905274A (zh) * | 2021-05-06 | 2021-06-04 | 鹏城实验室 | 数据分析方法、装置、终端设备以及计算机可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101819536A (zh) * | 2010-05-14 | 2010-09-01 | 西安交通大学 | 一种面向粒的程序构造方法 |
CN101826017A (zh) * | 2010-05-14 | 2010-09-08 | 西安交通大学 | 一种面向粒的编程集成开发平台 |
CN102708404A (zh) * | 2012-02-23 | 2012-10-03 | 北京市计算中心 | 一种基于机器学习的多核下mpi最优运行时的参数预测方法 |
CN103530147A (zh) * | 2013-09-17 | 2014-01-22 | 西安交通大学 | 一种面向粒的移动终端代码更新方法 |
CN106384282A (zh) * | 2016-06-14 | 2017-02-08 | 平安科技(深圳)有限公司 | 构建决策模型的方法和装置 |
CN106484401A (zh) * | 2016-09-23 | 2017-03-08 | 东北大学 | 一种面向对象软件的自动化重构方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7480666B2 (en) * | 2005-08-11 | 2009-01-20 | International Business Machines Corporation | Method for navigating beans using filters and container managed relationships |
-
2017
- 2017-12-29 CN CN201711487463.5A patent/CN107992295B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101819536A (zh) * | 2010-05-14 | 2010-09-01 | 西安交通大学 | 一种面向粒的程序构造方法 |
CN101826017A (zh) * | 2010-05-14 | 2010-09-08 | 西安交通大学 | 一种面向粒的编程集成开发平台 |
CN102708404A (zh) * | 2012-02-23 | 2012-10-03 | 北京市计算中心 | 一种基于机器学习的多核下mpi最优运行时的参数预测方法 |
CN103530147A (zh) * | 2013-09-17 | 2014-01-22 | 西安交通大学 | 一种面向粒的移动终端代码更新方法 |
CN106384282A (zh) * | 2016-06-14 | 2017-02-08 | 平安科技(深圳)有限公司 | 构建决策模型的方法和装置 |
CN106484401A (zh) * | 2016-09-23 | 2017-03-08 | 东北大学 | 一种面向对象软件的自动化重构方法 |
Non-Patent Citations (1)
Title |
---|
一种利用适合性测试支持方法重定向的演算;赵银亮,朱常鹏,韩博,曾庆花;《软件学报》;20130715;第2页第6段到第13页第7段 * |
Also Published As
Publication number | Publication date |
---|---|
CN107992295A (zh) | 2018-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2019200046B2 (en) | Utilizing artificial intelligence to test cloud applications | |
US10565475B2 (en) | Generating a machine learning model for objects based on augmenting the objects with physical properties | |
CA2949251C (en) | Systems and methods for software analysis | |
US20190324731A1 (en) | Methods and apparatus for evolving computer programs | |
US5535389A (en) | Business process objects with associated attributes such as version identifier | |
US7661088B2 (en) | Systems and methods to efficiently and automatically effect population of custom controls onto a visual designer toolbox | |
CN107992295B (zh) | 一种面向粒的动态算法选择方法 | |
US8600925B2 (en) | Object-relational mapped database initialization | |
CN111770116B (zh) | 一种执行智能合约的方法、区块链节点、存储介质 | |
JP2003015876A (ja) | オブジェクト指向システム | |
CN111770204B (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
EP3961438A1 (en) | Method for executing smart contract, blockchain node, and storage medium | |
US8127282B2 (en) | Recompilation of a class with a java static variable | |
Abu-Aisheh et al. | A parallel graph edit distance algorithm | |
CN111768184A (zh) | 一种执行智能合约的方法及区块链节点 | |
Jung et al. | DDT: design and evaluation of a dynamic program analysis for optimizing data structure usage | |
CN111770202B (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
CN113841135A (zh) | Dbms中的服务管理 | |
US8745605B2 (en) | Execution contexts with polymorphic type implementations | |
US11392356B1 (en) | Online machine learning based compilation | |
US20230289648A1 (en) | Generating validated quantum function invocations | |
US11726775B2 (en) | Source code issue assignment using machine learning | |
CN117355818A (zh) | 防止最小运行时上的垃圾对象积累 | |
Mosaner et al. | Machine-Learning-Based Self-Optimizing Compiler Heuristics✱ | |
WO2021011117A1 (en) | Detecting misconfiguration and/or bug(s) in large service(s) using correlated change analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |