Dynamics Retail Discount Extensibility – IDiscountForBestDeal I

In this post, we will talk about eligibility for IDiscountForBestDeal, which is for discounts participating in best deal competition.

We have already examined threshold discounts, which are not about best deal, and favor-retailer least expensive discounts, which are against best deal.

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 IDiscountForBestDeal.

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 IDiscountForBestDeal.

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.

Related: Dynamics Retail Discount Extensibility Overall Approach

Related: Dynamics Retail Discount Extensibility – Three Discount Categories

Related: Retail Discount Concurrency – Best Deal Knapsack Problem