我需要将随机论文分配给班级的学生,但我有以下限制:
- 每个学生应分配两篇论文。
- 每篇论文应分配给(大约)相同数量的学生。
有没有一种优雅的方法来生成具有此属性的矩阵?即它是洗牌的,但行和列的总和是恒定的?举例说明:
Student A 1 0 0 1 1 0 | 3
Student B 1 0 1 0 0 1 | 3
Student C 0 1 1 0 1 0 | 3
Student D 0 1 0 1 0 1 | 3
----------------
2 2 2 2 2 2
我想首先用正确的行/列总和构建一个“初始矩阵”,然后随机排列首先是行,然后是列,但是如何生成这个初始矩阵?这里的问题是我将在(例如)以下替代方案之间进行选择,并且有两个学生分配了相同的论文(在左侧设置中)这一事实不会通过行/列改组而改变:
INITIAL (MA): OR (MB):
A 1 1 1 0 0 0 || 1 1 1 0 0 0
B 1 1 1 0 0 0 || 0 1 1 1 0 0
C 0 0 0 1 1 1 || 0 0 0 1 1 1
D 0 0 0 1 1 1 || 1 0 0 0 1 1
我知道我可以想出一些快速/肮脏的东西,并在必要时进行调整,但这似乎是一个有趣的练习。