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

两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】,第1张

概述目录一、问题描述二、法一:Excel线性规划三、法二:python编程线性规划四、总结五、参考资料本文内容:用Excel和python编程完成线性规划问题的求解。一、问题描述现有5个广告投放渠道:日间电视、夜间电视、网络媒体、平面媒体、户外广告。每个渠道的效果、广告费

目录一、问题描述二、法一: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 建立一个数据表:

设置目标函数:

根据上面分析,目标函数为:E2:E6与F2:F6区域的乘积。在 C10 单元格内输入:=SUMPRODUCT(E2:E6,F2:F6)

输入完毕后,值为 0 ,因为 F 那一列值为空,这里我在前面备注了一下。

设置约束条件:

将第一部分所写的约束条件表达式设置在 Excel 中。在 C15:C18 单元格内依次输入公式: C15:=SUMPRODUCT(C2:C3,F2:F3)C16:=F2+F3C17:=SUMPRODUCT(C2:C6,F2:F6)C18:=SUMPRODUCT(B2:B3,F2:F6) 输入完毕后均为 0 。

加载 Excel 的规划求解模块:

选择【文件】→【选项】→【加载项】→【转到】,勾选【规划求解加载项(Solver add-in)】,再点击【确定】按钮,就出现了规划求解模块。

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

打开规划求解。修改以下两个值:
(1)设置目标:输出结果区域;
(2)通过更改可变单元格:也就是之前数据表空白的地方。


设置约束条件:点击【添加】按钮,分别设置 6 个约束条件。

约束条件 1——电视广告费用不超过 3 万元: 1000 x 1 + 2000 x 2 ≤ 30000 1000x_1+2000x_2≤30000 1000x1​+2000x2​≤30000

约束条件 2——电视广告次数至少进行 20 次: x 1 + x 2 ≥ 20 x_1+x_2≥20 x1​+x2​≥20

约束条件 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

约束条件 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

约束条件 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

约束条件 6——各媒体使用次数均为正整数


求解问题:

约束条件设置完毕后,设置【单纯线性规划】,然后点击【求解】。

@H_697_301@

点击【确定】。

结果如下:

三、法二: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 optimizeimport 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 在数据处理方面是一个强大的工具,而 python 在处理数据方面是一个很强大的编程语言,针对大数据处理,用着两种方式都可以做线性规划。五、参考资料

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

总结

以上是内存溢出为你收集整理的两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】全部内容,希望文章能够帮你解决两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1188101.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存