分配问题
考虑这样一个问题:
有9个人和9个座位,如何给这些人分配座位能使所有人走过的距离之和最短?
这个例子就是一个典型的分配问题,它的解如下图所示(红点:座位,黑点:人,灰点:人的初始位置)。当然,人和座位的位置可以是任意的,这里我们只展示了一种规则的情况:座位呈网格排列,人在座位四周呈圆周排列。
求解分配问题可以有很多思路,我们介绍2种方法:
1. 最小代价流
最小代价流是图论中的一种优化问题,我们还是用一个例子解释它的思想:假设双11期间,北京的快递公司有一批货物要用汽车发送到南京,这时他面临好几种选择,可以选择不同的中间城市和路线,不同路线对应的油费和高速费也不同。如果你是快递公司的经理,你如何选择路线并分配运输量才能使所有货物都能到达南京,而且花费最少呢?
“最小代价流”中的“最小代价”就是指“花费最少”,“流”指的是货物像水流一样流过运输网络到达目的地,所以叫物流嘛!水流不必只走一条路线,而是可以同时流经多个路线。
如果能将分配问题转变为最小代价流问题,就可以用图论中的方法求解了。这时我们需要做一下变换才能,首先要建立一个“图”(这里是指数学概念),将所有的“人”和“座位”都视为图的节点,任何一个“人”和一个“座位”节点之间都建立一条边,边的代价就是人到座位的距离,同时添加两个虚拟的节点:起点和终点。起点连接所有“人”的节点,终点连接所有“座位”的节点。不过,与起点和终点相连的边的代价都是0。
2. 整数规划
整数规划是数学优化的一个分支,专门研究优化变量只能取整数的问题。这里我们需要将分配问题转化成整数规划的格式,才能用整数规划的方法求解。首先,考虑一个9X9的矩阵,这个矩阵的每个元素都只能取2个值中的一个:0或者1。假设第3行第2列的元素(3,2)值为1,表示第3个人坐到第2个座位。一个人只能占据一个座位,同时一个座位只能坐一个人。用矩阵表示就是:每行只能有一个元素取1,同理每列也只能有一个元素取1。优化目标定义为距离与变量矩阵的积。
另一个例子,人的分布是随机的:

另一个有趣的例子:


浙公网安备 33010602011771号