提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、题目

二、解题思想

2.1 问题1

2.2  问题2

2.3  问题3

总结


先更新部分~~需要数据集可以私信我


前言

近段时间,训练了一道仓库选址问题研究建模,在这里详细分享给大家我的结题过程.

PS:有错误欢迎指出


一、题目

不多说了,直接上题目


二、解题思想


2.1 问题1

网上的订货需要在一天内送达,求至少建多少的仓库。这是一道集合覆盖问题。覆盖模型适用于一些特殊场景,例如消防中心、救护车、巡逻车等应急设施的区位选址问题

Step1:处理数据Data_1.xlsx,下面给数据集的预览

首先,对每个城市按表中数据按1-50进行编号,再将系数矩阵进行补全(这里通过Excel可以手动几步解决)得到下图

因为题目的要求是一天内送达,所以我们系数矩阵保留所有两城市距离为一天的数据,其余数据都替换为0

# 读取数据
data = pd.read_excel("数据位置")
# 将 Nan 替换为  0
data[1:50].fillna(0,inplace=True)
#删掉无用的列 具体按个人数据实例进行操作
del data['Unnamed: 0']
del data['到达']
data.drop([0],axis=0,inplace=True)
data[1:50].fillna(0,inplace=True)
#大于1的距离进行删除
reachable = data.values #将Excel表中数据存储到数组中
reachable[reachable > 1] = 0

Step2:建立0-1整数规划模型,需要对每个城市建仓库可能性进行尝试

        代表城市

        代表城市间的距离(也可以理解为城市送达城市只要一天的集合)

限制条件:        即每个城市都可覆盖

目标函数:        求至少需要建立几个仓库

代码实现:

#写问题
SetCoverLP = pulp.LpProblem("SetCover_problem_for_Warehouse", sense=pulp.LpMinimize)
#建立变量x
Zones = list(range(50))
x = pulp.LpVariable.dicts("Zone",Zones,cat="Binary")
#目标函数
SetCoverLP += pulp.lpSum(x[i] for i in range(50))
#限制条件
for j in range(50):SetCoverLP += (pulp.lpSum([x[i] * reachable[i][j] for i in range(50)]) >= 1)SetCoverLP.solve()print(SetCoverLP.name)
# 格式化输出
temple = "区域 %(zone)d 的决策是:%(status)s"
# 获得最优解
y = np.array(range(50))
if pulp.LpStatus[SetCoverLP.status] == "Optimal":  for i in range(50):if x[i].varValue:#将建仓位置存储到数组中y[i] = 1else:y[i] = 0output = {'zone': i+1, 'status': '建仓' if x[i].varValue else '--'}print(temple % output)print("需要建立 {} 个仓库。".format(pulp.value(SetCoverLP.objective)))

Step3:运行结果得到答案

2.2  问题2

从第二个问题中,我们知道有两个目的:建尽量少的仓库,最低的消费税负担。

Step1:消费税负担的计量:对于消费者来说他们关心的是购买商品时 需要承担额外的消费税,所以我们使用人均消费税来衡量消费者承担的消费税负担。假设仓库建在第个城市仓库,计算人均消费税:

Step2:加权法系数,标准化统一量纲:通过加权平均法引入系数,对仓库数量和仓库平均消费税两者进行标准化处理(此处标准化处理我采用的是最大最小法),进行统一,将多目标函数转化为单目标函数:

                修建仓库的最大数量

                修建仓库的最小数量

                仓库目标

                人均消费税目标

目标函数:

代码实现:

data1['总税金'] = data1['服装消费']*data1['服装消费税率']*1000 + data1['娱乐设施消费'] * data1['消费税率']*1000
data1['人均税'] = data1['总税金'] / data1['人口']# print(type(data1['人均消费税']))m = np.array(data1['人均税'])
reachable = data2.valuesWarehouse_max = 50
Warehouse_min = 18SetCoverLP = pulp.LpProblem("SetCover_problem_for_Warehouse", sense=pulp.LpMinimize)w=0.8 #可以修改系数
#list1是题一中的建立的仓库,目的计算最小值y[i]*m[i] 即人均消费税
list1=[0,1,0,1,1,1,0,1,0,1,0,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1]y = np.array(list1,dtype="int")Zones = list(range(50))
x = pulp.LpVariable.dicts("Zone",Zones,cat="Binary") Z_1 = (pulp.lpSum(x[i] for i in range(50)) - Warehouse_min) / (Warehouse_max - Warehouse_min)Z_2 = (pulp.lpSum(x[i]*m[i] for i in range(50)) - pulp.lpSum(y[i]*m[i] for i in range(50)))  / (pulp.lpSum(m[i] for i in range(50)) - pulp.lpSum(y[i]*m[i] for i in range(50)))SetCoverLP += (w * Z_1 + (1 - w) * Z_2)for j in range(50):SetCoverLP += (pulp.lpSum([x[i] * reachable[i][j] for i in range(50)]) >= 1)SetCoverLP.solve()print(SetCoverLP.name)temple = "区域 %(zone)d 的决策是:%(status)s"
n = 0
y = np.array(range(50))
if pulp.LpStatus[SetCoverLP.status] == "Optimal":  for i in range(50):if x[i].varValue:n += 1y[i] = 1else:y[i] = 0output = {'zone': i+1, 'status': '建仓'   if x[i].varValue  else '--'}print(temple % output)print("目标函数全局最优解为:{}。".format(pulp.value(SetCoverLP.objective)))print("共建仓数:",n,"个")

Step3:运行结果得到答案:

2.3  问题3

总结

多进行实战练习,多总结才是提升自己的良好途径

仓库选址问题.Python实例操作相关推荐

  1. abaqus python实例_abaqus Python实例-操作excel文件

    abaqus Python实例--操作excel文件目前处理数据离不开excel,所以pythoner必须学会用python操作excel表格.Python 与excel交互方法也比较多,我一开始就接 ...

  2. python字典操作添加_Python字典常见操作实例小结【定义、添加、删除、遍历】

    本文实例总结了python字典常见操作.分享给大家供大家参考,具体如下: 简单的字典: 字典就是键值对key-value组合. #字典 键值对组合 alien_0 ={'color':'green', ...

  3. python数据库操作实例

    本篇文章主要讲解python3.9.6下数据库的链接和查询数据的方法 前置环境需要安装mysql和json两个模块,引入方式为import 模块名,不懂的朋友可以先看<python小白操作入门教 ...

  4. Python实例讲解 -- 磁盘文件的操作

    在文件夹里有六十多个RM格式的视频文件,我现在需要把它们的文件名都提取出来,并去掉文件的扩展名,以便放到需要的网页里. 应该有什么软件可以完成这个简单的要求,可是一时间到哪里去找这 样一个符合要求的软 ...

  5. python 列表操作详解,Python列表解析操作实例总结

    本文实例讲述了Python列表解析操作.分享给大家供大家参考,具体如下: 列表解析 Python 的强大特性之一是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个元素应用一 ...

  6. Win10+Python+Django+Nginx+MySQL开发教程及实例(2)——Python连通操作MySQL

    Win10+Python+Django+Nginx+MySQL开发教程及实例 PaulTsao 本系列教程共有四篇内容: 第一篇: 开发环境搭建 第二篇:用Python连通操作MySQL 第三篇:用N ...

  7. 简述python文件操作_Python 文件操作的详解及实例

    Python 文件操作的详解及实例 一.文件操作 1.对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下: 昨夜寒蛩不住鸣. 惊回千里梦,已三更. ...

  8. Python实例篇:这样操作PDF文件一点都不枯燥了

    前言 大家好,我是辣条 之前辣条有发布过我们常用的两个技能点,今天第三个技能点(PDF)他来了 <Python实例篇:自动操作Excel文件(既简单又特别实用)> <Python技巧 ...

  9. python 机器学习——K 近邻分类理论及鸢尾( Iris )数据集实例操作

    K 近邻分类理论及鸢尾( Iris )数据集实例操作 一.K 近邻分类理论 二.K 近邻分类实例操作 (1)导入数据 划分训练集测试集 (3)数据标准化 (4)用 K 近邻法建立模型 (5)性能评估 ...

最新文章

  1. 极客邦科技旗下TGO鲲鹏会成立美国硅谷分会
  2. 浏览器本地mysql_IndexedDB:浏览器里的本地数据库
  3. Butter Knife:一个安卓视图注入框架
  4. IntelliJ IDEA部署javaweb项目
  5. 数据结构和算法练习网站_视频和练习介绍了10种常见数据结构
  6. PixiJS - 基于 WebGL 的超快 HTML5 2D 渲染引擎
  7. matlab距离保护程序,基于MATLAB的距离保护仿真.doc
  8. 【报告分享】2020快手电商生态报告.pdf(附下载链接)
  9. C#获取C# DLL中的指定接口的所有实现实例 - qq_19759475的博客 - CSDN博客
  10. 十步一拆:iPhone4S拆机十步曲
  11. 计算机控制系统在电厂的应用,计算机控制系统在电厂中的应用.doc
  12. 服务器机械硬盘坏了怎么修复,硬盘修复软件:如何修复硬盘错误?
  13. VC++ 屏幕捕获(DXGI)
  14. 湘潭大学信息安全课作业答案1
  15. 插头DP 概率DP / 期望DP
  16. 如何修复excel文件损坏
  17. 百度网盘真实地址解析(告别下载百度网盘)--修改版
  18. 精品软件 推荐 酷我音乐 一个可以下载320k 音质的音乐播放软件
  19. slam中的相机相关
  20. My first job - Goodbaby Group in Shanghai

热门文章

  1. E:rin和快速迭代
  2. 帝国cmssitemap.php,帝国cms网站地图sitemap免费插件,适用于帝国cms7.2和7.5版本的所有网站...
  3. Activiti工作流使用之Activiti-app的安装及流程创建
  4. Android高效的数据加密方案,Android数据加密方案
  5. Emulator: emulator: ERROR: x86_64 emulation currently requires hardware acceleration!
  6. 华3如何使用ftp和tftp进行文件传输与保存
  7. MYSQL escape用法
  8. 计算机科学主攻机器人,计算机学院·软件学院新进博士教师郝宗波访谈
  9. 【Linux_Shell 脚本编程学习知识点、判断传入参数是否是 整数】
  10. html特殊符号列表