热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

两种方式对线性规划问题求解详细步骤:【Excel2016】与【Python编程】

目录一、问题描述



目录


  • 一、问题描述
  • 二、法一:Excel 线性规划
  • 三、法二:python 编程线性规划
  • 四、总结
  • 五、参考资料

本文内容:用 Excel 和 python 编程完成线性规划问题的求解。


一、问题描述
  • 现有5个广告投放渠道:日间电视、夜间电视、网络媒体、平面媒体、户外广告。
  • 每个渠道的效果、广告费用、限制数据如下表:

广告渠道触达用户数(人/次)广告费用(元/次)最高使用次数咨询电话量(通/次)各媒体使用次数
日间电视2000100014600





x


1




x_1


x1?
夜间电视400020008800





x


2




x_2


x2?
网络媒体300040040500





x


3




x_3


x3?
平面媒体500010005400





x


4




x_4


x4?
户外广告60010050300





x


5




x_5


x5?

  • 设日间电视、夜间电视、网络媒体、平面媒体、户外广告的使用次数依次为




    x


    1




    x_1

    x1?、




    x


    2




    x_2

    x2?、




    x


    3




    x_3

    x3?、




    x


    4




    x_4

    x4?、




    x


    5




    x_5

    x5?,咨询电话量为



    L



    L

    L,则 5 种谋体资源配置的三要素如下:
  • (1)决策变量:




    x


    1




    x_1

    x1?、




    x


    2




    x_2

    x2?、




    x


    3




    x_3

    x3?、




    x


    4




    x_4

    x4?、




    x


    5




    x_5

    x5?;
  • (2)目标函数(st):咨询电话量



    L


    =


    600



    x


    1



    +


    800



    x


    2



    +


    500



    x


    3



    +


    400



    x


    4



    +


    300



    x


    5




    L=600x_1+800x_2+500x_3+400x_4+300x_5

    L=600x1?+800x2?+500x3?+400x4?+300x5?最大化;
  • (3)所满足的约束条件:
    • 电视广告费用不超过 3 万元:




      1000



      x


      1



      +


      2000



      x


      2






      30000



      1000x_1+2000x_2≤30000


      1000x1?+2000x2?≤30000
    • 电视广告次数至少进行 20 次:





      x


      1



      +



      x


      2






      20



      x_1+x_2≥20


      x1?+x2?≥20
    • 广告总费用不超过 4 万元:




      1000



      x


      1



      +


      2000



      x


      2



      +


      400



      x


      3



      +


      1000



      x


      4



      +


      100



      x


      5






      40000



      1000x_1+2000x_2+400x_3+1000x_4+100x_5≤40000


      1000x1?+2000x2?+400x3?+1000x4?+100x5?≤40000
    • 被告知人数至少 10 万人:




      2000



      x


      1



      +


      4000



      x


      2



      +


      3000



      x


      3



      +


      5000



      x


      4



      +


      600



      x


      5






      100000



      2000x_1+4000x_2+3000x_3+5000x_4+600x_5≥100000


      2000x1?+4000x2?+3000x3?+5000x4?+600x5?≥100000
    • 各媒体使用次数不超过次数限量:





      x


      1






      14



      x_1≤14


      x1?≤14;





      x


      2






      8



      x_2≤8


      x2?≤8;





      x


      3






      40



      x_3≤40


      x3?≤40;





      x


      4






      5



      x_4≤5


      x4?≤5;





      x


      5






      50



      x_5≤50


      x5?≤50
    • 各媒体使用次数均为正整数。

二、法一:Excel 线性规划
  • 首先使用 Excel 2016 建立一个数据表:
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片

设置目标函数:

  • 根据上面分析,目标函数为:E2:E6与F2:F6区域的乘积。
  • 在 C10 单元格内输入:=SUMPRODUCT(E2:E6,F2:F6)
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片
  • 输入完毕后,值为 0 ,因为 F 那一列值为空,这里我在前面备注了一下。
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片

设置约束条件:

  • 将第一部分所写的约束条件表达式设置在 Excel 中。
  • 在 C15:C18 单元格内依次输入公式:
    • C15:=SUMPRODUCT(C2:C3,F2:F3)
    • C16:=F2+F3
    • C17:=SUMPRODUCT(C2:C6,F2:F6)
    • C18:=SUMPRODUCT(B2:B3,F2:F6)
  • 输入完毕后均为 0 。
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片

加载 Excel 的规划求解模块:

  • 选择【文件】→【选项】→【加载项】→【转到】,勾选【规划求解加载项(Solver add-in)】,再点击【确定】按钮,就出现了规划求解模块。
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片

在 Excel 规划求解模块中设置决策变量和目标函数:

  • 打开规划求解。
  • 修改以下两个值:
    (1)设置目标:输出结果区域;
    (2)通过更改可变单元格:也就是之前数据表空白的地方。
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片
    设置约束条件:
  • 点击【添加】按钮,分别设置 6 个约束条件。
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片
  • 约束条件 1——电视广告费用不超过 3 万元:



    1000



    x


    1



    +


    2000



    x


    2






    30000



    1000x_1+2000x_2≤30000

    1000x1?+2000x2?≤30000
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片
  • 约束条件 2——电视广告次数至少进行 20 次:




    x


    1



    +



    x


    2






    20



    x_1+x_2≥20

    x1?+x2?≥20
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片
  • 约束条件 3——广告总费用不超过 4 万元:



    1000



    x


    1



    +


    2000



    x


    2



    +


    400



    x


    3



    +


    1000



    x


    4



    +


    100



    x


    5






    40000



    1000x_1+2000x_2+400x_3+1000x_4+100x_5≤40000

    1000x1?+2000x2?+400x3?+1000x4?+100x5?≤40000
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片
  • 约束条件 4——被告知人数至少 10 万人:



    2000



    x


    1



    +


    4000



    x


    2



    +


    3000



    x


    3



    +


    5000



    x


    4



    +


    600



    x


    5






    100000



    2000x_1+4000x_2+3000x_3+5000x_4+600x_5≥100000

    2000x1?+4000x2?+3000x3?+5000x4?+600x5?≥100000
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片
  • 约束条件 5——各媒体使用次数不超过次数限量:




    x


    1






    14



    x_1≤14

    x1?≤14;




    x


    2






    8



    x_2≤8

    x2?≤8;




    x


    3






    40



    x_3≤40

    x3?≤40;




    x


    4






    5



    x_4≤5

    x4?≤5;




    x


    5






    50



    x_5≤50

    x5?≤50
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片
  • 约束条件 6——各媒体使用次数均为正整数
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片

求解问题:

  • 约束条件设置完毕后,设置【单纯线性规划】,然后点击【求解】。
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片
  • 点击【确定】。
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片
  • 结果如下:
    两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片

三、法二:python 编程线性规划
  • scipy 库中线性规划求解函数的说明:
    函数原型

scipy.optimize.linprog(c,
A_ub=None,
b_ub=None,
A_eq=None,
b_eq=None,
bounds=None,
method=‘interior_point’,
callback=None,
optiOns=None,x0=None)?

  • 参数说明:https://www.pianshen.com/article/39912031011/

使用 Jupter 编写代码:

# 导入包
from scipy import optimize
import numpy as np
#创建矩阵,c为目标函数的矩阵,A_ub为约束条件的左边构成的矩阵,B_ub为约束条件的右边
c=np.array([600,800,500,400,300])
A_ub=np.array([[1000,2000,0,0,0],[-1,-1,0,0,0],[1000,2000,400,1000,100],[-2000,-4000,-3000,-5000,-600],[1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1]])
B_ub=np.array([30000,-20,40000,-100000,14,8,40,5,50])
# 求解
res=optimize.linprog(-c,A_ub,B_ub)
print(res)

两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】 - 文章图片

  • 一样的可以得到结果。

四、总结
  • Excel 在数据处理方面是一个强大的工具,而 python 在处理数据方面是一个很强大的编程语言,针对大数据处理,用着两种方式都可以做线性规划。

五、参考资料

[1] 线性规划问题的求解——Excel和python编程



推荐阅读
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文为Codeforces 1294A题目的解析,主要讨论了Collecting Coins整除+不整除问题。文章详细介绍了题目的背景和要求,并给出了解题思路和代码实现。同时提供了在线测评地址和相关参考链接。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
author-avatar
weneay
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有