本发明涉及一种信号优化方法,尤其是涉及一种联锁布尔逻辑的优化方法。
背景技术:
在轨道交通铁路信号设计过程中,布尔代数被应用于计算机联锁系统,用来表示联锁逻辑关系,基于专利申请号200910049341.7的现有已有辅助工具自动生成的布尔代数,有以下缺陷:
1.数据量大。对一个有40组道岔的中等车站的布尔代数有近1万条布尔表达式,一条表达式中包含的布尔变量有可能达到上百个,这对联锁下位机软件的处理速度有极大的影响。
2.有冗余变量。每一条布尔表达式中可能会出现多余的支路或者无效变量。
3.逻辑复杂。每一条布尔表达式中可能包含多个变量相加再连乘的复杂四则混合运算,变量个数多,增加联锁下位机的运算负荷。
技术实现要素:
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种联锁布尔逻辑的优化方法。
本发明的目的可以通过以下技术方案来实现:
一种联锁布尔逻辑的优化方法,包括:在生成布尔表达式后,对生成的结果通过优化联锁布尔逻辑算法进行优化,得到新的表达式进行输出。
优选地,该方法具体包括以下步骤:
步骤s1、读取所有布尔表达式,遍历每一条布尔表达式,记录值为常零的布尔变量到可优化布尔变量链表一,记录值为常1的布尔变量到可优化布尔变量链表二,进入步骤s2;
步骤s2、遍历每一条布尔表达式,若表达式中包含小括号,则进行拆除括号操作,得到只有加法和乘法运算的布尔表达式,进入步骤s3;
步骤s3、循环遍历每一条布尔表达式,将每一条布尔表达式以加号分割每一组布尔变量:若存在相同的项,则只保留一项,其余项删除,进入步骤s4;
步骤s4、若存在某一项加上某一项乘以另一项的情况,则删除某一项乘以另一项,仅保留某一项,进入步骤s5;
步骤s5、若存在某一项加上某一项取反的情况,则整个表达式的值置为1,且记录到链表二中,进入步骤s6;
步骤s6、若存在某一项乘以另一项加上某一项的取反乘以另一相同项的情况,则仅保留另一项,进入步骤s7;
步骤s7、将优化后的布尔表达式删除多余运算符之后保存,进入s3,若步骤s3、s4、s5、s6都没有进行优化操作,则进入步骤s8;
步骤s8、遍历每一条优化后的布尔表达式,若表达式中包含可优化布尔变量链表一中的布尔变量,且为该布尔变量与其它布尔变量相加的方式,则删除该布尔变量,进入步骤s9;
步骤s9、若表达式中包含可优化布尔变量链表一中的布尔变量,且为该布尔变量与其它布尔变量相乘的方式,则删除该布尔变量以及与它相乘的所有布尔变量,进入步骤s10;
步骤s10、若最后得到的布尔变量值为零,则添加该布尔变量到链表一中,即p=0,则记录p到可优化布尔变量链表一中,进入步骤s11;
步骤s11、将优化后的布尔表达式删除多余运算符之后保存,进入s8,若步骤s8、s9、s10都没有进行优化操作,则进入步骤s12;
步骤s12、循环遍历每一条优化后的布尔表达式,若表达式中包含可优化布尔变量链表二中的布尔变量,则删除该布尔变量,进入步骤s13;
步骤s13、若最后得到的布尔变量为1,则添加该布尔变量到可优化布尔变量链表二中,即p=1,则记录p到可优化布尔变量链表二中,进入步骤s14;
步骤s14、将优化后的布尔表达式删除多余运算符之后保存,进入s12,若步骤s12、s13都没有进行优化操作,则进入步骤s1;
步骤s15、遍历每一条优化后的布尔表达式,输出每一条表达式,算法结束。
优选地,所述的步骤s2中的操作具体为:p=(a+b)*(c+d)+e,则p=a*c+a*d+b*c+b*d+e。
优选地,所述的步骤s3中的操作具体为:p=a+a+b,则p=a+b。
优选地,所述的步骤s4中的操作具体为:p=a+a*b+c,则p=a+c。
优选地,所述的步骤s5中的操作具体为:p=a+~a,则p=1,并记录p到链表二中。
优选地,所述的步骤s6中的操作具体为:p=a*b+~a*b,则p=b。
优选地,所述的步骤s8中的操作具体为:a=0,p=a+b,则p=b。
优选地,所述的步骤s9中的操作具体为:a=0,p=a*b+c,则p=c。
优选地,所述的步骤s12中的操作具体为:a=1,p=a*b+c,则p=b+c。
与现有技术相比,本发明具有以下优点:
1、本发明通过一种优化联锁布尔逻辑算法,大大的简化了布尔逻辑表达式,减少了每一条表达式中的布尔变量。
2、本发明生成的布尔表达式中没有冗余变量,没有多余支路,不含无效的常零变量。
3、本发明生成的布尔表达式中没有小括号运算,加快了联锁下位机软件的运算速度。
附图说明
图1为本发明优化联锁布尔逻辑方法流程图;
图2为本发明获取可优化布尔变量链表流程图;
图3为本发明处理布尔表达式中常零变量流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
参考图1,举例说明优化联锁布尔逻辑算法的具体处理流程:
布尔表达式为:
a=0
b=1
p3=a*(p1+p2)+b+c+a*(p1+~p2)+b*d
步骤s1、读取所有布尔表达式,遍历每一条布尔表达式,将p1记录到可优化布尔变量链表一,p2记录到可优化布尔变量链表二,进入步骤s2。
步骤s2、遍历每一条布尔表达式,将p3进行拆括号操作,p3=a*p1+a*p2+b+c+a*p1+a*~p2+b*d,进入步骤s3。
步骤s3、存在相同项a*p1+a*p1,删除相同的项a*p1,p3=a*p1+a*p2+b+c+a*~p2+b*d,进入步骤s4。
步骤s4、存在b加上b*d的情况,则删除b*d,仅保留b,p3=a*p1+a*p2+b+c+a*~p2,进入步骤s5。
步骤s5、不存在某一项加上某一项取反的情况,进入步骤s6
步骤s6、存在a*p2加上a*~p2的情况,则仅保留a,p3=a*p1+a+b+c,进入步骤s7。
步骤s7、将优化后的布尔表达式删除多余运算符之后保存为p3=a*p1+a+b+c,进入步骤3.
步骤s3、不存在相同项,进入步骤4。
步骤s4、存在a加上a*p1的情况,则删除a*p1仅保留a,p3=a+b+c,进入步骤5。
步骤s5、不存在某一项加上某一项取反的情况,进入步骤s6
步骤s6、不存在存在某一项乘以另一项加上某一项的取反乘以另一相同项的情况,进入步骤s7。
步骤s7、将优化后的布尔表达式删除多余运算符之后保存,进入s3。
步骤s3、不存在相同项,进入步骤4。
步骤s4、不存在某一项加上某一项乘以另一项的情况,进入步骤5。
步骤s5、不存在某一项加上某一项取反的情况,进入步骤s6
步骤s6、不存在存在某一项乘以另一项加上某一项的取反乘以另一相同项的情况,进入步骤s7。
步骤s7、步骤s3、s4、s5、s6都没有进行优化操作,则进入步骤s8。
步骤s8、遍历每一条优化后的布尔表达式,表达式p3=a+b+c中包含可优化布尔变量链表一中的布尔变量a,且为该布尔变量与其它布尔变量相加的方式,则删除该布尔变量a,则p3=b+c,进入步骤s9。
步骤s9、表达式中不包含可优化布尔变量链表一中的布尔变量,进入步骤s10。
步骤s10、最后得到的布尔变量值不为零,进入步骤s11。
步骤s11、将优化后的布尔表达式删除多余运算符之后保存,进入s8,
步骤s8、遍历每一条优化后的布尔表达式,表达式p3=b+c不包含可优化布尔变量链表一中的布尔变量,进入步骤s9。
步骤s9、表达式中不包含可优化布尔变量链表一中的布尔变量,进入步骤s10。
步骤s10、最后得到的布尔变量值不为零,进入步骤s11。
步骤s11、步骤s8、s9、s10都没有进行优化操作,则进入步骤s12。
步骤s12、循环遍历每一条优化后的布尔表达式,表达式p3=b+c中包含可优化布尔变量链表二中的布尔变量b,则删除该布尔变量,p=c,进入步骤s13。
步骤s13、最后得到的布尔变量不为1,进入步骤s14。
步骤s14、将优化后的布尔表达式删除多余运算符之后保存,进入s12。
步骤s12、循环遍历每一条优化后的布尔表达式,表达式p3=c中不包含可优化布尔变量链表二中的布尔变量,进入步骤s13。
步骤s13、最后得到的布尔变量不为1,进入步骤s14。
步骤s14、若步骤s12、s13都没有进行优化操作,则进入步骤s15。
步骤s15、遍历每一条优化后的布尔表达式,输出每一条表达式,算法结束。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。