一种图形化算法设计与代码生成工具 技术领域: [0001] 本申请涉及代码自动生成领域,尤其涉及一种图形化算法设计与代码生成工具。 背景技术: [0002] 近年来信息时代对新式算法代码的需求量显著增加,然而新式算法开发设计需要对计算机程序设计语言有一定的了解,然而大部分计算机语言语法格式较为严谨,对逻辑性要求较高,非专业人员学习成本高,开发难度大,且一旦出现语法错误或者设计逻辑错误,程序将无法运行,延长了开发人员开发时间的同时,增加了不必要的时间成本。因此借助一定的算法设计与代码生成工具,依据需要生成高质量算法代码,是目前亟需解决的问题。 [0003] 目前代码生成技术可以有效缩减软件产品开发过程的周期和所耗费的人力。 [0004] 目前算法代码生成通常基于固定的算法配置文件,面对不同业务需求时需要从代码层面直接改写配置文件或设计逻辑架构,用户具有一定的学习难度,代码的重用率较低,在后续扩展算法或加入新算法时,旧的代码生成器通常不能复用,需要重新设计;且算法具有输入性和输出性,在复杂项目中往往需要调用多个算法,传统的代码生成技术需要在程序内部手动定义各节点间输入输出关系,设计过程复杂,增加了人力和物力消耗。 发明内容: [0005] 本申请提供一种图形化算法设计与代码生成工具,可根据用户需求可视化自定义算法及算子,图形化操作可有效缩减软件产品开发过程的周期和所耗费的人力,对复杂算法适用性强。 [0006] 具体技术方案如下: [0007] 提出了一种图形化算法设计与代码生成工具,包括: [0008] 获取前面板绘制的算法模型文件,包括: [0009] 前面板完成算法流程的绘制,完成对算子的调用、修改、接口配置,用户借助前面板连线工具实现算子间的连接操作,建立算子间数据输入输出关系,该连接具有方向性,再通过选中算子在前面板右侧功能区完成算子参数设置。该前面板由功能区、算子库区、作图区构成。经上述操作完成对算子的调用、参数修改及接口配置,从而建立模型,并生成算法模型文件,算法模型文件指示了各算子参数配置及输入输出接口的调用关系。 [0010] 进一步地,所述算法模型文件包括但不限于以下内容:生成代码存储路径配置信息,算子自身属性,算子输入接口配置,算子输出接口配置;所述算子自身属性包括但不限于:算子自身ID,名称及所属类别,算子参数配置信息;所述算子输入接口配置包括但不限于:该算子输入接口名、算法模型文件中与该算子连接的上一级算子ID,即父节点ID以及算法模型文件中该算子上一级连接的算子输出接口名;所述输出接口配置包括但不限于该算子输出接口名、算法模型文件中与该算子连接的下一级算子ID,即子节点ID以及算法模型文件中该算子下一级连接的算子输入接口名; [0011] 进一步地,所述算子是搭建算法模型文件的基本元素,是具有初始化、设置参数、检查及运行方法的代码集合,生成的目标代码通过调用上述方法实现算子具体功能。算子具有指定的开发模板,可按照需求设计相应算子。算子按照功能分类为数学运算节点、比较运算节点、逻辑运算节点、统计运算节点、调制采样运算节点、数据处理节点以及控制流节点; [0012] 读取算法模型文件,在指定算法运行模板文件上编译生成具有指定功能的代码片段,包括: [0013] 依据模型文件中配置信息生成算子的初始化代码与算子参数设置代码。 [0014] 进一步地,在生成运行代码过程中,生成算法读取算法模型文件中算子输入输出接口的配置信息,通过广度优先遍历方法进行层序遍历,按照算法模型文件中各个算子运行逻辑的先后顺序确定算子运行代码生成的先后顺序,生成相应运行代码。 [0015] 进一步地,生成算子错误信息输出代码。若算子运行时出现错误,算子运行结果中会输出错误信息,错误信息输出代码遍历算子运行结果,输出相应算子错误信息。 [0016] 进一步地,依据指定算法运行模板,将上述生成的目标代码写入,并在算法模型文件中指定路径下生成,所生成的文件可通过编译器直接运行,完成相应算法操作。 [0017] 可选的,用户可针对特定需求依据提供的算子开发模板自行开发算子,实现相应算法。 [0018] 本发明还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述图形化算法设计与代码生成工具所述功能。 [0019] 本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有上述图形化算法设计与代码生成工具的计算机程序。 [0020] 为了更清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。 附图说明: [0021] 图1示出了本发明实施例系统流程图; [0022] 图2示出了本发明实施例可视化前面板主界面示意图; [0023] 图3示出了自定义算法模型流程图; [0024] 图4示出了本发明实施例前面板绘制过程中算子间输入输出接口连接方式示意图; [0025] 图5示出了经前面板绘制的自定义算法流程绘制样例; [0026] 图6示出了本发明实施例前面板算法流程绘制中算子选中状态下示意图; [0027] 图7示出了本发明实施例可视化前面板算子库区示意图; [0028] 图8示出了本发明实施例可视化前面板算子参数配置区域示意图; [0029] 图9示出了本发明实施例生成算法依据算法模型文件生成目标代码流程图; [0030] 图10示出了本发明实施例广度优先遍历算法运行机制; [0031] 图11示出了生成的自定义算法代码文件运行中出现错误输出示意图; [0032] 图12本发明实施方式提供的计算机设备的内部结构原理框图; [0033] 图13示出了错误信息输出代码程序流程图; 具体实施方式 [0034] 本发明实施例提供的一种图形化算法设计与代码生成工具,具体步骤如下:步骤S100:前面板完成算法流程的绘制,完成对算子的调用、修改、接口配置,生成算法模型文件;步骤S200:读取模型文件,依据指定算法运行模板生成具有指定功能的代码片段。算法流程如附图1所示,用户可视化前面板见附图2。 [0035] 本申请提供的一种图形化算法设计与代码生成工具,可将前面板绘制的可视化直观算法模型转换成编译器可执行代码,减少了开发工作量。同时作为完成算法基础元素的算子具有固定的开发模板,可自定义开发不同需求的算子,生成更多自定义算法,有效提升算法灵活性,进而能够应对更加复杂的开发需求。 [0036] 为详细阐述该发明具体流程,以自定义算法模型文件为例,对该发明步骤做详细介绍,自定义算法模型文件流程图如附图3所示。 [0037] 该自定义算法模型文件功能如下:用户采集三条数据,求取三个数据平均值后将结果发送给服务器。 [0038] 由自定义算法模型文件功能可知,该模型需要如下算子:InputOp数据输入算子、Concatenate合并通道算子、Average平均值算子、UrlPost数据发送算子。 [0039] 步骤S100:前面板完成算法流程的绘制,完成对算子的调用、修改、接口配置,生成算法模型文件。 [0040] 步骤S110:前面板完成对算子调用及连线。 [0041] 具体而言,用户在可视化前面板算子库区域选择上述算子,依据算法具体实现功能,完成算子间输入输出接口连接,算子间连线方式决定算子间数据传递方向及算法模型文件中输入输出接口配置信息,算子连线方式及自定义算法绘制样例如附图4及附图5所示。 [0042] 步骤S120:前面板修改算子配置信息、生成算法模型文件。 [0043] 当算法模型文件所需算子需要设置参数时,在绘图区单击此算子,算子进入选中状态,选中状态如附图6所示,前面板右侧功能区显示该算子所需设置参数,如附图8所示,设置完成后点击下方save保存,同时算法模型文件中该算子配置部分同步完成更改,进而生成该算法模型文件的配置文件。 [0044] 步骤S200:读取算法模型文件,依据指定算法运行模板文件生成具有指定功能的代码片段,流程见附图9。 [0045] 具体实施时,包括以下步骤: [0046] 步骤S210:生成算法读取算法模型文件,获取算法模型文件中的配置信息,其中配置信息以字典形式传入,包括但不限于:生成代码存储路径配置信息,算子自身属性,算子输入接口配置,算子输出接口配置。 [0047] 步骤S220:生成算法得到配置信息,依据指定算法运行模板文件生成各算子初始化、参数设置、运行及错误信息输出代码。 [0048] 具体而言,本发明中的算子被定义为类对象,具有初始化、参数设置及运行方法,其中,调用算子初始化方法需传入算子ID及算子名信息,调用参数设置方法需传入算子参数配置信息,上述信息包含在生成算法获取的配置信息中,运行方法中包含算子运行时可能出现的错误信息errorInfo,errorInfo中包含此算子ID、此算子名称errorNodeName、出现错误所在位置errorLocation以及错误类型errorType,格式为字典,可被错误信息输出代码遍历输出,错误信息输出代码输入参数为算子运行结果列表,输出格式为字典列表,错误信息输出代码逻辑见附图13,生成算法运行过程中,会生成调用上述方法的代码片段,并在算法运行模板文件上指定位置生成。 [0049] 具体实施时,步骤S220包括以下步骤: [0050] 步骤S221:依据算法模型文件中各算子顺序,从算子库中调用所需算子,生成调用算子初始化方法、参数设置方法的代码,其中算子初始化方法及参数设置方法不涉及算子接口输入输出,将按照配置文件中顺序依序生成,并写入缓存; [0051] 步骤S222:依据算法模型文件中的配置信息,生成算子运行代码和错误信息输出代码;其中算子运行代码中部分算子需要接收其他算子运行结果作为输入参数,即输入输出存在先后顺序,在本发明中采用广度优先遍历方法,依据算子间父子节点关系,在保证不遗漏算子前提下,避免算子重复调用,确保正确传参,广度优先遍历算法流程图见附图10。 [0052] 具体实施时,第一步生成算法首先初始化两个列表,运行队列与完成队列。运行队列存储待运行算子ID,完成队列存储已运行完毕算子ID;下一步生成算法遍历所有算子父节点ID,如果不存在父节点,即视为初始节点,并送入运行队列;下一步判断运行队列是否为空,若为空则结束,若不为空则取出运行队列中第一个算子ID,与完成队列中算子ID进行匹配,如果不属于已完成算子则执行下一步操作,若属于已完成算子,则取出运行队列中下一个算子ID,重复该步骤;进一步地,遍历该算子所有父节点ID,如果存在父节点且该父节点ID不在已完成队列中,考虑到数据输入输出的前后顺序,需要先遍历该父节点,将父节点ID加入运行队列头部,将该算子送入运行队列队尾,返回第三步继续执行;如果存在父节点且父节点ID在已完成队列中,符合算子运行先后顺序,生成算法将生成该父节点运行结果代码,该代码在生成此算子运行代码时粘贴在算子运行代码的形参位置,即将父节点运行结果作为形参传入该算子运行方法中,返回该步骤继续执行;如果该算子没有父节点或所有父节点均已完成此步骤遍历操作,则进行下一步,生成该段算子运行代码,写入缓存,并将该算子子节点ID加入运行队列队尾,返回第三步继续执行。 [0053] 步骤S223:将上述生成的代码依据算法运行模板文件格式,写入文件中。 [0054] 具体实施时,生成算法将缓存中已经生成的初始化、参数设置、运行及错误信息输出代码取出,下一步生成算法逐行读取算法运行模板文件,并逐行遍历寻找#Initialize operator部分,随后在此位置将缓存中代码粘贴,将插入后的结果依据算法模型文件中文件位置及文件名信息生成可直接由编译器运行的文件,该文件具有自定义算法功能。 [0055] 进一步地,由编译器运行生成的代码文件时,若算子运行过程出现异常,如该自定义算法中采集的三条数据存在空值,待所有算子运行结束后错误信息输出代码会将运行过程中出现异常的算子错误信息遍历输出,输出一个错误信息errorInfo字典列表,如附图11所示,errorInfo中包含出现错误的算子ID、此算子名称errorNodeName,此例中为2号名为Concatenate_1合并通道算子,出现错误所在位置errorLocation以及错误类型errorType,由于在本示例中为输入数据错误,因此此例中显示InputError。 [0056] 在本实施例中,提供了一种计算机设备,见附图12,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述图形化算法设计与代码生成工具所述功能。 [0057] 具体的,计算机可读存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机可读存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD‑ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。