一、问题描述现有5个广告投放渠道:日间电视、夜间电视、网络媒体、平面媒体、户外广告。每个渠道的效果、广告费用、限制数据如下表:
本文内容:
用 Excel 和 python 编程完成线性规划问题的求解。
广告渠道 | 触达用户数(人/次) | 广告费用(元/次) | 最高使用次数 | 咨询电话量(通/次) | 各媒体使用次数 |
---|---|---|---|---|---|
日间电视 | 2000 | 1000 | 14 | 600 | x 1 x_1 x1 |
夜间电视 | 4000 | 2000 | 8 | 800 | x 2 x_2 x2 |
网络媒体 | 3000 | 400 | 40 | 500 | x 3 x_3 x3 |
平面媒体 | 5000 | 1000 | 5 | 400 | x 4 x_4 x4 |
户外广告 | 600 | 100 | 50 | 300 | x 5 x_5 x5 |
设置目标函数:
根据上面分析,目标函数为:E2:E6与F2:F6区域的乘积。在 C10 单元格内输入:=SUMPRODUCT(E2:E6,F2:F6)
输入完毕后,值为 0 ,因为 F 那一列值为空,这里我在前面备注了一下。
设置约束条件:
将第一部分所写的约束条件表达式设置在 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 的规划求解模块:
选择【文件】→【选项】→【加载项】→【转到】,勾选【规划求解加载项(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 编程】所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)