weixin_50878518 2024-10-14 16:52 采纳率: 0%
浏览 17
问题最晚将于10月22日00:00点结题

速求!商品购买力最优化问题(用遗传算法求解,给出python代码)

问题描述:假设有两间商店,A店有abc三种商品,B店有cdef四种商品,abcdef商品价格分别为432543元,要求每样商品必须购买,即每样商品购买数量大于0,但在A商店购买的商品总数量小于10,在B商店购买的商品总数量小于8,求最优购买力(最小值),用遗传算法怎么优化,给出Python代码

  • 写回答

16条回答 默认 最新

  • Roc-xb 后端领域优质创作者 2024-10-14 17:53
    关注

    img

    
    import random
    import numpy as np
    
    # 商品价格
    prices = {'a': 4, 'b': 3, 'c': 2, 'd': 5, 'e': 4, 'f': 3}
    
    # 遗传算法参数
    population_size = 100
    generations = 100
    mutation_rate = 0.1
    
    # 约束条件
    max_items_A = 10
    max_items_B = 8
    
    # 初始化个体
    def create_individual():
        # 每种商品购买数量在1到5之间
        return {
            'a': random.randint(1, 5),
            'b': random.randint(1, 5),
            'c': random.randint(1, 5),
            'd': random.randint(1, 5),
            'e': random.randint(1, 5),
            'f': random.randint(1, 5)
        }
    
    # 适应度函数
    def fitness(individual):
        total_cost = sum(individual[item] * prices[item] for item in individual)
        items_A = individual['a'] + individual['b'] + individual['c']
        items_B = individual['c'] + individual['d'] + individual['e'] + individual['f']
        
        if items_A >= max_items_A or items_B >= max_items_B:
            return float('inf')  # 不满足约束条件,惩罚
    
        return total_cost
    
    # 选择
    def select(population):
        population.sort(key=lambda ind: fitness(ind))
        return population[:population_size//2]
    
    # 交叉
    def crossover(parent1, parent2):
        child = parent1.copy()
        for item in child:
            if random.random() > 0.5:
                child[item] = parent2[item]
        return child
    
    # 变异
    def mutate(individual):
        if random.random() < mutation_rate:
            item = random.choice(list(individual.keys()))
            individual[item] = random.randint(1, 5)
    
    # 主遗传算法过程
    def genetic_algorithm():
        population = [create_individual() for _ in range(population_size)]
        
        for generation in range(generations):
            selected = select(population)
            offspring = []
            
            while len(offspring) < population_size:
                parent1, parent2 = random.sample(selected, 2)
                child = crossover(parent1, parent2)
                mutate(child)
                offspring.append(child)
            
            population = offspring
        
        best_individual = min(population, key=fitness)
        return best_individual, fitness(best_individual)
    
    # 执行算法
    best_solution, best_cost = genetic_algorithm()
    print("最佳购买方案:", best_solution)
    print("最低总成本:", best_cost)
    
    
    评论

报告相同问题?

问题事件

  • 赞助了问题酬金100元 今天
  • 创建了问题 今天

悬赏问题

  • ¥15 android studio导航组件根据导航图配置如何自动生成
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费
  • ¥15 kafka无法正常启动(只启动了一瞬间会然后挂了)