Python产品组合售卖策略算法设计

假设我们有ABCDEF共6个产品售卖,利润率分别如下表。假设我们的客户统一都是只有50的资产,那么我们在保证每个客户贡献有35%的利润率的情况下,可以给客户哪些产品组合(即限定客户只能买某些产品多少件,以避免客户购买利润率低的产品过多导致单个客户利润率不足)?

首先我们考虑上述限定条件的数学逻辑,以上条件符合以下限定条件:

Xi表示每个产品的价格。

pi表示购买的产品数量。

ri表示每个产品的利润率。

这是一个线性规划的问题,但我们先不考虑用运筹学的方法来解决问题。而通过手写算法来实现。

1、考虑目标利润35%,那么产品组合方案中必定存在利润率在35%或以上的产品。因此将产品数据分为2组:35%及以上为一组,35%以下为第二组。

2、计算单个产品在50元以内可以卖多少个,并把个数和总价信息分别补充到一组和二组中,形成单个产品在50元价格内的可购买数量列表。

3、通过逐一添加一组的数据和二组的数据组合,判断其是否满足前面提到的限定条件,如果满足则返回当前的产品组合。保存并存储即可。

将数据整理如下并存储在data工作表中:

使用pandas将数据读取为data,设定客户资产balance和利润率目标rate:

定义一个函数data_cls,完成1和2的操作。返回的结果u_data和o_data分别表示小于和大于等于rate目标利润率的条件下,在帐户资产为balance的条件下可以购买的所有单个产品的数量和总价组合信息。Max_n是50块可以买到的最多多少个产品,以此来确定我们最后组合产品的数量最大为多少时,循环迭代停止。

完成了单个产品的组合分类,接下来就是对每个分类的组合进行判断。定义一个判断函数cal_comb来计算组合策略是否符合预期结果。

然后就是进行穷举计算了:

以上就利用最笨的办法完成了对产品组合售卖策略的算法设计。逻辑上没问题,计算上老费力了。我的老爷机根本算不出来,想想根本58取25的组合,百亿不止的数据集。

百度网盘,文件下载:

链接: https://pan.baidu.com/s/1qkLMVY3UTN5yglUHGuuMpg

密码: 568t