最近学习到模拟退火算法,遇到工作指派问题,但是查到网上的c++代码并不能解决问题,于是在它的基础上进行修改,完美解决了4工作4工人工作指派问题。
n个工作可以由n个工人分别完成。工人i完成工作j的时间为dij ,问如何安排可使总的工作时间达到最小。试按SA思想设计一个该问题的求解算法,并利用计算机语言实现设计的算法。
(1)假设有四个工人,四个工作,每个工人完成每项工作的时间如下表所示:
|
1 |
2 |
3 |
4 |
1 |
10 |
9 |
8 |
7 |
2 |
3 |
4 |
5 |
6 |
3 |
2 |
1 |
1 |
2 |
4 |
4 |
3 |
5 |
6 |
于是工人的工作时间构成了一个4×4的矩阵D[i][j],称为工作时间矩阵。
(2)这四个工作由四个工人分别完成,意思是每个工人只能做其中一个工作,一个工作只需由一个工人完成。例如1->3->2->4表示第1,3,2