具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
当前在诸如支付应用、广告推荐等业务系统中,经常需要基于诸多信息进行决策判断。例如,用户支付时余额不够,需要转到其它相关账户进行支付,或者,向用户进行广告推送时,需要基于用户性别、爱好以及历史消费等等进行决策,推送哪些广告比较合适。决策的条件一般由运营、产品经理、技术人员对其指定,指定的方式是通过逻辑表达式来描述具体的业务规则,表达式定义好之后,交给决策系统运行。决策系统需要解析并执行这类表达式。
例如,运营方事先已经确定了广告的目标人群是年龄25至30、月消费1000或者月入10000的女性,则可以将业务规则通过如下逻辑表达式来表达该业务规则:(Age>25)&(Age<30)&(gender=0)&(Month_consum>1000||Salary>10000),从而根据用户信息,计算该表达式的取值,取值的结果只有真(Ture,以下简写为T)或者假(False,以下简写为F),用于判断用户是否是当前待推送广告的目标人群,以决定是否进行广告推送。
在这个过程中,有些用户信息可以在本地进行逻辑判断即可,例如,用户是男还是女,这种因子的计算就很简单,计算时开销很低。但是有些因子计算时需要调用到外部服务(例如确定用户的消费或者收入信息时),这就导致计算耗时将会增加。换言之,进行业务决策时,对逻辑表达式的整体进行计算,导致计算开销变大,降低了效率,有时也导致用户体验变差,特别在一些大流量的业务中(例如,亿级流量的在线支付),该现象更为突出。
基于此,本说明书实施例提供一种业务决策方案,通过将逻辑表达式中的计算因子进行排序,优先计算开销较低的计算因子,每次计算后,尝试用当前得到的部分结果去求解表达式的取值,从而避免了对逻辑表达式的整体求解,降低了计算开销,提高效率。
如图1所示,图1为本说明书实施例所提供的业务决策过程的流程示意图,该过程具体包括以下步骤:
S101,获取业务规则所对应的逻辑表达式,其中,所述逻辑表达式包括多个计算因子和逻辑因子。
如前所述,业务规则由业务运营方根据实际需要事先确定,技术人员根据业务规则确定其对应的逻辑表达式。逻辑表达式中包含逻辑因子和计算因子,逻辑因子指逻辑表达式中的包含、不包含、大于、小于、非、和、或等这类操作。计算因子通常而言,需根据实际情形进行自定义,其中包含有逻辑因子和相关变量以及相关参数。例如,“账户余额>待付款金额”即为一个自定义的计算因子。
S103,确定所述多个计算因子的计算顺序。
一个逻辑表达式中包含有多个计算因子,对于不同的计算因子,可以根据实际情形确定不同的计算顺序。例如,对于一个逻辑表达式“A||B”,若业务人员事先已经知道计算因子A的处理耗时为1ms以内,计算因子B的处理耗时1-10ms,则可以直接人为定义A的计算顺序在B之前,这样一来,如果A的取值为真,则不用再计算B的取值,可以直接确定逻辑表达式的取值为真。,此外,还可以根据计算因子所调用的业务资源(例如,是需要访问内部资源还是外部资源)。来确定不同的优先级,通常而言,访问内部资源的计算因子其计算顺序应当在前列。
此外,此处的计算顺序可以是所有的计算因子都有不同的计算顺序,也可以是部分计算因子具有相同的计算顺序。例如,对于一个包含A、B、C、D四个计算因子的逻辑表达式而言,计算顺序可以是A、B、C、D先后进行,也可以是A、(B和C)、D的顺序进行,即B和C具有相同的计算顺序。
S105,基于所述计算顺序,获取计算因子对应的业务信息,逐一计算所述计算因子,每次计算后,根据当前计算结果和所述逻辑因子判断是否能确定所述逻辑表达式的取值,若不能确定,则根据所述计算顺序计算下一计算因子,直至确定所述逻辑表达式的取值为止。
具体而言,由于在计算每个计算因子的取值时,可能需要对外进行资源调用。因此,获取用户信息也是基于计算因子的顺序进行获取的,即需要计算哪个计算因子的值时才发起相应的资源调用。在计算时,当前计算结果包括以前已经计算过的计算因子的取值。
例如,在广告推荐中,一个逻辑表达式为(gender=0)||(Month_consum>1000),已经确定计算顺序为(gender=0)优先计算,此时,则可以直接从本地资料库中调取用户信息,若得到用户为女性,则计算因子(gender=0)的取值为T,进而由于逻辑因子是“||”(即“或”),从而可知逻辑表达式的取值为T,可以直接向该用户进行广告推送,避免了再向外部调用该用户的每月消费信息。
又例如,在支付时,首先从用户的“支付应用余额”中进行扣取,如果“支付应用余额”不足,转至关联应用“X额宝”进行处理,此时,对于是否使用关联应用“X额宝”进行支付,可以基于如下方式进行判断:(X额宝=1)&(余额>消费金额)。计算因子(X额宝=1)用于表征用户已经开通了关联应用“X额宝”,该项判断在本地即可进行,若用户没有开通,则传入“X额宝”取值为0,进而可以根据(X额宝=1)的取值为F和逻辑因子“&”,判断不采用X额宝进行支付,继续转向下一个付账方式,免去向关联应用X额宝所在的服务器调用X额宝的账户余额信息这一步骤。
S107,根据所述逻辑表达式的取值进行业务决策。
如前所述,逻辑表达式的取值只有T或F,与业务决策中的是和否一一对应。
在实际应用中,采用上述方案进行决策的系统可以是支付系统,在这种系统下,业务规则即为支付规则,即根据用户的设置和账户余额以及关联情形,决定采用哪个账号进行付款;此时,业务信息包括用户身份信息(包括用户的ID、身份证号、手机号码等等)、用户支付应用账号信息(至少包括账户余额)和用户关联应用信息(包括相关信贷账户、银行账户、账户余额、信用额度等等),此处的关联应用一般而言和所述的支付应用具有业务上的合作、重合或者附属关系;最终根据对逻辑表达式的取值结果决策,采用哪个账户付款以及采用余额付款或者信用付款等等。
在广告推荐决策系统中,业务规则包括广告推荐规则,即如何确定目标人群;此时业务信息包括用户身份信息(可由应用本地资料库获取)、用户偏好信息(可由用户进行设定、或者基于数据统计得到)和用户历史消费信息(可向其它应用调取得到)中的一种或者多种,
在上述支付和广告推荐的过程中,一般用户身份信息即可由本地获取得到,并进行取值判断即可(例如判断用户是男还是女),计算速度快,开销较小;而诸如用户关联应用信息或者用户历史消费信息通常需要向其它应用进行远程调用才可得到,计算开销较大。在实际应用中,计算速度快以及开销小的计算因子一般即处于计算前列。
本申请所提供的业务决策方法,通过对业务规则所对应的逻辑表达式进行分解,得到多个计算因子和逻辑因子,根据实际情形对计算因子进行排序。从而可以对计算因子进行顺序分批计算,并且根据计算得到的部分结果和逻辑因子,尝试求解整体表达式的结果,并且根据求解的结果进行业务决策,减少了计算开销。此外,还可以对表达式中的计算因子进行合并,对计算因子的开销估计更为准确;以及对计算因子进行权重赋值,进一步提高计算效率。
作为一种具体的实施方式,对于步骤S101中的,获取业务规则所对应的逻辑表达式,包括:合并所述逻辑表达式中的计算因子和指定的逻辑因子,其中,所述指定的逻辑因子包括不是“或”或者“和”的逻辑因子;生成只包括逻辑因子为“或”或者“和”的逻辑表达式。
具体而言,一个逻辑表达式中包含的逻辑因子可以是诸如:包含、不包含、大于、小于、非、和、或等等。例如“(x>0)&(x<5)&(city=010||city=021)”;即可将其中的(x>0)、(x<5)、(city=010)和(city=021)分别记为计算因子A、B、C和D,从而得到表达式“A&B&(C||D)”。又例如,对于表达式(a=0&b!=0)||(c=0&d!=0)而言,由于其中包含“!”运算(“非”运算),即可将“a=0”和“b!=0”进行合并,合并生成计算因子E=(a=0&b!=0),以及对应的另一个计算因子F=(c=0&d!=0,即合并后的表达式为“E||F”。
在这种方式下,由于简化后的逻辑表达式只包含逻辑因子“和”以及“或”,而这两种逻辑因子都可以用于根据部分结果判定整体结果,例如,在“C||D”中,只要C取值为T,则“C||D”的取值为T,而在“A&B&(C||D)”中,若A取值为F,则整体取值为F。
换言之,将逻辑表达式进行变换后,各计算因子的取值对于整体取值的影响将更明确。例如,对于合并后的计算因子E和F而言,若调用“a”、“b”、“c”、“d”的资源时分别需要耗时的量级分别为1ms、100ms、10ms、10ms,容易理解,在合并前对于“a=0”将优先计算(但是由于b的耗时为100ms,E的计算耗时仍然较大),而在合并后整体考虑时,计算因子F=(c=0&d!=0)将优先计算,对于a和b的调用将被后置。即在确定排序时,即可以把整体耗时更小的计算因子排在更前,排对于计算因子的排序将更为准确。
作为一种具体的实施方式,对于步骤S103中的,确定所述多个计算因子的计算顺序,包括:基于用户的预先指定,确定所述多个计算因子的计算顺序;或者,基于各计算因子所需调用的业务资源的类型,确定所述多个计算因子的计算顺序。
换言之,对于计算因子的计算顺序一般而言可以人为的预先指定,又或者,依据耗时或者业务成本等因素,在计算时进行确定。例如,基于耗时因素,决策系统的内部简单逻辑计算最快(例如,判断一个传入值是否和1相等),其后依次是访问缓存、访问数据库、访问内部服务、访问外部服务等,在这种情形下,可以基于计算各因子所需调用的业务资源的类型,来确定各计算因子的计算顺序。
在实际应用中,对于步骤S103中的确定所述多个计算因子的计算顺序,可以采用如下方式:赋予每个计算因子计算权重,根据所述计算权重的大小确定计算顺序。从而对于步骤S105中的逐一计算所述计算因子,可以包括:按计算权重的大小逐一计算各计算权重所对应的计算因子,若当前计算权重对应不止一个计算因子时,进行批量计算。
计算权重一般而言即为一个数字,按照计算权重从大往小对计算因子进行计算即可。同一个计算权重有可能同时对应于多个计算因子(即这多个计算因子的计算耗时可能差不多),此时,可对这多个相同权重的计算因子进行批量或者并行计算,均得到结果后再试行确定逻辑表达式的值。
在实际应用中,对于逻辑表达式还可以采用表达树的形式,假设一个逻辑表达式为“(A||B||C)&D&E&H”,在对应的表达树中,可以根据实际情形对表达树进行分层,每个计算因子对应于一个计算节点,如图2所示,图2为本说明书实施例所提供的逻辑表达树的示例性的结构示意图。进而,可以给每个叶子节点进行计算权重赋值,计算权重用于确定计算顺序。表现为,在同一层叶子节点中,按照所述计算权重的大小从左至右排序。假设C的计算权重为W1,B、D、E为W2,A和H为W3,其中,W1>W2>W3。如图3所示,图3为本说明书实施例所提供的对叶子节点排序后的表达树的结构示意图。
从而对计算因子的逐一计算,即转化为对叶子节点的取值计算。换言之,在已经根据计算权重对叶子节点进行了排序之后,即可以根据叶子节点的顺序,在每一层中从左至右进行计算。
如图4a所示,图4a为对表达树按计算权重进行顺序计算的示意图。在根据该示意图进行计算取值时,则首先计算W1所对应的叶子节点C,若其取值为F,此时,还不能得到整体取值,从而需要计算下一个计算权重W2所对应的叶子节点。即计算B、D和E的取值,若B和D的取值为T,E的取值为F,则由于逻辑因子“||”,可知“(A||B||C)”的取值为T,不必再计算W3所对应的A的取值。并且,由于E的取值为F,可基于其它的逻辑因子均为“&”,确定整体的取值为“F”,不必再计算权重为W3的H的取值。如图4b所示,图4b为本说明书实施例所提供的顺序计算的另一示意图。在实际应用中,由于排在后边的计算因子都是需要较大开销,通过上述方式,实现降低了计算开销,提高了计算效率。
基于同样的思路,本说明书实施例还提供一种业务决策装置,如图5所示,图5为本说明书实施例所提供的装置的结构示意图,包括:
获取模块501,获取业务规则所对应的逻辑表达式,其中,所述逻辑表达式包括多个计算因子和逻辑因子;
确定模块503,确定所述多个计算因子的计算顺序;
计算模块505,基于所述计算顺序,获取计算因子对应的业务信息,逐一计算所述计算因子,每次计算后,根据当前计算结果和所述逻辑因子判断是否能确定所述逻辑表达式的取值,若不能确定,则根据所述计算顺序计算下一计算因子,直至确定所述逻辑表达式的取值为止;
决策模块507,根据所述逻辑表达式的取值进行业务决策。
进一步地,所述业务规则包括支付规则,所述业务信息包括用户信息、用户支付应用账号信息和用户关联应用信息中的一种或者多种,所述业务决策包括确定支付方式;或者,所述业务规则包括广告推荐规则,所述业务信息包括用户身份信息、用户偏好信息和用户历史消费信息中的一种或者多种,所述业务决策包括确定是否向用户推送指定广告。
进一步地,所述获取模块501,合并所述逻辑表达式中的计算因子和指定的逻辑因子,其中,所述指定的逻辑因子包括不是“或”或者“和”的逻辑因子;生成只包括逻辑因子为“或”或者“和”的逻辑表达式。
进一步地,所述确定模块503,基于用户的预先指定,确定所述多个计算因子的计算顺序;或者,基于各计算因子所需调用的业务资源的类型,确定所述多个计算因子的计算顺序。
进一步地,所述确定模块503,赋予每个计算因子计算权重,根据所述计算权重的大小确定计算顺序;所述计算模块,按计算权重的大小逐一计算各计算权重所对应的计算因子,若当前计算权重对应不止一个计算因子时,进行批量计算。
进一步地,所述装置还包括生成模块509,用于生成所述逻辑表达式所对应的表达树,其中,所述计算因子对应于所述表达树中的叶子节点;所述确定模块,确定每个叶子节点的计算权重,在同一层叶子节点中,按照所述计算权重的大小从左至右排序,其中,所述计算权重用于确定计算顺序;所述计算模块,基于所述计算权重的大小,从左至右依次计算所述叶子节点。
对应的,本申请实施例还提供一种业务决策设备,所述设备包括:
存储器,存储有业务决策程序;
处理器,调用所述存储器中的业务决策程序,并执行:
获取业务规则所对应的逻辑表达式,其中,所述逻辑表达式包括多个计算因子和逻辑因子;
确定所述多个计算因子的计算顺序;
基于所述计算顺序,获取计算因子对应的业务信息,逐一计算所述计算因子,每次计算后,根据当前计算结果和所述逻辑因子判断是否能确定所述逻辑表达式的取值,若不能确定,则根据所述计算顺序计算下一计算因子,直至确定所述逻辑表达式的取值为止;
根据所述逻辑表达式的取值进行业务决策。
基于同样的发明思路,本申请实施例还提供了对应的一种非易失性计算机存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为:
获取业务规则所对应的逻辑表达式,其中,所述逻辑表达式包括多个计算因子和逻辑因子;
确定所述多个计算因子的计算顺序;
基于所述计算顺序,获取计算因子对应的业务信息,逐一计算所述计算因子,每次计算后,根据当前计算结果和所述逻辑因子判断是否能确定所述逻辑表达式的取值,若不能确定,则根据所述计算顺序计算下一计算因子,直至确定所述逻辑表达式的取值为止;
根据所述逻辑表达式的取值进行业务决策。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、设备和介质类实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可,这里就不再一一赘述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤或模块可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书的实施例时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信编号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书中一个或多个的实施例可提供为方法、系统或计算机程序产品。因此,本说明书的实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的形式。而且,本说明书的实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书的实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定事务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书的实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行事务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。