题目简述
n 个人分配给 m 个工作岗位 (n⩾m),每个岗位 1 个人。已知第每个人在每个岗位上的效率,求最佳分配方案使得所有人的效率总和最大。
设立变量
设立变量 xi,j,1⩽i⩽n,1⩽j⩽m,xi,j=0或1。 xi,j=1 表示第 i 个人做第 j 个工作,xi,j=0 则表示第 i 个人不做第 j 个工作。
设立变量 ci,j,1⩽i⩽n,1⩽j⩽m。ci,j 表示第 i 个人在第 j 个上的效率。
目标函数
zmax(xi,j)=∑i=1n∑j=1mci,j×xi,j
一个人的岗位选择中为 1 的那个是他选择的岗位,将总和加上他在这个岗位工作的效率。如果是 0 就不加了。目标函数就是求 z(xi,j) 的最大值。
限制条件
-
xi,j=0或1(取值范围)
-
∑i=1nxi,j=1,1⩽j⩽m(每个岗位有且仅有一个人)
-
∑j=1mxi,j⩽1,1⩽i⩽n(每个人最多参与一个岗位)
模型求解
- 生成数据
先假设 n=8,m=6,然后使用 Excel 随机生成 ci,j 的值,数据范围为 [0,10)。 xi,j 也是一张 n×m 的表格。


- 目标函数
随意带入 xi,j 的值,将 z(xi,j) 的值用公式算出。

- 限制条件
将限制条件相关的值用公式算出,并且加入 xi,j 为二进制的约束。

- 模型求解
将所有变量和限制条件加入,使用 Excel 求出最优 xi,j 和对应的 zmax(xi,j)。

最终求得 zmax(xi,j)=57.1,xi,j 如上图所示。