分配问题

来源:互联网 发布:西南大大数据培训机构 编辑:程序博客网 时间:2024/04/30 12:33

  考虑这样一个问题:
  有9个人和9个座位,如何给这些人分配座位能使所有人走过的距离之和最短?
  这个例子就是一个典型的分配问题,它的解如下图所示(黑点:人,红点:座位,灰点:人的初始位置)。当然,人和座位的位置可以是任意的,这里我们只展示了一种特殊的情况:座位呈网格排列,人在座位四周呈圆周排列。


  求解分配问题有很多思路,下面我们介绍2种方法:
1. 最小代价流
  最小代价流是图论中的一种优化问题,我们还是用一个例子解释它的思想:假设双11期间,北京的快递公司有一批货物要用汽车发送到南京,这时他面临好几种选择,可以选择不同的中间城市和路线,不同路线对应的油费和高速费也不同。如果你是快递公司的经理,你如何选择路线并分配运输量才能使所有货物都能到达南京,而且花费最少呢?

  “最小代价流”中的“最小代价”就是指“花费最少”,“流”指的是货物像水流一样流过运输网络到达目的地,所以叫物流嘛!水流不必只走一条路线,而是可以分开流经多个路线。
  如果能将分配问题转变为最小代价流问题,就可以用图论中的方法求解了。这时我们需要做一下变换才能,首先要建立一个“图”(这里是指数学概念),将所有的“人”和“座位”都视为图的节点,任何一个“人”和一个“座位”节点之间都建立一条边,边的代价就是人到座位的距离,同时添加两个虚拟的节点:起点和终点。起点连接所有“人”的节点,终点连接所有“座位”的节点。不过,与起点和终点相连的边的代价都是0。

2. 整数规划
  整数规划是数学优化的一个分支,专门研究优化变量只能取整数的问题。这里我们需要将分配问题转化成整数规划的格式,才能用整数规划的方法求解。首先,考虑一个9X9的矩阵,这个矩阵的每个元素都只能取2个值中的一个:0或者1。假设第3行第2列的元素(3,2)值为1,表示第3个人坐到第2个座位。一个人只能占据一个座位,同时一个座位只能坐一个人。用矩阵表示就是:每行只能有一个元素取1,同理每列也只能有一个元素取1。优化目标定义为距离与变量矩阵的积。

  另一个例子,人的分布是随机的:

   另一个有趣的例子:

0 0
原创粉丝点击