使用 Python 多线程技术优化进货单品组合,计算商超最大收益,并添加进度提示功能,提升代码效率和用户体验。

import itertools
import pandas as pd
import threading

# 读取数据
data = pd.read_csv('data4.csv')

# 计算每种单品的收益
data['单品收益'] = data['销量'] * data['成本加成定价'] * (1 - data['单品损耗'] * 0.01) - data['销量'] * data['批发价格']

# 按分类名称进行分组,并计算每种分类的收益之和
grouped_data = data.groupby('分类名称')['单品收益'].sum()
# 进货单品名称数的范围
num_items = range(27, 34)

# 初始化最大收益和对应的单品名称组合
max_profit = 0
max_profit_combination = []

# 创建进度锁
progress_lock = threading.Lock()

# 定义进度计数器
progress_count = 0

# 定义进度提示函数
def progress_update():
    global progress_count
    progress_count += 1
    progress = progress_count / total_combinations * 100
    print('当前进度:{:.2f}%'.format(progress))

# 遍历所有可能的单品名称组合
total_combinations = sum([len(list(itertools.combinations(data['单品名称'], r))) for r in num_items])
for r in num_items:
    combinations = itertools.combinations(data['单品名称'], r)
    for combination in combinations:
        # 根据单品名称组合筛选数据
        selected_data = data[data['单品名称'].isin(combination)]
        # 计算商超收益
        total_profit = selected_data.groupby('分类名称')['单品收益'].sum().sum()
        # 更新最大收益和对应的单品名称组合
        with progress_lock:
            if total_profit > max_profit:
                max_profit = total_profit
                max_profit_combination = combination
        progress_update()

# 输出结果
print('进货量最大利润的单品名称组合是:', max_profit_combination)
print('商超的最大收益是:', max_profit)

该代码使用 itertools.combinations 生成所有可能的单品名称组合,并使用多线程对每个组合进行收益计算,并使用进度提示功能显示计算进度,提升代码效率和用户体验。

Python 多线程优化进货组合,实现商超最大收益

原文地址: https://www.cveoy.top/t/topic/epVC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录