背景图

债权打包资金选取策略

概述

我现在有个需求就是,在一些定额的债权订单中,进行打包,需要从这些不同额的债权中打出比如100w、1000w等各种金额不等的债权。其实一开始想这个问题的时候我也没啥思路,网上也没有看到比较好的解决思路,最后明白有这个时间,不如自己写代码来进行实现。

要求

债权的选取具有一定的规律性,越老的订单需要先打包。所以在一些特殊情况下,一些策略的实现也是要做必要的调整。

如果无法配平,我的策略就是打包超过,然后人工剔除,也可以人工选择加入一笔债权。这当然是弥补措施不是我们解决问题之道。

思路与实现

我实现的那一版的思路是一定有一个调整额,而之前也有考虑过配平,这就类似于之前写的关于散标匹配的算法。因为在我看来金额固定的情况下,可以选取一个调整额,然后每笔债权留单,最后利用留下来的单子进行配平即可。

最后我选取了一个阈值,然后按照这种思路实现了我们的打包策略,由于债权分布良好,所以我一直在想,如果金额不定的话,我们如何进行适配。

这个当然就是后面的思考了。我后来想到的思路是阈值通过金额的最小公倍数进行计算,然后到了调整的阈值时,进行配平。留单的策略就是最小公倍数除以金额,得到的就是要留该金额多少单。这种方式最大的问题就是如果金额非常散,那么可能一开始就没有单子被选中,一直处于留单状态,这对我们的系统没有好处,可以设置最大的阈值,但是这样就解决不了我们的问题。如果说留单成功了,那么下面就是类似求24点的问题了。

之前我们提到了散标匹配的算法,所以你应该明白这里也可以使用递归的方式进行债券的选取,但是可能不太适合老的优先原则。我觉得还是使用留单的技术,先用老的单子填补阈值开外的空间。等达到阈值的时候,再利用递归的方式,填补阈值进行配平。

递归的方式

如果需要进行配平,基本上就是在最后的时候进行简单配平,或者使用递归的思想进行实现,比如果100w的包,先按照规则将可能即将失效的先放进去90w或者多一些,然后统计剩余的债权量,通过递归回溯的方式去配平最后的10w左右的量。因为债权基本都是500-2000,以500递增的倍数,所以可以进行计数统计,配平的时候再去取债权。因为我们关注的是数字本身而不是债权。关心债权的原因是,要不最旧的先打进去。

这种递归我称为计数式的递归使用。

债权预热

基本上对方要债权包都是整数的,所以可以在债权进入的时候,按1w先打个小包,之后打包的时候,直接按时间选择一定的数量就可以了。

总结

具体实现代码就不写了,这涉及到公司的机密,还有就是代码太长,一大堆异常情况的判断不太适合在这里贴出来。总之思想就是这样的,结合具体的业务场景进行细节的拆分,你总能得到你想要的那个解决方案。这就是我们不得不处理的事情,发现并解决问题。

0%