计算多个子间隔的总持续时间(在较大间隔内)低于X

时间:2018-07-22 19:18:53

标签: algorithm datetime computer-science intervals

我正在构建一个专家系统,该系统将作为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

这里-当他们即将停止排位赛时,因为当前没有任何事件在进行,因此一旦这些事件向左滚动到足够远,就结束了,直到用户更改简历并重新启动引擎为止使用新的数据集。

我希望很清楚我想做什么。有没有可以帮助我的聪明算法?还是我只是蛮力解决方案?

UPD:

我正在开发的解决方案在于创建一个二维图形,其中每个点表示时间范围内的总持续时间曲线(y轴值)时的日期(x轴值)。改变方向。对于任何给定事件,都有4个这样的断点。该图将允许我在两个值之间进行线性插值,以找到持续时间线何时准确地超过阈值。我目前正在用Ruby编写代码。

0 个答案:

没有答案