关键词:组织运营效率的关键
有效的流程管理是任何组织成功的关键,它通过数据科学、运营管理和运营研究的结合来实现。
在这篇文章中,我将主要关注两个可以激励您继续研究它们的示例。首先,我们将解决背包问题,然后我们将使用图解法研究一些理论。使用图表理解理论有助于建立直觉。我使用这些简单的例子只是为了演示整个技术是如何工作的。
背包问题-算法

图1 露营物品清单(作者图)
假设您正在整理一份露营装备清单,如上表所示。如您所见,所有物品的总重量为 11.29 公斤,但您的包中最多只能携带 5 公斤。然后,您将如何从列表中选择项目?
表中的第三列还包括项目的重要性/价值,可以帮助您选择最佳项目数量。您可以采取的一种方法是尝试所有可能的项目组合,这将花费大量时间。这被称为贪心方法,对这个问题进行编码将导致高时间复杂度。
这是一个小问题,但是如果您有大量的项目和多种组合怎么办?这种贪婪的方法是行不通的。
现在让我们使用数学规划来解决这个问题。数学问题的概念与您必须在学校学习过的内容有关,包括线性系统和方程,求解联立方程等。在数学或线性规划中,重要的部分是制定您的问题陈述。
制定问题陈述
决策变量
决策变量是我们想要确定的。在这种情况下,我们需要选择使 5kg 的整体保值约束最大化的项目组合。

如果选择了项目,则为 1,如果未选择项目,则为 0。
如果我们排除一个项目,它将被标记为 0。
- 目标函数
在这种情况下,我们希望最大化总价值。让我们首先计算每个项目的重量值。

图2 露营物品加权清单(作者图)
目标函数
因此,理想情况下,我们希望最大化价值,如果我们包含所有项目,我们可以做到这一点,但我们没有这个选项。我们必须选择项目的最佳组合来满足我们的约束。
- 约束
总重量不得超过 5 公斤

约束 → 重量不得超过 5 公斤
鉴于这 3 个部分,我们可以使用求解器来求解完整的方程。我们可以利用 Pulp 来求解这个方程并找到正确的项目组合。
from pulp import *
v = {'Sleeping bag':4.17,
'Pillow':5.13,
'Torch':10,
'First Aid Kit':8,
'Hand sanitiser':2,
'Coolbox':1.33,
'Rubbish bags':2,
'lantern':0.37,
'Eating/cooking utensils':1.2,
'Compass':8}
w = {'Sleeping bag':1.2,
'Pillow':0.39,
'Torch':0.5,
'First Aid Kit':0.5,
'Hand sanitiser':0.5,
'Coolbox':1.5,
'Rubbish bags':1,
'lantern':2.7,
'Eating/cooking utensils':2.5,
'Compass':0.5}
limit = 5
items = list(sorted(v.keys()))# Create model
m = LpProblem("Knapsack Problem", LpMaximize)# Variables
x = LpVariable.dicts('x', items, lowBound=0, upBound=1, cat=LpInteger)# Objective
m += sum(v[i]*x[i] for i in items)# Constraint
m += sum(w[i]*x[i] for i in items) <= limit# Optimize
m.solve()# Print the status of the solved LP
print("Status = %s" % LpStatus[m.status])# Print the value of the variables at the optimum
for i in items:
print("%s = %f" % (x[i].name, x[i].varValue))# Print the value of the objective
print("Objective = %f" % value(m.objective))
输出结果
Status = Optimal
x_Compass = 1.000000
x_Coolbox = 0.000000
x_Eating_cooking_utensils = 0.000000
x_First_Aid_Kit = 1.000000
x_Hand_sanitiser = 1.000000
x_Pillow = 1.000000
x_Rubbish_bags = 1.000000
x_Sleeping_bag = 1.000000
x_Torch = 1.000000
x_lantern = 0.000000
Objective = 39.300000
正如我们在这里看到的,我们应该选择一个指南针,急救箱,洗手液,枕头,垃圾袋,睡袋和手电筒用于露营。所有这些物品的总重量是4.59公斤,这符合我们的约束条件,并使我们的目标函数最大化。
虽然这是一个非常简单的例子,但同样的概念可以应用在众多的实际使用案例中,如生产计划,你需要选择合适的资源来实现利润最大化,订单选择等。
我们刚刚解决的问题在技术上被称为 "整数线性编程",因为变量被限制为整数。好吧,这只是一个简单的二进制0-1整数线性编程。我不会向其他类型发展,因为我现在只想让你理解这个概念。

理论上的理解(图解法)
现在让我们更详细地理解数学概念,以便你能形成一种直观的感觉。
制造商的目标是通过销售家具,包括桌子和椅子来实现收入最大化。制作一张桌子和椅子需要木材和劳动力等资源。假设所有单位都是边生产边销售。要制作一张桌子,我们需要10个单位的木材和4个小时的劳动时间。要制作椅子,我们需要8个单位的木材和6个小时的劳动时间。然而,我们只有200个单位的木材和总共100个小时的劳动时间可用。
桌子的每单位利润:5美元
椅子的单位利润:6美元
为了使收入最大化(假设本例中收入=利润),我们可以继续生产桌子和椅子,但由于木材供应和劳动时间方面的限制,我们不能这样做。让我们以表格的形式总结一下这个问题。
图3:问题制定表(作者的图)
通过表格来表述问题确实有助于澄清一切。
我们需要确定能使利润最大化的最佳桌椅数量。这将有助于制造商的决策过程。
拟定问题
第1步:决策变量(在给定的约束条件下,我们需要生产多少张桌子和椅子来实现利润最大化?)

作者:这就是我们需要确定的内容
第二步:目标函数

我们想让这个目标最大化
第三步:限制条件

要满足的约束条件
因为我们有两个变量,X1和X2,我们可以用图形来解决这个问题。
我们已经制定了这个问题。下一步是绘制约束条件。

木制约束条件→获得两点来画直线
从这个例子中可以看出,我们有两个点可以在图形上绘制约束条件1。这两个点将被用来在图形上画一条直线。
我们将对约束条件2做同样的处理。

劳动约束→得到两个点来画直线
现在我们有了约束1和约束2的点,我们可以把它们绘制在图上。

图4:将约束条件绘制在图上。阴影部分显示了可行区域(图由作者提供)
在这个图上,我们可以看到一个可行的区域,这两个约束都得到了满足。我们不能超出/超过它,因为它不符合我们的约束。可行区域就是约束线两边有效的区域。
现在我们必须确定最佳解决方案的目标函数值。换句话说,我们需要在这个图上找到利润最大化的最佳点。
目标函数回顾

为了达到这个目的,使用这个目标函数,输入Z的任何值(最好从0开始)。然后,对于任何x1,求解x2。对于另一个点,使用不同的x1来求解x2。这将使你得到一条基于你指定的Z值的目标函数线。
同样地,尝试不同的Z值来得到不同的直线方程。
你会注意到,这条直线将与之前的直线平行。
为了找到最吸引人的角落,画出与目标函数线平行的线,接触可行区域的最后一个点。
如本例中,红色的点是最有吸引力的角落,Z的值是最大的。
因此,目标函数的最大值发生在极端点(14.29,7.14),Z值为114.29。这是我们能从14张桌子和7把椅子中获得的最大利润。
总结
在这篇文章中,我们通过解决两个重要问题看到了运筹学的重要性。这方面有大量的应用。当我们把预测分析与运筹学结合起来时,我们有效地把数据科学转化为决策科学,使管理层能够做出可操作的决策。
同样重要的是要注意,当我们加入大量的约束条件时,解决方案可能变得不可行。即使我们有一个可行的区域,当这些区域没有边界时,也会很困难。此外,同一问题的多个最优解也是可能的。因此,仔细制定问题是至关重要的。
网友评论