In this post, we will talk about eligibility for
IDiscountForBestDeal, which is for discounts participating in best deal competition.
Recall that discount best deal is essentially a multi-dimensional integer knapsack problem, and the first step of solving the knapsack problem is for each discount to generate a list of possible basic discount applications.
In general, a knapsack algorithm works more efficiently when each basic discount application has no constraint, i.e. we can apply it as many times as we want, as long as we can stuff it into the knapsack, and when its value is fixed, i.e. unconditional on what has been applied already. Compounding makes the value conditional and we have addressed it. In addition, we have addressed bounded knapsack problem.
Sometimes, a discount requires amount control, for example, 10% for a category for up to $10. This means a discount application may get less value when applied, conditional on what has been applied already. In addition, a retailer may want to spread out the limit proportionally. As of this writing, Dynamics Retail does not support this kind of discount for
For performance reason, we cannot let a knapsack algorithm handle too many basic discount applications. For example, mix and match with variable quantity: buy a phone get all accessories 20% off. If the number of accessories explodes, you can get bombed on the total number of basic discount applications. It gets worse if you have multiple discounts on the phone. For the phone scenario, it is usually a small number of products in one purchase, so it would not be a problem. Besides, we have marginal value ranking algorithm as a backup plan. Anyway, it is something we need to consider for
If a discount is not suited for
IDiscountForBestDeal, the only choice is
IDiscountPostBestDeal, as in favor-retail least expensive case.
In summary, for a discount of type
IDiscountForBestDeal, let us hope we do not get too many basic discount applications in most checkout scenarios, and each discount application needs to have unconditional value in non-compounding case.