取款装置中多个存放不同面额钞票钞箱的等张配钞方法与流程

文档序号:28275447发布日期:2021-12-31 20:39阅读:274来源:国知局
取款装置中多个存放不同面额钞票钞箱的等张配钞方法与流程

1.本发明涉及一种取款装置中多个存放不同面额钞票钞箱的等张配钞方法。


背景技术:

2.目前金融自助产品

存取机(包括crs、ucr、atm)和金融柜员机

出纳机广泛地应用于银行的自助领域和柜台现金管理。它们都要提供取款功能,取款需要从钞箱里进行配钞,当前的主流算法有:
3.1、指定钞箱出钞张算算法;
4.2、最小出钞张数算法;
5.3、最大出钞张数算法;
6.4、等张出钞算法,即各个可用于配钞的钞箱出来的钞票张数近似相等;
7.5、等空出钞算法,即各个可用于配钞的钞箱出钞后,钞箱内剩余张数近似相同;
8.实现上面算法,流行解决办法是穷举法,这种办法解决效率比较低,特别是等张出钞算法以及等空出钞算法,用穷举法来实现的话,计算量大,耗时长,导致用户等待时间过久,体验感差。


技术实现要素:

9.为了解决目前等张出钞算法计算量大,导致耗时长,用户等待时间长的技术问题,本发明提供一种运算速度相对穷举法更快的取款装置中多个存放不同面额钞票钞箱的等张配钞方法。
10.为了实现上述技术目的,本发明的技术方案是,
11.一种取款装置中多个存放不同面额钞票钞箱的等张配钞方法,包括以下步骤:
12.步骤1,获取能够用于配钞的钞箱信息并进行记录,其中单个钞箱中只存放一种面额的钞票;
13.步骤2,根据各个钞箱内钞票张数,按由少到多的顺序对钞箱进行排序;
14.步骤3,根据步骤2的排序结果,计算各个存放不同面额钞票的钞箱出钞后实现等张效果的初始最优配钞张数;
15.步骤4,再根据步骤1中获得的钞箱信息,按照面额从大到小,相同面额按张数从少到多对钞箱进行排序;
16.步骤5,根据步骤4的排序结果,计算每一个钞箱针对当前配钞金额进行配钞的最小上限值和最大下限值;
17.步骤6,根据步骤5的结果,迭代求解各个面额钞票的配钞张数。
18.所述的方法,所述的步骤1中,钞箱信息包括钞箱的个数、各钞箱中所存放的钞票面额和钞箱中钞票的张数,其中相同面额的钞票存放在一个或者多个钞箱中。
19.所述的方法,所述的步骤3中,初始最佳配钞等张张数d的计算流程为:
20.s10:计算所有钞箱中的钞票总面额:suma=sum(a(1),
……
a(n)),n为钞箱的总个
数;
21.s11:如果s(1)*suma不小于m,m为当前配钞金额;则执行s12,否则执行s13;
22.s12:如果m不能被suma整除,则d的值为m除以suma的商取整后加1;否则d的值为m除以suma的商;结束d的计算;
23.s13:初始化index=1,当前配钞金额m变为原m值减去s(1)*suma,suma的值变为原suma

a(1);
24.s14:若index+1>n;则结束d的计算且配钞失败;否则执行s15;
25.s15:如果(s(index+1)

s(index))*suma≥m;则执行s16,否则执行s17;
26.s16:如果m不能被suma整除,则d的值为s(index)加上m除以suma的商取整后加1;否则d的值为s(index)加上m除以suma的商;结束d的计算;
27.s17:m的值变为原m值

(s(index+1)

s(index))*suma,suma的值变为原suma

a(index+1);
28.s18:index的值加1,跳转执行s14。
29.所述的方法,所述的步骤5中,每一个钞箱针对当前配钞金额进行配钞的最小上限值的计算包括以下步骤:
30.设钱箱经过按面额从大到小,相同面额按张数从少到多进行排序后,面额值为a(1)、a(2)
……
a(n),可用于配钞张数分别为s(1)、s(2)
……
s(n);
31.若所有存放相同面额钞票的钞箱分别为a(i)、a(i+1)、
……
、a(i+k),则s(i)≤s(i+1)≤
……
≤s(i+k),则计算最小上限值为:
32.gbs=gcd(a(1),a(2)
……
a(n))/a(i)

1,其中gcd(a(1),a(2)
……
a(n))为a(1)、a(2)
……
a(n)的最小公倍数;
33.hcnt表示在a(i)、a(i+1)、
……
、a(i+k)钞箱中,满足钞箱中现有可配钞票张数s(j)大于d的钞箱个数;
34.则求解是否能够有一个该面额的最小上限值sxt能够满足下列关系:
35.①
sxt≥d
36.②
wcnt=(sxt

d)*(满足s(j)>sxt)的钞箱个数;其中wcnt为钞票面额为a(i)的钞箱中,钞票张数超过最小上限值的补位张数;
37.③
qcnt=(s(j)

sxt)的总和,且满足s(j)>d,s(j)≤sxt;其中qcnt为钞箱面额为a(i)值,且钞票张数小于最小上限值的补位张数;j取值范围为(i,i+k);
38.④
gbs

hcnt≤wcnt+qcnt;
39.若上述关系不是全部满足,则s(i),s(i+1)
……
s(i+k)分别是对应钞箱配钞最小上限值;
40.若上述关系全部满足,则当s(j)>sxt时,sxt是对应钞箱配钞最小上限值,其中j取值范围为(i,i+k);否则最小上限值为s(j)。
41.所述的方法,在h+g=m时,所述的hcnt=0,其中h为所有钞箱初始张数大于d的配钞金额总数,g为所有钞箱初始张数小于或等于d的配钞金额总数。
42.所述的方法,所述的步骤5中,每一个钞箱针对当前配钞金额进行配钞的最大下限值的计算包括以下步骤:
43.设钱箱经过按面额从大到小,相同面额按张数从小到大进行排序后,面额值为a
(1)、a(2)
……
a(n),可用于配钞张数分别为s(1)、s(2)
……
s(n);
44.若所有存放相同面额钞票的钞箱分别为a(i)、a(i+1)、
……
、a(i+k),则计算最大下限值为:
45.gbs=gcd(a(1),a(2)
……
a(n))/a(i)

1;其中gcd(a(1),a(2)
……
a(n))为a(1)、a(2)
……
a(n)的最小公倍数;
46.hcnt=a(i)、a(i+1)
……
a(i+k)钞箱满足可配张数s(j)>d的个数;
47.则求解是否能够有一个该面额的最大下限值xxt满足下列关系:
48.1)xxt≤d

1;
49.2)xcnt=(d

xxt)*(满足s(j)>d)的钞箱个数;其中xcnt为钞箱面额为a(i)值,钞票张数超过d的借位张数;
50.3)scnt=(s(j)

xxt)的总和,且满足s(j)>xxt,s(j)≤d;其中scnt为钞箱面额为a(i)值,钞票张数小于d的借位张数;jj取值范围为(i,i+k);
51.4)gbs

hcnt≤xcnt+scnt;
52.若上述关系不是全部满足,则对应钞箱配钞最大下限值均为0;
53.若上述关系全部满足,则s(j)

xxt>0时,xxt是对应钞箱配钞最大下限值,其中j取值范围为(i,i+k);否则最大下限值为0。
54.所述的方法,在h+g=m时,所述的hcnt=0,其中h为所有钞箱初始张数大于d的配钞金额总数,g为所有钞箱初始张数小于或等于d的配钞金额总数。
55.所述的方法,所述的步骤6包括以下步骤:
56.s20:钞箱号i初始化为1;
57.s21:若钞箱号i>钞箱总数n;则结束计算;否则执行s22;
58.s22:初始化i号钞箱配钞数q=i号钞箱配钞的最小上限值;
59.s23:若i为第n号钞箱,且配钞金额大于第n号钞箱上限配超金额,或配钞金额不能被第n号钞箱内的钞票面额整除,则结束计算并返回配钞失败结果;否则执行s24;
60.s24:若i号钞箱配钞数q<i号钞箱配钞的最大下限值,则结束计算并返回配钞失败结果;否则执行s25;
61.s25:配钞金额=a(i)*配钞张数,若配钞金额>剩余配钞金额,则配钞张数减1,执行s23;否则执行s26;
62.s26:计算当前剩余配钞金额=原剩余配钞金额

配钞金额;
63.s27:累计配钞张数=sum(a(1)、a(2)、
……
、a(i)已配钞张数),若累计配钞张数>取款装置最大可出张数,则结束计算并返回配钞数量太大错误;否则执行s28;
64.s28:若配钞余额=0,则结束计算并返回计算结果且配钞成功;否则执行s29;
65.s29:钞箱号i累加1;
66.s30:递增迭代调用s21;若返回成功,则返回计算结果且配钞成功;否则执行s31;
67.s31:配钞数减1,下一步执行s24。
68.本发明的技术效果在于,本发明能够极大地缩减穷举法的计算范围,减少迭代次数,提高了算法的解决速度,计算出来的解方差少,适用于windows、linux等跨平台系统,也适用于pk、信创等体系,适于大规模推广。
附图说明
69.图1为计算初始保留张数时钞箱及钞箱内钞票张数的示意图;
70.图2为计算最大上限值时钞箱及钞箱内钞票张数的示意图;
71.图3为计算最小下限值时钞箱及钞箱内钞票张数的示意图;
72.图4为计算配钞上限时,计算每一个钞箱的补差数的流程示意图;
73.图5为迭代求解的流程示意图。
具体实施方式
74.本实施例提供了一种取款装置中多个存放不同面额钞票钞箱的等张配钞方法,包括以下步骤:
75.步骤1,获取能够用于配钞的钞箱信息并进行记录,其中单个钞箱中只存放一种面额的钞票。钞箱信息包括钞箱的个数、各钞箱中所存放的钞票面额和钞箱中钞票的张数。相同面额的钞票存放在一个或者多个钞箱中,即可能存在多个钞箱中都存放同一种面额的钞票。
76.步骤2,根据各个钞箱内钞票张数,按由少到多的顺序对钞箱进行排序。
77.步骤3,根据步骤2的排序结果,计算各个存放不同面额钞票的钞箱出钞后实现等张效果的初始最优配钞张数d。计算流程包括以下步骤:
78.s10:计算所有钞箱中的钞票总面额:suma=sum(a(1),
……
a(n)),n为钞箱的总个数。
79.s11:以m为当前配钞金额。如果s(1)*suma不小于m,则执行s12,否则执行s13。
80.s12:如果m不能被suma整除,那么将m除以suma,得到的商取整后再加1,即d=m/suma+1,结果即为d值。如果m可以被suma整除,那么d的值就是m除以suma的商即d=m/suma。即完成了d的计算。
81.s13:初始化index=1,当前配钞金额m变为原m值再减去s(1)*suma,suma的值变为原suma

a(1)。
82.s14:若index+1>n。则结束d的计算且配钞失败,即无法得出等张配钞的结果。否则执行s15。
83.s15:如果(s(index+1)

s(index))*suma≥m。则执行s16,否则执行s17。
84.s16:如果m不能被suma整除,则d的值为s(index)再加上m除以suma的商取整后加1,即d=s(index)+m/suma+1。否则d的值为s(index)加上m除以suma的商,即d=s(index)+m/suma。结束d的计算。
85.s17:m的值变为原m值

(s(index+1)

s(index))*suma,即:
86.m=m

(s(index+1)

s(index))*suma,
87.suma的值变为原suma

a(index+1),即suma=suma

a(index+1)。
88.s18:index的值加1,跳转执行s14。
89.具体来说,上述步骤3的计算过程,是遵循以下数学模型实现的:
90.设按钞箱内的钞票张数排序后,面额值为a(1)、a(2)
……
a(n),其中n为钞箱数量,各面额值对应的可用于配钞的钞票张数分别为s(1)、s(2)
……
s(n),且满足s(1)≤s(2)≤
……
≤s(n),则通过求解是否能够有一个初始最优配钞张数d满足以下条件,来得到d的
值:
91.(1)h=d*a(k)+d*a(k+1)+
……
+d*a(n),且s(k)>d,s(k

1)≤d。其中h为所有钞箱初始张数大于d的配钞金额总数。
92.(2)g=s(1)*a(1)+
……
+s(k)*a(k

1),且s(k

1)≤d。其中g为所有钞箱初始张数小于或等于d的配钞金额总数。
93.(3)h+g≥m。
94.(4)然后令d=d

1,再判断满足(1)、(2)条件计算出来的h、g,是否符合h+g<m。
95.若不满足上述条件,则配钞失败。
96.若满足,则以这个d为初始最优配钞张数。
97.步骤4,再根据步骤1中获得的钞箱信息,按照面额从大到小,相同面额按张数从少到多对钞箱进行排序。
98.步骤5,根据步骤4的排序结果,计算每一个钞箱针对当前配钞金额进行配钞的最小上限值和最大下限值。
99.其中每一个钞箱针对当前配钞金额进行配钞的最小上限值的计算包括以下步骤:
100.设钱箱经过按面额从大到小,相同面额按张数从少到多进行排序后,面额值为a(1)、a(2)
……
a(n),可用于配钞张数分别为s(1)、s(2)
……
s(n)。
101.若所有存放相同面额钞票的钞箱分别为a(i)、a(i+1)、
……
、a(i+k),则s(i)≤s(i+1)≤
……
≤s(i+k),则计算最小上限值为:
102.gbs=gcd(a(1),a(2)
……
a(n))/a(i)

1,其中gcd(a(1),a(2)
……
a(n))为a(1)、a(2)
……
a(n)的最小公倍数。
103.hcnt表示在a(i)、a(i+1)、
……
、a(i+k)钞箱中,满足钞箱中现有可配钞票张数s(j)大于d的钞箱个数。另外,在h+g=m时,所述的hcnt=0,其中h为所有钞箱初始张数大于d的配钞金额总数,g为所有钞箱初始张数小于或等于d的配钞金额总数。
104.则求解是否能够有一个该面额的最小上限值sxt能够满足下列关系:
105.①
sxt≥d
106.②
wcnt=(sxt

d)*(满足s(j)>sxt)的钞箱个数。其中wcnt为钞票面额为a(i)的钞箱中,钞票张数超过最小上限值的补位张数。补位张数即从一种面额的钞箱中向与其面额最接近的大额面额钞票进行配钞金额补足的钞票张数。比如不同钞箱中两种最接近面额的钞票为20元面额和100元面额,假设现在配钞金额是80元,则20元面额补位张数为4张。
107.③
qcnt=(s(j)

sxt)的总和,且满足s(j)>d,s(j)≤sxt。其中qcnt为钞箱面额为a(i)值,且钞票张数小于最小上限值的补位张数。j取值范围为(i,i+k)。
108.④
gbs

hcnt≤wcnt+qcnt。
109.若上述关系不是全部满足,则s(i),s(i+1)
……
s(i+k)分别是对应钞箱配钞最小上限值。
110.若上述关系全部满足,则当s(j)>sxt时,sxt是对应钞箱配钞最小上限值,其中j取值范围为(i,i+k)。否则最小上限值为s(j)。
111.进一步的,每一个钞箱针对当前配钞金额进行配钞的最大下限值的计算包括以下步骤:
112.设钱箱经过按面额从大到小,相同面额按张数从小到大进行排序后,面额值为a
(1)、a(2)
……
a(n),可用于配钞张数分别为s(1)、s(2)
……
s(n)。
113.若所有存放相同面额钞票的钞箱分别为a(i)、a(i+1)、
……
、a(i+k),则计算最大下限值为:
114.gbs=gcd(a(1),a(2)
……
a(n))/a(i)

1。其中gcd(a(1),a(2)
……
a(n))为a(1)、a(2)
……
a(n)的最小公倍数。
115.hcnt=a(i)、a(i+1)
……
a(i+k)钞箱满足可配张数s(j)>d的个数。同样的,在h+g=m时,所述的hcnt=0,其中h为所有钞箱初始张数大于d的配钞金额总数,g为所有钞箱初始张数小于或等于d的配钞金额总数。
116.则求解是否能够有一个该面额的最大下限值xxt满足下列关系:
117.1)xxt≤d

1。
118.2)xcnt=(d

xxt)*(满足s(j)>d)的钞箱个数。其中xcnt为钞箱面额为a(i)值,钞票张数超过d的借位张数。借位张数即从一种面额的钞箱中向与其面额最接近的小额面额钞票进行配钞金额补足的钞票张数。比如不同钞箱中两种最接近面额的钞票为20元面额和100元面额,假设现在配钞金额是120元,则100元面额借位张数为1张。
119.3)scnt=(s(j)

xxt)的总和,且满足s(j)>xxt,s(j)≤d。其中scnt为钞箱面额为a(i)值,钞票张数小于d的借位张数。jj取值范围为(i,i+k)。
120.4)gbs

hcnt≤xcnt+scnt。
121.若上述关系不是全部满足,则对应钞箱配钞最大下限值均为0。
122.若上述关系全部满足,则s(j)

xxt>0时,xxt是对应钞箱配钞最大下限值,其中j取值范围为(i,i+k)。否则最大下限值为0。
123.步骤6,根据步骤5的结果,迭代求解各个面额钞票的配钞张数:
124.s20:钞箱号i初始化为1。
125.s21:若钞箱号i>钞箱总数n。则结束计算。否则执行s22。
126.s22:初始化i号钞箱配钞数q=i号钞箱配钞的最小上限值。
127.s23:若i为第n号钞箱,且配钞金额大于第n号钞箱上限配超金额,或配钞金额不能被第n号钞箱内的钞票面额整除,则结束计算并返回配钞失败结果。否则执行s24。
128.s24:若i号钞箱配钞数q<i号钞箱配钞的最大下限值,则结束计算并返回配钞失败结果。否则执行s25。
129.s25:配钞金额=a(i)*配钞张数,若配钞金额>剩余配钞金额,则配钞张数减1,执行s23。否则执行s26。
130.s26:计算当前剩余配钞金额=原剩余配钞金额

配钞金额。
131.s27:累计配钞张数=sum(a(1)、a(2)、
……
、a(i)已配钞张数),若累计配钞张数>取款装置最大可出张数,则结束计算并返回配钞数量太大错误。否则执行s28。
132.s28:若配钞余额=0,则结束计算并返回计算结果且配钞成功。否则执行s29。
133.s29:钞箱号i累加1。
134.s30:递增迭代调用s21。若返回成功,则返回计算结果且配钞成功。否则执行s31。
135.s31:配钞数减1,下一步执行s24。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1