我正在构建一个专家系统,该系统将作为Web服务运行(即连续运行)。
其中的某些规则经过程序编码并处理时间间隔-规则处理器映射一组用户的事件,并计算在特定时间范围内的总持续时间,该时间范围是相对字词(例如 N年前)。然后将该结果与所需阈值进行比较,以确定规则是否通过。
例如,该规则计算您从3年前到1年前的工作时间,如果超过9个月,则通过。
我计算持续时间没有问题。困难的部分是,我不仅需要向用户显示是否通过了特定规则,还需要向用户显示“ true”变为“ false”的确切日期。理想情况下,我希望再显示一个步骤-即,当“ false”再次切换回“ true”时(当然,如果有数据的话)。因此,当他们去年的总工作时间降至6个月以下时,规则将重新执行,结果发生变化,他们会收到一封电子邮件,“嘿,您的结果刚刚更改,您不再符合条件,但是5个月后,将再次获得资格。”
| | |
_____|||1|||_______|||2|||__________|||3|||________|||4|||...
| | |
3 y. ago ---------------------- 1 y. ago Now
min 9 months work experience is required
在上面的示例中,用户具有资格,但是没有资格,我们需要提前告诉他们:“预计这会在44天之内发生”(系统还会安排该日期的后台工作)以及何时进行逆转为真。
| | |
____________________|1|__________________||||||||2||||||||...
| | |
3 y. ago ---------------------- 1 y. ago Now
min 9 months work experience is required
在此用户不符合条件的情况下,我们需要告诉他们何时开始符合条件。
| |
_____|||1|||___________|||||||2|||||||_________|||3|||____...
| |
1 y. ago ------------------------------------------ Now
at least 6 months of work experience is required
这里-当他们即将停止排位赛时,因为当前没有任何事件在进行,因此一旦这些事件向左滚动到足够远,就结束了,直到用户更改简历并重新启动引擎为止使用新的数据集。
我希望很清楚我想做什么。有没有可以帮助我的聪明算法?还是我只是蛮力解决方案?
我正在开发的解决方案在于创建一个二维图形,其中每个点表示时间范围内的总持续时间曲线(y轴值)时的日期(x轴值)。改变方向。对于任何给定事件,都有4个这样的断点。该图将允许我在两个值之间进行线性插值,以找到持续时间线何时准确地超过阈值。我目前正在用Ruby编写代码。