用Octave计算指派问题
广告
{{v.name}}
指派问题是运筹学中线性规划的经典特例,属于运输问题的特殊形式,核心解决n个任务分配给n个执行者(人/机器/资源)的最优匹配问题,目标是在每个执行者仅做一个任务、每个任务仅由一个执行者完成的约束下,使总成本最小(也可拓展为总利润最大)。
指派问题的典型特征:产地数m=销地数n,且每个产地的产量、每个销地的销量均为1,调运量\(x_{ij}\)仅取0或1(\(x_{ij}=1\)表示将第j个任务指派给第i个执行者,\(x_{ij}=0\)则相反)。
相比通用线性规划,指派问题可通过匈牙利法(Kuhn-Munkres算法)高效求解,时间复杂度远低于单纯形法,是手工计算和编程实现的首选方法。
一、指派问题的核心要素与数学模型
1. 基本假设
- 执行者数=任务数=\(n\),一一匹配;
- 每个执行者完成每个任务的单位成本(或单位利润)已知且确定;
- 每个执行者仅能完成1个任务,每个任务仅能被1个执行者完成。
2. 核心要素
设\(n\)个执行者为\(A_1,A_2,...,A_n\),\(n\)个任务为\(B_1,B_2,...,B_n\);
\(c_{ij}\)表示执行者\(A_i\)完成任务\(B_j\)的单位成本(若为最大化问题,\(c_{ij}\)为单位利润);
决策变量\(x_{ij} = \begin{cases}1, & \text{指派}A_i\text{完成}B_j \\ 0, & \text{其他}\end{cases}\)。
3. 数学模型(最小化成本,最常用)
\( \begin{cases} \min Z = \sum_{i=1}^n \sum_{j=1}^n c_{ij} x_{ij} \quad \text{(目标:总成本最小)} \\ \sum_{j=1}^n x_{ij} = 1 \quad (i=1,2,...,n) \quad \text{(每个执行者仅做1个任务)} \\ \sum_{i=1}^n x_{ij} = 1 \quad (j=1,2,...,n) \quad \text{(每个任务仅被1个执行者完成)} \\ x_{ij} \in \{0,1\} \quad \text{(0-1约束)} \end{cases} \)
4. 成本矩阵
将单位成本\(c_{ij}\)整理为n阶方阵(行=执行者,列=任务),形式如下:
\( C = \begin{bmatrix} c_{11} & c_{12} & ... & c_{1n} \\ c_{21} & c_{22} & ... & c_{2n} \\ ... & ... & ... & ... \\ c_{n1} & c_{n2} & ... & c_{nn} \end{bmatrix} \)
若为最大化利润问题,需先将利润矩阵转化为成本矩阵。
友链