文章目录

  • 一、实际问题分析——媒体组合案例
  • 二、Excel完成线性规划问题的求解
  • 三、Python完成线性规划的求解
  • 四、参考


一、实际问题分析——媒体组合案例

现有五个广告投放渠道:日间电视、夜间电视、网络媒体、平面媒体和户外广告,每个渠道的效果、费用及限制如下表

python 线性规划 复杂目标函数 python多目标线性规划_python 线性规划 复杂目标函数


设日间电视、夜间电视、网络媒体、平面媒体和户外广告的使用次数依次设为x1,x2,x3,x4,x5,咨询电话量设为L,则五种媒体资源配置的三要素为:

  1. 决策变量:x1,x2,x3,x4,x5;
  2. 目标函数:咨询电话量L=600x1+800x2+500x3+400x4+300x5最大化;
  3. 所满足的约束条件:
  • 电视广告费用不超过3万元,1000x1+2000x2<=30000;
  • 电视广告次数至少进行20次,x1+x2>=20;
  • 广告总费用不超过4万元,1000x1+2000x2+400x3+1000x4+100x5<=40000;
  • 被告知人数至少10万人,2000x1+4000x2+3000x3+5000x4+600x5>=100000;
  • 各媒体使用次数不超过次数限量,x1<=14,x2<=8,x3<=40,x4<=5,x5<=50;
  • 各媒体使用次数均为正整数。

二、Excel完成线性规划问题的求解

  1. 创建数据源
    录入上述数据,并增加“各媒体使用次数”列
  2. 在Excel中设置目标函数
    由前面的分析可知,目标函数为E2:E6与F2:F6区域两列数组对应元素的乘积之和,在C10单元格中输入“=SUMPRODUCT(E2:E6,F2:F6)”
  3. 设置约束条件
    将之前的约束条件表达式设置在Excel中(写公式时前面不要忘了加“=”号)
  4. 加载Excel的规划求解模块
    选择“文件”->“选项”->“加载项”->“转到”,勾选“规划求解加载项”,单击确定。

    这样数据菜单下就出现了“规划求解”模块
  5. 在Excel规划求解模块中设置决策变量和目标函数
  • 选择“数据”->“规划求解”,设置如下
  • 设置约束条件
    选择“遵守约束”后的“添加”,分别设置6个约束条件
    约束条件1设置:

约束条件2设置:

python 线性规划 复杂目标函数 python多目标线性规划_python 线性规划 复杂目标函数_02

约束条件3设置:

python 线性规划 复杂目标函数 python多目标线性规划_加载_03

约束条件4设置:

python 线性规划 复杂目标函数 python多目标线性规划_约束条件_04

约束条件5设置:

python 线性规划 复杂目标函数 python多目标线性规划_约束条件_05

约束条件6设置:

python 线性规划 复杂目标函数 python多目标线性规划_python 线性规划 复杂目标函数_06


python 线性规划 复杂目标函数 python多目标线性规划_加载_07


设置完成

python 线性规划 复杂目标函数 python多目标线性规划_线性规划_08


6. 最终求解结果

python 线性规划 复杂目标函数 python多目标线性规划_python 线性规划 复杂目标函数_09

三、Python完成线性规划的求解

  • 打开Windows终端,输入Jupyter Notebook,打开Jupyter工具
  • 在Jupyter的web网页中创建Python文本
  • 现在就可以填写代码了
    完整代码如下
import numpy as np
from scipy import optimize as op
x1=(0,14)
x2=(0,8)
x3=(0,40)
x4=(0,5)
x5=(0,50)
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]])
B_ub=np.array([30000,-20,40000,-100000])
res=op.linprog(-c,A_ub,B_ub,bounds=(x1,x2,x3,x4,x5))
res

结果如下

python 线性规划 复杂目标函数 python多目标线性规划_约束条件_10