分配问题
来源:互联网 发布:西南大大数据培训机构 编辑:程序博客网 时间: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。优化目标定义为距离与变量矩阵的积。
另一个例子,人的分布是随机的:
另一个有趣的例子:
- 分配问题
- 分配问题
- 分配问题
- 分配问题
- Weblogic内存分配问题
- 宿舍分配问题
- 关于内存分配问题
- C++内存分配问题
- C++内存分配问题
- IQ 分配问题
- 塔木德遗产分配问题
- tomact内存分配问题
- 工作分配问题
- ACM 任务分配问题
- 变量分配空间问题
- 常见指针分配问题
- 随机分配问题
- 内存分配问题
- php隔两行换色
- android shape实现控件圆角,背景,边框等属性
- Different Ways to Add Parentheses——Difficulty:Medium
- Python3读写文本
- 杭电1005—Number Sequence
- 分配问题
- 简单表格的制作
- Python练习实例20
- TODO:macOS编译PHP7.1
- App签名打包总结
- 让你的vs工程单步调试进入opencv源码
- 常用字符串操作函数
- js 中{},[]中括号,大括号使用详解
- C++类模板template