邢台网站建设基本流程,wordpress主题 问卷填报,高校网站建设汇报,哈尔滨住房城乡建设局网站首页1、基于字典的创建规划问题
上篇中介绍了使用 LpVariable 对逐一定义每个决策变量#xff0c;设定名称、类型和上下界#xff0c;类似地对约束条件也需要逐一设置模型参数。在大规模的规划问题中#xff0c;这样逐个定义变量和设置模型参数非常繁琐#xff0c;效率很低。P… 1、基于字典的创建规划问题
上篇中介绍了使用 LpVariable 对逐一定义每个决策变量设定名称、类型和上下界类似地对约束条件也需要逐一设置模型参数。在大规模的规划问题中这样逐个定义变量和设置模型参数非常繁琐效率很低。Pulp 库提供了一种快捷方式可以结合 Python语言的循环和容器使用字典来创建问题。 -1使用快捷方法建立一个规划问题可以用字典类型dict 建立多个变量例如 name [‘废料1’, ‘废料2’, ‘废料3’, ‘废料4’, ‘镍’, ‘铬’, ‘钼’] # A dictionary of the costs of each of the Ingredients is created mass pulp.LpVariable.dicts(“原料”, material, lowBound0, cat‘Continuous’) -2使用字典类型dict 设置目标函数和约束条件的参数例如 cost { ‘废料1’: 16, ‘废料2’: 10, ‘废料3’: 8, ‘废料4’: 9, ‘镍’: 48, ‘铬’: 60, ‘钼’: 53} -3使用 遍历循环结构 设置目标函数和约束条件例如 AlloyModel pulp.lpSum([cost[item] * mass[item] for item in material]), “总生产成本” AlloyModel pulp.lpSum([mass[item] for item in material]) 1000, “质量约束” 详细用法参见下节例程。 欢迎关注 Youcans 原创系列每周更新数模笔记 Python数模笔记-PuLP库 Python数模笔记-StatsModels统计回归 Python数模笔记-Sklearn Python数模笔记-NetworkX Python数模笔记-模拟退火算法
2、线性规划问题案例
本篇以合金钢材生产投料问题为例分析基于列表和字典创建问题的快捷方法。 问题描述 某钢铁厂通过熔炼回收的金属废料并添加一定新料的方法生产满足化学成分要求的合金计划生产1000千克的合金。 所有金属废料的主要成分是铁不同金属废料还含有各种微量元素。 金属废料、新料的各组分含量占比、可用数量和单位成本如下表所示。生成合金中各组分的含量要求也如表中所示。 问如何安排投料比例在满足合金组分含量要求的条件下的材料成本最小 材料碳镍铬钼可用量成本废料10.8018.012.00.07516废料20.703.21.10.125010废料30.85000不限8废料40.40000不限9镍010000不限48铬001000不限60钼000100不限53合金下限0.653.01.01.1//合金上限0.753.51.21.3//3、建立模型
1决策变量 x1废料 1 用量千克 x2废料 2 用量千克 x3废料 3 用量千克 x4废料 4 用量千克 x5原料镍 用量千克 x6原料铬 用量千克 x7原料钼 用量千克 2目标函数 min cost 16*x1 10*x2 8*x3 9*x4 48*x5 60*x6 53*x7 3约束条件 0.8*x1 0.7*x2 0.85*x3 0.40*x4 0.65*1000 0.8*x1 0.7*x2 0.85*x3 0.40*x4 0.75*1000 18.0*x1 3.2*x2 100.0*x5 3.0*1000 18.0*x1 3.2*x2 100.0*x5 3.5*1000 12.0*x1 1.1*x2 100.0*x6 1.0*1000 12.0*x1 1.1*x2 100.0*x6 1.2*1000 0.1*x2 100.0*x7 1.1*1000 0.1*x2 100.0*x7 1.3*1000 4变量取值范围 xi 0, i1,2,…7 x1 75, x2 250 4、PuLP 程序 1使用 LpVariable 逐一定义变量
本程序与上篇的方法相同使用 LpVariable 逐一定义变量。完整的程序代码如下 import pulp # 导入 pulp库# 1.建立优化问题 AlloyLP: 求最小值(LpMinimize)AlloyLP pulp.LpProblem(合金生产材料优化, sensepulp.LpMinimize) # 定义问题求最小值# 2.定义决策变量 x1~x7x1 pulp.LpVariable(废料1#, lowBound0, upBound75.0, catContinuous) # 定义 x1x2 pulp.LpVariable(废料2#, lowBound0, upBound250., catContinuous) # 定义 x2x3 pulp.LpVariable(废料3#, lowBound0, catContinuous) # 定义 x3x4 pulp.LpVariable(废料4#, lowBound0, catContinuous) # 定义 x4x5 pulp.LpVariable(原料镍, lowBound0, catContinuous) # 定义 x5x6 pulp.LpVariable(原料铬, lowBound0, catContinuous) # 定义 x6x7 pulp.LpVariable(原料钼, lowBound0, catContinuous) # 定义 x7# 3.定义目标函数 costAlloyLP (16*x1 10*x2 8*x3 9*x4 48*x5 60*x6 53*x7) # 投料成本# 4.设置约束条件AlloyLP (x1 x2 x3 x4 x5 x6 x7 1000) # 等式约束AlloyLP (0.8*x1 0.7*x2 0.85*x3 0.4*x4 0.65*1000) # 不等式约束AlloyLP (0.8*x1 0.7*x2 0.85*x3 0.4*x4 0.75*1000) # 不等式约束AlloyLP (18.0*x1 3.2*x2 100.0*x5 3.0*1000) # 不等式约束AlloyLP (18.0*x1 3.2*x2 100.0*x5 3.5*1000) # 不等式约束AlloyLP (12.0*x1 1.1*x2 100.0*x6 1.0*1000) # 不等式约束AlloyLP (12.0*x1 1.1*x2 100.0*x6 1.2*1000) # 不等式约束AlloyLP (0.1*x2 100.0*x7 1.1*1000) # 不等式约束AlloyLP (0.1*x2 100.0*x7 1.3*1000) # 不等式约束AlloyLP (x1 x2 x3 x4 x5 x6 x7 1000) # 等式约束# 5.求解线性规划问题AlloyLP.solve()# 6.输出优化结果print(AlloyLP) # 输出问题设定参数和条件# print(求解状态:, pulp.LpStatus[AlloyLP.status]) # 输出求解状态for v in AlloyLP.variables():print(v.name, , v.varValue) # 输出每个变量的最优值print(最小材料成本 , pulp.value(AlloyLP.objective)) # 输出最优解的目标函数值# 关注 Youcans分享原创系列 https://blog.csdn.net/youcans 5、PuLP 程序 2使用 dict 定义决策变量和约束条件
本程序使用 dict 定义变量、目标函数和约束条件参数便于复杂问题的参数设定。 import pulp # 导入 pulp库 关注 Youcans分享原创系列 https://blog.csdn.net/youcans # 1. 建立问题AlloyModel pulp.LpProblem(钢材生产问题, pulp.LpMinimize)# 2. 建立变量material [废料1, 废料2, 废料3, 废料4, 镍, 铬, 钼]mass pulp.LpVariable.dicts(原料, material, lowBound0, catContinuous)# 3. 设置目标函数cost {废料1: 16,废料2: 10,废料3: 8,废料4: 9,镍: 48,铬: 60,钼: 53}AlloyModel pulp.lpSum([cost[item] * mass[item] for item in material]), 总生产成本# # 4. 施加约束carbonPercent {废料1: 0.8,废料2: 0.7,废料3: 0.85,废料4: 0.4,镍: 0,铬: 0,钼: 0}NiPercent {废料1: 18,废料2: 3.2,废料3: 0,废料4: 0,镍: 100,铬: 0,钼: 0}CrPercent {废料1: 12,废料2: 1.1,废料3: 0,废料4: 0,镍: 0,铬: 100,钼: 0}MoPercent {废料1: 0,废料2: 0.1,废料3: 0,废料4: 0,镍: 0,铬: 0,钼: 100}AlloyModel pulp.lpSum([mass[item] for item in material]) 1000, 质量约束AlloyModel pulp.lpSum([carbonPercent[item] * mass[item] for item in material]) 0.65*1000, 碳最小占比AlloyModel pulp.lpSum([carbonPercent[item] * mass[item] for item in material]) 0.75*1000, 碳最大占比AlloyModel pulp.lpSum([NiPercent[item] * mass[item] for item in material]) 3.0*1000, 镍最小占比AlloyModel pulp.lpSum([NiPercent[item] * mass[item] for item in material]) 3.5*1000, 镍最大占比AlloyModel pulp.lpSum([CrPercent[item] * mass[item] for item in material]) 1.0*1000, 铬最小占比AlloyModel pulp.lpSum([CrPercent[item] * mass[item] for item in material]) 1.2*1000, 铬最大占比AlloyModel pulp.lpSum([MoPercent[item] * mass[item] for item in material]) 1.1*1000, 钼最小占比AlloyModel pulp.lpSum([MoPercent[item] * mass[item] for item in material]) 1.3*1000, 钼最大占比AlloyModel mass[废料1] 75, 废料1可用量AlloyModel mass[废料2] 250, 废料2可用量# 5. 求解AlloyModel.solve()# 6. 打印结果print(AlloyModel) # 输出问题设定参数和条件print(优化状态:, pulp.LpStatus[AlloyModel.status])for v in AlloyModel.variables():print(v.name, , v.varValue)print(最优总成本 , pulp.value(AlloyModel.objective)) 6、Python程序和运行结果
程序 1 和程序 2 的运行结果完全相同结果如下
Welcome to the CBC MILP Solver
Version: 2.9.0
Build Date: Feb 12 2015 钢材生产问题:
MINIMIZE
16*原料_废料1 10*原料_废料2 8*原料_废料3 9*原料_废料4 53*原料_钼 60*原料_铬 48*原料_镍 0
SUBJECT TO
质量约束: 原料_废料1 原料_废料2 原料_废料3 原料_废料4 原料_钼 原料_铬 原料_镍 1000
碳最小占比: 0.8 原料_废料1 0.7 原料_废料2 0.85 原料_废料3 0.4 原料_废料4 650
碳最大占比: 0.8 原料_废料1 0.7 原料_废料2 0.85 原料_废料3 0.4 原料_废料4 750
镍最小占比: 18 原料_废料1 3.2 原料_废料2 100 原料_镍 3000
镍最大占比: 18 原料_废料1 3.2 原料_废料2 100 原料_镍 3500
铬最小占比: 12 原料_废料1 1.1 原料_废料2 100 原料_铬 1000
铬最大占比: 12 原料_废料1 1.1 原料_废料2 100 原料_铬 1200
钼最小占比: 0.1 原料_废料2 100 原料_钼 1100
钼最大占比: 0.1 原料_废料2 100 原料_钼 1300
废料1可用量: 原料_废料1 75
废料2可用量: 原料_废料2 250
VARIABLES
原料_废料1 Continuous
原料_废料2 Continuous
原料_废料3 Continuous
原料_废料4 Continuous
原料_钼 Continuous
原料_铬 Continuous
原料_镍 Continuous优化状态: Optimal
原料_废料1 75.0
原料_废料2 90.909091
原料_废料3 672.28283
原料_废料4 137.30808
原料_钼 10.909091
原料_铬 0.0
原料_镍 13.590909
最优总成本 9953.671725000002 版权说明 原创作品 关注 Youcans分享原创系列 https://blog.csdn.net/youcans Copyright 2021 YouCans, XUPT Crated2021-04-28 关注 Youcans分享原创系列 https://blog.csdn.net/youcans
Python数模笔记-PuLP库1线性规划入门 Python数模笔记-PuLP库2线性规划进阶 Python数模笔记-PuLP库3线性规划实例 Python数模笔记-StatsModels 统计回归1简介 Python数模笔记-StatsModels 统计回归2线性回归 Python数模笔记-StatsModels 统计回归3模型数据的准备 Python数模笔记-StatsModels 统计回归4可视化 Python数模笔记-Sklearn 1介绍 Python数模笔记-Sklearn 2聚类分析 Python数模笔记-Sklearn 3主成分分析 Python数模笔记-Sklearn 4线性回归 Python数模笔记-Sklearn 5支持向量机 Python数模笔记-模拟退火算法1多变量函数优化 Python数模笔记-模拟退火算法2约束条件的处理 Python数模笔记-模拟退火算法3整数规划问题 Python数模笔记-模拟退火算法4旅行商问题