2. 业务问题结构化与变量识别

把一段业务叙述变成可计算的数学模型,中间最关键的一步不是套公式,而是结构化:把模糊的业务语言翻译成“目标—约束—变量—参数”四类要素,并写成一份别人能读懂、自己能复算的问题陈述文档。本节围绕这一转换过程展开,重点讲清楚拆解场景的方法、变量与参数的区分标准,以及如何落成一份可交付的问题陈述。

一、从业务叙述到结构化要素

业务方给出的原始描述通常带有大量背景、情绪和隐含假设,例如“最近华东仓经常爆仓,希望降低仓储成本,但客户投诉也变多了”。这句话里至少藏着三个不同层次的信息:现象(爆仓、投诉上升)、目标(降成本)、以及未被说出的约束(服务水平不能继续恶化)。结构化的第一步,就是把这些信息按四类要素归位。

  • 决策目标:模型要优化或判断的对象,必须可量化,并明确方向(最小化成本、最大化满足率等)。
  • 约束条件:决策不能突破的边界,包括资源上限、服务水平下限、法规与业务规则。
  • 决策变量:由模型求解、可以由决策者主动选择其取值的量。
  • 参数:在本次决策期内视为已知或给定的量,不随决策改变。

这里最容易出错的是变量与参数的混淆。判断标准只有一条:这个量是否由我们的决策决定。例如在仓网规划中,“是否启用某仓库”是 0-1 决策变量,而该仓库的固定租金是参数;但如果租金可以谈判并作为决策内容,它就升级为变量。同一个量在不同问题边界下身份可能不同,因此必须在文档中写明“在本问题中视为参数”的理由。

二、界定目标与约束的实操方法

目标界定要避免“既要又要”的伪目标。可行做法是先列出全部诉求,再区分“必须满足”和“希望优化”:前者进入约束,后者进入目标。若存在多个优化诉求,可采用加权、分层(先保服务水平再降成本)或帕累托分析处理,并在文档中说明取舍逻辑。

约束的梳理建议按来源分类:物理约束(仓库容量、车辆载重)、资源约束(预算、人力工时)、业务规则约束(最小起订量、区域配送时限)、逻辑约束(选址与配送的关联关系)。每一条约束都应写成可检验的不等式或逻辑表达式,并标注数据来源,避免出现“大致不能超过”这类无法验证的表述。

判断一条约束是否必要,可以问:如果去掉它,求出的解在现实中会不会不可执行?会,则保留;不会,则它可能只是偏好,应放入目标而非约束。

三、变量识别与粒度控制

变量识别要回答三个问题:决策者能控制什么、控制到什么粒度、在什么时间尺度上控制。以某区域配送中心为例,若决策是“各线路每日发车频次”,则变量为线路×日期的整数变量;若决策是“是否在某城市建设前置仓”,则为城市级的 0-1 变量。粒度越细,模型越贴近现实,但数据需求和求解难度也同步上升,因此需要与可用数据匹配。

下图展示了一个配送网络优化问题中,目标、约束、变量与参数之间的结构化关系,可作为整理同类问题的参照框架。

配送网络优化问题的结构化要素关系 决策目标 最小化 总仓配成本 = 仓储固定费 + 运输费 (服务水平以约束形式保障) 约束条件 需求全部满足 仓库容量上限 配送时效 ≤ 24 小时 决策变量 y_i ∈ {0,1}:是否启用仓 i x_ij ≥ 0:仓 i 发往区 j 的量 (由模型求解确定) 参数(给定) d_j:区域 j 需求量 f_i:仓 i 固定成本 c_ij:单位运输成本 Cap_i:仓 i 容量 问题陈述要点: 目标函数方向明确 · 每条约束可检验且标注数据来源 · 变量与参数身份写明理由 · 决策周期与粒度一致

四、形成问题陈述文档

结构化结果必须固化为文档,否则讨论中极易反复。一份可用的问題陈述通常包含:业务背景与决策周期、目标函数及其方向、约束清单(含表达式与数据来源)、变量定义表(符号、含义、类型、取值范围)、参数表(符号、取值、单位、来源与更新频率)、以及明确写出的假设与边界。假设部分尤其重要,例如“需求在决策期内视为确定值”“运输成本与距离线性相关”,这些假设决定了模型结论的适用范围。

下面给出一个可直接套用的变量与参数定义片段,以配送网络问题为例:

集合:I = 候选仓库集合;J = 需求区域集合
决策变量:
  y_i ∈ {0,1}   是否启用仓库 i(i ∈ I)
  x_ij ≥ 0      仓库 i 向区域 j 的配送量(i ∈ I, j ∈ J)
参数:
  d_j           区域 j 的需求量(件/日,来源:近 3 个月出库均值)
  f_i           仓库 i 的日固定成本(元/日,来源:租赁合同摊销)
  c_ij          单位运输成本(元/件,来源:承运商报价表)
  Cap_i         仓库 i 日处理能力(件/日,来源:仓容测算)
目标:min  Σ_i f_i·y_i + Σ_i Σ_j c_ij·x_ij
约束:
  Σ_i x_ij = d_j                对每个 j(需求满足)
  Σ_j x_ij ≤ Cap_i·y_i          对每个 i(容量与启用联动)
  x_ij ≤ d_j·y_i                对每个 i,j(未启用仓不可发货)

注意约束 x_ij ≤ d_j·y_i 的作用:它把连续变量与 0-1 变量绑定,保证未启用的仓库不会出现在解中。这类“联动约束”是结构化过程中最容易被遗漏、却直接决定模型是否可执行的部分,写文档时应专门检查。

五、结构化质量的检查

完成初稿后,可用几个问题自检:目标函数中的每一项是否都能对应到参数表里的数据?每条约束是否能用现有数据算出具体数值?每个变量是否真的由决策者控制?假设是否写到了可以被质疑的程度?若某个参数在决策期内会显著波动(如旺季需求),应说明是采用情景分析还是将其改为随机参数,而不是含糊带过。

常见误区:把“提升客户满意度”直接写进目标函数。满意度本身不可直接计算,必须先转化为可观测指标(如订单 24 小时送达率、缺货率),再进入目标或约束,否则模型无法求解,也无法验证。

结构化的产出不是一张漂亮的图,而是一份能让建模者、业务方和数据提供方对齐认识的文档。当目标、约束、变量、参数四类要素各归其位,且每条都带有来源与假设说明时,后续的模型选择、求解与结果解读才有可靠基础。