问题描述:假设有两间商店,A店有abc三种商品,B店有cdef四种商品,abcdef商品价格分别为432543元,要求每样商品必须购买,即每样商品购买数量大于0,但在A商店购买的商品总数量小于10,在B商店购买的商品总数量小于8,求最优购买力(最小值),用遗传算法怎么优化,给出Python代码
16条回答 默认 最新
关注 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)
解决 1无用
悬赏问题
- ¥15 android studio导航组件根据导航图配置如何自动生成
- ¥20 C#上传XML格式数据
- ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
- ¥100 单片机hardfaulr
- ¥20 手机截图相片分辨率降低一半
- ¥50 求一段sql语句,遇到小难题了,可以50米解决
- ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
- ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
- ¥15 虚拟机检测,可以是封装好的DLL,可付费
- ¥15 kafka无法正常启动(只启动了一瞬间会然后挂了)