1.5 运筹学基础

1.5.1 博弈论和运筹学

1.博弈论

博弈论(Game Theory)又称为对策论,是现代数学的一个新的分支,也是运筹学的一个重要学科。博弈论是两人在平等的对局中各自根据对方的策略变换自己的对抗策略,达到取胜的目的的一种理论。

《孙子兵法》有云:“夫未战而庙算胜者,得算多也;未战而庙算不胜者,得算少也。多算胜少算,而况于无算乎!”

这句话翻译成现代汉语是说在战前要充分估量双方的有利条件和不利条件,这样往往容易取得战争的胜利,反之则容易导致战争失利。算得越周详越容易取得胜利,不算的话就只有死路一条。

孙武口中的这个“庙算”其实就是今天说的博弈。在古代,军队出征前都要在宗庙里举行仪式,并商讨作战方案。

在博弈论中,每个参与者的决策都会影响其他参与者的决策,因此每个参与者需要考虑其他参与者的反应,并选择出最优的决策。博弈论的目标是找到最优策略,使得每个参与者都能够获得最大收益。

博弈论被广泛应用于经济学、政治学、社会学、心理学等领域,可以用于分析市场竞争、投资决策、政策制定、战略决策等问题。

2.运筹学

运筹学(Operational Research,OR)中的“运筹”两个字出自《史记·高祖本纪》中的“夫运筹策帷幄之中,决胜于千里之外,吾不如子房”。运筹学是一种应用数学,主要研究最优化决策的问题,在研究过程中使用了许多数学工具(包括概率统计、数理分析、线性代数等)和逻辑判断方法。运筹学的应用一般有提出问题、建立模型、制订解法3个步骤。

运筹学最早应用于军事活动,解决了许多重要的作战问题。现在其广泛应用于各行各业,应用最多的行业如下。

(1)军事。解决多兵种联合火力打击的协同作战问题、兵力驻防问题、训练方案问题、攻防对策问题等。

(2)工程优化。解决工程进度控制问题、工程施工方案问题、材料采购问题等。

(3)城市管理。解决城市供水和污水处理问题、警车的配置问题等。

(4)电商/零售。解决推广方案问题、活动定价问题、客服排班问题、价格战问题、运营方案问题等。

1.5.2 运筹学的模型

除了应用在各行各业中以外,在日常学习、工作和生活中运筹学也随处可见,如时间管理,运筹学模型可以帮助我们分析如何争取更多的时间。

假设小李是一名电商运营人员,每天8:30准时上班,在上班过程中有以下9个事务要处理。

(1)打开计算机,计算机开机需要1分钟。

(2)泡一杯咖啡,需要5分钟。

(3)查看前一天的工作日志,需要15分钟。

(4)打开店铺后台查看前一天的数据,需要5分钟。

(5)下载前一天的数据,需要10分钟。

(6)制作日报表,需要10分钟。

(7)撰写工作汇报邮件,需要10分钟。

(8)跟上下级沟通,需要30分钟。

(9)阅读行业信息,需要20分钟。

已知条件:前一天数据更新可被查看或下载是在上午9:10后,工作汇报邮件必须在10:00之前发出,跟上下级沟通必须在10:00之后,在下载数据时不能同步操作计算机。

那么他应该如何合理安排工作流程?最早可以在几点结束工作?

这就是一个求最优解的问题,需要运用运筹学来解决这个问题。

第一步,提出问题——如何让时间得到合理应用,让自己空出更多的时间。

第二步,建立模型。

分析:小李的9个事务中,有些是可以并行的,如打开计算机等待的1分钟可以用来同步执行第2个事务。

该模型的一般数学形式可以表示为

U = f(x,y,e)         (1-2)

式中 x——可控变量;

y——已知参数;

ε——随机因素。

第三步,画出关系图。

根据已知条件,确定各个事务的关系,如图1-9所示。

第四步,制订事务流程。

如图1-10所示,根据事务之间的逻辑关系和特定条件,制订事务流程,小李最早可在10:45完成9个事务。

图1-9 事务关系图

图1-10 制订事务流程

1.5.3 规划求解的经典问题

规划求解在电商领域中是一个非常经典的问题,可用于解决某项任务的合理分配问题。例如:广告投放问题,假设有1000万元的广告预算,应该如何合理安排投放到各个平台,让广告效益最大化?

规划求解

【例1-7】淘宝投放广告的站内渠道有直通车和钻展,直通车是按单击量付费的,钻展是按展现量付费的。根据历史数据了解,到直通车的CPC(平均单击单价)是0.36元,转化率是3.4%,钻展的CPC是0.65元,转化率是4.1%。已知有1000万元的广告预算,平均客单价是100元,由于协议规定各个渠道的投放都不能少于300万元,请问如何规划广告预算才能让广告效益最大化?收益率预估为多少?

设直通车的广告投放预算为x1,钻展的广告投放预算为x2,则有

x1+x2=10000000        ①

x1≥3000000         ②

x2≥3000000         ③

x1÷0.36×0.034×100+x2÷0.65×0.041×100=MAX   ④

即(9.44×x1+6.31×x2=MAX)

根据④可知,要想求得最大解,关键在于求x2,若x2最大就能达到最优解。即

9.44×7000000+6.31×3000000=85010000

收益率=85010000÷10000000=8.501

运用Python解决此场景,代码如下:

# 加载线性规划的库
from scipy.optimize import linprog
'''
设直通车的投放预算为x1,钻展的投放预算为x2:
(①)x1+x2=10000000
(②)x1≥3000000
(③)x2≥3000000
(④)x1÷0.36×0.034×100+x2÷0.65×0.041×100=MAX
即(9.44×x1+6.31×x2=MAX)
'''
# 设置①的系数
A_eq1 = [[1,1]]
# 设置①的条件
b_eq1 = [10000000]
# 设置②和③的条件
x1 = (3000000,10000000)
x2 = (3000000,10000000)
# 设置④的系数,注意求解最大值时系数前要加负号
c1 = [[-9.44,-6.31]]
# 使用 linprog()函数求最优解
res1 = linprog(c1,A_eq=A_eq1,b_eq=b_eq1,bounds=(x1,x2))
# 获取最优解中全部的值
x = res1.get('x')
# 广告收益最大值
fun1 = abs(round(res1.get('fun')))
# 直通车投入金额
x_1 = round(x[0])
# 钻展投入金额
x_2 = round(x[1])
#收益率计算
fun2 = fun1/10000000
print(’广告收益最大值 :' ,fun1)
print(’收益率:',fun2)
print(’直通车投入金额 :' ,x_1)
print(’钻展投入金额 :' ,x_2)
Out:
广告收益最大值 : 85010000
收益率: 8.501
直通车投入金额 : 7000000
钻展投入金额 : 3000000

从输出结果可以看出,当投放直通车金额为700万元,钻展投放金额为300万元时就能让广告效益最大化,其收益率预估为8.501。