1、(必做)任务分配问题。设有 4 项任务 B1、B2、B3、B4,派 4 个人 A1、
A2、A3、A4 去完成。每个人都可以承担 4 项任务中的任何一项,但所消耗的资金不同。设 Ai 完成 Bj 所需资金为。问如何分配任务,使总费用最少?
假定每个数据具体的数值如表 2 所示。其中列表示任务 Bj,行表示人员
Ai,表格中的每个数据表示 Ai 完成 Bj 所需资金。
要求:
(1)查阅资料,解释什么是最优化问题?最优化问题包含哪些概念?哪些
问题属于最优化问题?通常采用什么方法求解最优化问题?3
2)分析问题,建立相应的数学模型。要求给出数学建模的主要步骤,给
出所有变量的定义、目标函数和约束条件。说明你采用的是什么建模方法。
3)利用现有的数学知识,你认为一共有多少种可能的情况?试列表给出
所有可能,并求出最佳分配方案,此时总费用为多少?
提示:
① 本题涉及最优化问题和穷举法等知识。穷举法(枚举法,Enumeration)
就是按问题本身的性质,通过多重循环一一列举出该问题所有可能的解(不能遗
漏,也不能重复),并在逐一列举的过程中,检验每个可能的解是否是问题的真
正解,若是,则采用这个解,否则抛弃它。
② 仔细阅读教材【案例 2.7】“学生选课”,体会该案例是如何进行模型假设
和模型建立的。
③ 分配问题也称为指派问题,它是典型的最优化问题。一般是引入一个 0-1
变量,=1 表示指派 Ai 完成任务 Bj;=0 表示不指派 Ai 去完成任务 Bj。
然后根据题意写出目标函数和约束条件,再选取合适的方法求解。
除了采用穷举法求解,还可以采用匈牙利算法求解。匈牙利算法由匈牙利数
学家 Edmonds 于 1965 年提出,因而得名。利用该算法求解任务分配问题,简单
易行。
或者采用组合问题中的分支限界法求解。
④ 根据题意,约束条件可以用文字描述为:某项任务只能由 4 个人中的一
个来完成;每个人只能承担 4 项任务中的一项。将它们表达为与有关的两个
等式即可。
答:(1)最优化问题
最优化问题的一般提法是要选择一组参数(变量),在满足一系列有关的限制条件(约束)下,使设计指标(目标)达到最优值。换言之,最优化问题就可以定义为: 在给定的约束条件下, 选择最优的参数和方案,来使得目标函数最大化/最小化的问题。我们高中学的线性规划就是其中一种。
最优化问题包含的主要概念包括:
a.决策变量:直接影响设计指标取值的变量
b.约束条件:影响决策变量取值的一系列限制条件
c.目标函数:设计指标的取值
一般来说,函数优化问题,组合优化问题,线性规划问题和多目标规划问题,可以看为最优化问题。
通过查找资料,了解到解决最优化问题通常采用的方法有:拉格朗日乘子法,在有不等约束时使用KKT条件。牛顿法、最速下降法(梯度法)、模式搜索法(步长加速法)
- 问题分析
我们有以下理想条件
a.可分配人员与可分配任务数量、种类不变
b.任务分配好后不会再出现人员与任务变动情况
C.题目中的对应资金不变
- 模型的准备:通过题干,我们可以清楚地知道每种情况对应的资金,我们只需要确定每个人员对应不同的任务(或者是每个任务对应的人员),而不同情况资金对应也是不同的,显然我们可以用穷举的方法来解决。
- 模型假设:如果利用穷举法的化我们只需要按照一定的顺序,将所有的情况列举出来,而根据高中阶乘的知识,我们一共需要4!=24种。
当然我们还要给它们相应的编号。A1、 A2、A3、A4 四个人分别做B1、B2、B3、B4,中的一个设 Ai 完成 Bj 所需资金为Cij
- 问题求解
方法一
下面利用穷举法写出所有可能,在括号中,前后顺序表示A1、 A2、A3、A4 四个人,阿拉伯数字1,2,3,4表示B1、B2、B3、B4四个任务的安排。
(1,2,3,4)(1,2,4,3)(1,3,2,4)(1,3,4,2)(1,4,2,3)(1,4,3,2)(2,1,3,4)(2,1,4,3)(2,3,1,4)(2,3,4,1)(2,4,1,3)(2,4,3,1)(3,1,2,4)(3,1,4,2)(3,2,1,4)(3,2,4,1)(3,4,1,2)(3,4,2,1)(4,1,2,3)(4,1,3,2)(4,2,1,3)(4,2,3,1)(4,3,1,2)(4,3,2,1)
最佳解决方案为
A1分配任务B4,A2分配任务B1,A3分配任务B2,A4分配任务B3,算得总费用为M=15
方法二
B1 | B2 | B3 | B4 | |
A1 | 6 | 7 | 11 | 2 |
A2 | 4 | 5 | 9 | 8 |
A3 | 3 | 1 | 10 | 4 |
A4 | 5 | 9 | 8 | 2 |
以这个表建立一个矩阵,使用匈牙利算法(每行的所有数字减去该行的最小项
每列的所有数字减去该列的最小项;使用横线或者竖线穿过矩阵中的所有0,并记录达成此目的所需的最少线路总数;如果线路总数等于矩阵的行数或者列数n,那么一种最优的分配是可能的,完成。如果总数小于n,执行下一步;找到线路未覆盖的地方的最小项,存在未覆盖的项的行减去该项,然后将该项添加到覆盖的列中)
最后结果与穷举法一致