QBMX — A Generalized Bill Mix Routine
One of the more complex tasks facing any ATM application is calculating the optimal bill mix that would satisfy the customer's requested withdrawal amount with the smallest number of bills (banknotes). Often the calculation is quite simple. If all you have is tens and twenties, the solution is quite easy. But what if you have 10s, 20s and 50s, you run out of 10s and the customer asks for 80?
Additionally, the ATM operator may wish to deviate from the minimum number of bills, either because it is more convenient for the customers to receive a few small bills, or to avoid the situation where the first customers get only large bills and later customers get a large number of small bills.
QSM Programming Ltd. offers a sophisticated generalized routine that can be integrated in your application and does all this and more. Whether you use NDC, 912 or XFS, you can integrate the routine with your code.
- Mathematically optimal solution.
- Any mix of bill denominations.
- Multi-currency.
- Up to 8 currency cassette types.
- Up to 4 denominations for each currency.
- Available versions for C#, Java, C and COBOL.
- Policy constraints: For example, include at least one bill of the lowest available denomination, if possible.
- Hard constraints: Allocate no more bills than are present in the dispenser; Allocate no more bills than the maximum number allowed.
See some examples that illustrate the features of QBMX.
Mathematical Background
Mathematically, the bill mix problem is usually known as the change making problem. The simple case, ignoring the constraints of available bills, is a common exercise using the basic tools of "Dynamic Programming". See Google. When we add the requirement that the available number of bills of each denomination should be respected, this becomes the "Bounded change making problem" and is much more difficult.

