发明内容
基于此,有必要针对传统方案导致检测电力系统负荷削减量成本高的技术问题,提供一种电力系统负荷削减量的检测方法和系统。
一种电力系统负荷削减量的检测方法,包括如下步骤:
将计算电力系统负荷削减量的电力数据输入设定的软件开发程序,将所述软件开发程序提供的jar文件导入Java平台,在所述Java平台编写与输入软件开发程序的电力数据相对应的数据结构;
在预置的计算引擎上通过划分多个计算能力相同的工作区间,统计所述数据结构对应的任务数目,根据所述任务数目将所述数据结构平均分配至各个工作区间;
分别在各个工作区间执行并行处理操作,引入预设的Scala语言计算程序分别计算各个工作区间对应的负荷削减分量;
执行计算引擎的收集操作,将所述负荷削减分量返回到计算引擎的主程序,获取电力系统的负荷削减总量。
一种电力系统负荷削减量的检测系统,包括:
输入模块,用于将计算电力系统负荷削减量的电力数据输入设定的软件开发程序,将所述软件开发程序提供的jar文件导入Java平台,在所述Java平台编写与输入软件开发程序的电力数据相对应的数据结构;
划分模块,用于在预置的计算引擎上通过划分多个计算能力相同的工作区间,统计所述数据结构对应的任务数目,根据所述任务数目将所述数据结构平均分配至各个工作区间;
计算模块,用于分别在各个工作区间执行并行处理操作,引入预设的Scala语言计算程序分别计算各个工作区间对应的负荷削减分量;
获取模块,用于执行计算引擎的收集操作,将所述负荷削减分量返回到计算引擎的主程序,获取电力系统的负荷削减总量。
上述电力系统负荷削减量的检测方法和系统,可以将用于计算电力系统负荷削减量的电力数据输入软件开发程序,将所述软件开发程序提供的jar文件导入Java平台,在所述Java平台编写电力数据相对应的数据结构,在计算引擎上划分多个计算能力相同的工作区间,统计上述电力数据对应的数据结构对应的任务数目,根据所述任务数目将所述数据结构平均分配至各个工作区间,再分别在各个工作区间执行并行处理操作,引入预设的Scala语言计算程序分别计算各个工作区间对应的负荷削减分量,再执行计算引擎的收集操作,将所述负荷削减分量返回到计算引擎的主程序,以获取电力系统的负荷削减总量,有效提高了获取电力系统负荷削减量的效率,可以降低上述负荷削减量的检测成本。
一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上所述的电力系统负荷削减量的检测方法。
上述计算机可读存储介质上存储的计算机程序,将用于计算电力系统负荷削减量的电力数据对应的数据结构平均分配至各个工作区间,分别在各个工作区间执行并行处理操作,并引入预设的Scala语言计算程序分别计算各个工作区间对应的负荷削减分量,以便获取电力系统的负荷削减总量,提高了上述负荷削减总量的获取效率,降低了相应的获取成。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述的电力系统负荷削减量的检测方法。
上述计算机设备中,处理器执行所述程序时可以实现如上所述的电力系统负荷削减量的检测方法,有效提高了获取电力系统负荷削减量的效率,可以降低上述负荷削减量的检测成本。
具体实施方式
下面结合附图对本发明的电力系统负荷削减量的检测方法和系统的具体实施方式作详细描述。
参考图1,图1所示为一个实施例的电力系统负荷削减量的检测方法流程图,包括如下步骤:
S10,将计算电力系统负荷削减量的电力数据输入设定的软件开发程序,将所述软件开发程序提供的jar文件导入Java平台,在所述Java平台编写与输入软件开发程序的电力数据相对应的数据结构;
上述软件开发程序可以包括Matlab软件等用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式软件。软件开发程序提供的jar文件可以为“javabuilder.jar”等Matlab builder for Java这样将软件开发程序中文件打包为Java平台所对应文件的工具。在Java平台编写与输入软件开发程序的电力数据相对应的数据结构,使上述数据结构可以完整地表征输入软件开发程序,且用于计算电力系统负荷削减量的电力数据。
S20,在预置的计算引擎上通过划分多个计算能力相同的工作区间,统计所述数据结构对应的任务数目,根据所述任务数目将所述数据结构平均分配至各个工作区间;
上述计算引擎可以包括Spark等专为大规模数据处理而设计的快速通用的计算引擎。若计算引擎为Spark,则可以选择Spark上的开发语言为Scala,在Spark上继承org.apache.spark.Partitioner这个类来实现自定义分区功能,实现多个计算能力相同的工作区间(worker)的划分,为了确保每个worker的计算能力相同,可是使各个worker具有相同的CPU核数目和内存大小。
S30,分别在各个工作区间执行并行处理操作,引入预设的Scala语言计算程序分别计算各个工作区间对应的负荷削减分量;
上述并行处理操作可以包括mapPartitions操作等高效率并行操作。上述Scala语言为一种类似java的编程语言其可以对Java平台产生的相关数据进行无缝衔接,以保证对电力数据对应的数据结构进行相应处理的顺利性。上述步骤分别在各个工作区间执行并行处理操作,引入预设的Scala语言计算程序分别计算各个工作区间对应的负荷削减分量,在保证所计算的负荷削减分量的准确性的基础上,有效提高了上述负荷削减分量的获取效率。
S40,执行计算引擎的收集操作,将所述负荷削减分量返回到计算引擎的主程序,获取电力系统的负荷削减总量。
上述计算引擎的收集操作可以为Spark的collect操作。执行计算引擎的收集操作,将所述负荷削减分量返回到计算引擎的主程序,以此确定电力系统的负荷削减总量,使确定的负荷削减总量具有较高的准确性,大幅度提高了上述负荷削减总量的确定效率,简化了其确定流程。
本实施例提供的电力系统负荷削减量的检测方法,可以将用于计算电力系统负荷削减量的电力数据输入软件开发程序,将所述软件开发程序提供的jar文件导入Java平台,在所述Java平台编写电力数据相对应的数据结构,在计算引擎上划分多个计算能力相同的工作区间,统计上述电力数据对应的数据结构对应的任务数目,根据所述任务数目将所述数据结构平均分配至各个工作区间,再分别在各个工作区间执行并行处理操作,引入预设的Scala语言计算程序分别计算各个工作区间对应的负荷削减分量,再执行计算引擎的收集操作,将所述负荷削减分量返回到计算引擎的主程序,以获取电力系统的负荷削减总量,有效提高了获取电力系统负荷削减量的效率,可以降低上述负荷削减量的检测成本。
在一个实施例中,上述分别在各个工作区间执行并行处理操作,引入预设的Scala语言计算程序分别计算各个工作区间对应的负荷削减分量的过程之前,还可以包括:
利用软件开发程序将其中的串行算法封装成一个Java类,将所述Java类发布为jar包;
通过所述jar包编写所述电力数据对应的Java语言计算程序,并生成所述Java语言计算程序对应的Scala语言计算程序。
若上述软件开发程序为Matlab软件,则Matlab软件可以将Matlab串行算法封装成一个Java类,再发布为一个完整的jar包,还可以记录串行Matlab软件的输入和输出数据(电力数据的输入和输出)的值和类型;针对Matlab软件的输入(电力数据的输入),在Java中编写和Matlab相对应的数据结构,得到上述输入的电力数据所对应的数据结构。
上述Java语言计算程序以及Scala语言计算程序均可以对相应的数据结构进行处理,获取其处理的数据结构所对应的负荷削减量。
作为一个实施例,上述通过所述jar包编写所述电力数据对应的Java语言计算程序的过程之后,还可以包括:
将所述数据结构传入所述Java语言计算程序,读取所述Java语言计算程序输出的第一测试结果;
通过软件开发程序计算所述数据结构对应的第二测试结果;
若所述第一测试结果和所述第二测试结果不相等,则在所述Java平台更新与所述电力数据相对应的数据结构。
本实施例将第一测试结果和第二测试结果进行对比,验证Java语言计算程序输出的第一测试结果与软件开发程序计算所述数据结构对应的第二测试结果是否一样,如果不相同极有可能是数据结构构造错误,需要在所述Java平台更新与所述电力数据相对应的数据结构,以保证后续所确定的负荷削减量的准确性。
在一个实施例中,上述分别在各个工作区间执行并行处理操作,引入预设的Scala语言计算程序分别计算各个工作区间对应的负荷削减分量的过程可以包括:
分别在各个工作区间上利用设定运算平台将所述Scala语言计算程序分解成多个内核,每个内核交由一个网格完成,将各个网格再划分多个块,每个块再创建多个线程,分别利用各个线程执行计算所述工作区间负荷削减分量的任务。
上述设定运算平台包括cuda等通用并行计算架构,使GPU(图形处理器)能够解决复杂计算问题的运算平台。本实施例具有较高的计算效率。
作为一个实施例,若设定运算平台为cuda,计算引擎为Spark。这样,每个worker分区(工作区间)上的计算可以利用cuda来加速,cuda将计算分解成一个个内核(kernel),每个kernel交由一个Grid(网格)完成,每个Grid再划分一个个的Block(块),每个Block再创建多个Thread(线程),执行任务。这样每一个worker分区上的负荷削减分量是并行计算的,具有较高的计算效率。
作为一个实施例,cuda的加速由C语言编写,而spark上面不能直接支持C语言,此时可以通过如下2种方法使spark的各worker分区分别实现负荷削减分量的计算:第一种是使用能够以java作为开发语言的JCuda,JCuda提供了和Cuda C相似的api(应用程序编程接口),这样只需按照Cuda C的方式开发即可;第二种就是使用JNI(Java本地接口):首先,编写带有native声明的方法的java类,只需要声明方法,不需要实现,具体的实现在C中实现;其次,利用javac命令编译所写的java类;接着,利用javah命令来编译生成.h的头文件,以便导入到C程序中;然后,实现C的本地方法,即编写CUDA kernel程序,在程序中导入生成的.h文件,并把c程序保存在以.cu为后缀名的文件中。最后,将包含CUDA程序的.cu文件编译生成动态链接库(.so文件)。最后要把JNI需要的一些头文件路径(系统的jdk路径)添加进去,实现Java调用cuda程序。
在一个实施例中,上述分别在各个工作区间执行并行处理操作,引入预设的Scala语言计算程序分别计算各个工作区间对应的负荷削减分量的过程之后,还可以包括:
压缩在各个工作区间获取的负荷削减分量,将压缩处理得到的结果缓存成弹性分布式数据集。
本实施例在各个工作区间上分别计算相应的负荷削减分量后,每个工作区间中的计算结果对应Matlab等软件开发程序中的Struct类型,在Spark这些计算引擎中无法实现自动序列化,需要对Struct中的每个部分自定义序列化对象,并且采用先进的压缩算法(如kyro、snappy等等)对各个工作区间获取的负荷削减分量进行压缩处理,若上述工作区间的计算结果需要在下一个阶段继续使用,则可以将结果缓存成RDD(Resilient DistributedDatasets,弹性分布式数据集),以保证后续使用的便利性。
在一个实施例中,上述将用于计算电力系统负荷削减量的电力数据输入软件开发程序,将所述软件开发程序提供的jar文件导入Java平台,在所述Java平台编写与输入软件开发程序的电力数据相对应的数据结构的过程之前,还可以包括:
安装设定显卡、硬件驱动程序以及设定运算平台的开发环境,建立分布式系统基础架构和计算引擎集群,搭建图形处理器集群,构建计算引擎-设定运算平台集群,将下载的MCR编译器安装到每个运行节点(如X86PC的每个节点)上。
上述设定显卡可以为NVIDIA显卡,设定运算平台可以为CUDA8.0;安装NVIDIA显卡和硬件驱动程序以及CUDA8.0的开发环境,使GPU能够解决复杂的计算问题,以替代CPU(中央处理器)完成并行电气计算任务,增大加速比。
上述分布式系统基础架构可以为Hadoop,计算引擎集群可以为Spark集群,图形处理器集群可以为GPU集群,计算引擎-设定运算平台集群可以为Spark-Cuda集群,MCR编译器可以为在Matlab官网下载linux版本的MCR,其可以配置环境变量LD_LIBRARY_PATH。
在一个实施例中,上述执行计算引擎的收集操作,将所述负荷削减分量返回到计算引擎的主程序,获取电力系统的负荷削减总量的过程之后,还可以包括:
构建文件传输协议服务(ftp服务)获取所述电力数据和负荷削减总量,通过分布式系统基础架构(hadoop)的应用程序编程接口(API)将所述电力数据存储至分布式文件系统中,通过计算引擎的应用程序编程接口将所述负荷削减总量存储至分布式文件系统(HDFS)中。
具体地,本实施例可以通过apache ftpserver构建ftp服务从生产调度系统中获取数据,然年使用hadoop的API将ftp收到的数据存储到HDFS中,并且计算结果通过Spark的API存储到HDFS中,以分布式文件系统HDFS实现对电气计算的输入数据(计算电力系统负荷削减量的电力数据)、输出数据(负荷削减量数据)的存储,保证所存储的数据的完整性。
在一个实施例中,若上述软件开发程序为Matlab软件,还可以在电力系统负荷削减量的检测端安装一组独立的共享库Matlab Runtime,其可以给编译后的Matlab文件执行提供一个环境,确保不安装Matlab软件,也能运行Matlab的程序,提供电气串行Matlab程序的可执行性。还可以在Matlab官网下载linux版本的MCR安装,同时配置环境变量LD_LIBRARY_PATH。
作为一个实施例,还可以对上述电力系统负荷削减量的检测端进行基于内存计算和DAG(新组件)的优化,将计算的输入数据变成RDD,结合Spark的分布式并行计算的特点,实施大规模并行实时的电气计算;进行Matlab Runtime和CDH Spark的整合,即在yarn-site.xml的NodeManager高级配置代码段(安全阀)配置Matlab的读写目录,以避免后续处理过程中出现权限不足的问题。
本实施例提供的电力系统负荷削减量的检测方法中,在电力系统负荷削减量的检测端融合集成HDFS、Matlab Runtime、Spark、Cuda的电力大数据平台系统,对输入的电力数据进行融合Spark和CUDA的实时高效电网负荷削减并行计算,能够很好的支持电力系统运行风险评估及其辅助决策,配合X86计算集群,完成负荷削减计算量大、迭代次数多、实时性要求高的任务。
参考图2所示,图2为一个实施例的电力系统负荷削减量的检测系统结构示意图,包括:
输入模块10,用于将计算电力系统负荷削减量的电力数据输入设定的软件开发程序,将所述软件开发程序提供的jar文件导入Java平台,在所述Java平台编写与输入软件开发程序的电力数据相对应的数据结构;
划分模块20,用于在预置的计算引擎上通过划分多个计算能力相同的工作区间,统计所述数据结构对应的任务数目,根据所述任务数目将所述数据结构平均分配至各个工作区间;
计算模块30,用于分别在各个工作区间执行并行处理操作,引入预设的Scala语言计算程序分别计算各个工作区间对应的负荷削减分量;
获取模块40,用于执行计算引擎的收集操作,将所述负荷削减分量返回到计算引擎的主程序,获取电力系统的负荷削减总量。
本发明提供的电力系统负荷削减量的检测系统与本发明提供的电力系统负荷削减量的检测方法一一对应,在所述电力系统负荷削减量的检测方法的实施例阐述的技术特征及其有益效果均适用于电力系统负荷削减量的检测系统的实施例中,特此声明。
基于如上所述的示例,一个实施例中还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上所述的电力系统负荷削减量的检测方法。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性的计算机可读取存储介质中,如本发明实施例中,该程序可存储于计算机系统的存储介质中,并被该计算机系统中的至少一个处理器执行,以实现包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
基于如上所述的示例,参考图3所示,本发明还提供一种计算机设备60,该计算机设备包括存储器61、处理器62及存储在存储器62上并可在处理器61上运行的计算机程序,所述处理器61执行所述程序时实现如上述各实施例中的任意一种电力系统负荷削减量的检测方法。
上述计算机设备60可以包括电脑等智能处理设备。本领域普通技术人员可以理解存储器61存储的计算机程序,与上述电力系统负荷削减量的检测方法实施例中的描述相对应,处理器62还可用于执行存储器61所存储的其他可执行指令。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。