python - 最大化不同值的数量以避免学生作弊
问题描述
所以今年秋天我要参加一次家庭考试。为了避免学生互相复制答案,我将随机化每个学生给出的值。
我想最大化考试的不同之处。
例如,如果我每次两个学生得到相同的变体/变量时计算 1,否则为 0,我想为我的学生人数最小化这个总和。
可以在下面找到一个玩具示例。请注意,我的考试值要复杂得多,并且相互依赖。有没有比简单地迭代值更好的方法?
我想过做类似的事情
a = random.shuffe(range(4, 11))
然后只为每个候选者迭代 a,但是当一个变量有超过 20 个变量并且不确定依赖关系从哪里开始时,很难找到一个起点。
from random import randint, randrange
import itertools
def exam_values():
a = randint(4, 10)
b = randrange(900, 1000, 25)
c = randrange(b, 1000, a)
d = randrange(a, c, 200)
return a, b, c, d
def compare_students(A, B):
return sum(1 if a == b else 0 for a, b in zip(A, B))
def compare_students_in_group(group):
total = 0
for pair in itertools.product(group, repeat=2):
total += compare_students(*pair)
return total
def optimize_students(students, samples=10 ** 4):
best_group = [exam_values() for _ in students]
best_group_score = compare_students_in_group(best_group)
for _ in range(samples):
group = [exam_values() for _ in students]
group_score = compare_students_in_group(group)
if group_score < best_group_score:
print(group)
print(best_group_score)
best_group = group
best_group_score = group_score
return best_group
if __name__ == "__main__":
students = list(range(100))
samples = 10 ** 4
optimize_students(students, samples)
解决方案
如果您a..z
对某些问题有变体,而仅对a..d
其他问题有变体,我认为您能做的最好的事情就是按变体数量对问题进行排序,然后首先将测试/学生分配给这些问题。然后填写下一个最多样化的。等等。
如果您必须为 7 名学生生成测试,其中 4 个问题有不同的答案:Q1: a..d
、Q2: a..c
、Q3: a..b
,并且仅a
针对 Q4。我认为最多样化的测试集看起来像
a a a a
b b b a
c c a a
d a b a
a b a a
b c b a
c a a a
推荐阅读
- javascript - '400 - Bad Request' when sending GET request with Node.js/got library
- reactjs - ReactJS 表单输入 - 无法在验证函数中获取“const”变量
- javascript - "Module not found: can't resolve..." with React app
- node.js - 在没有多部分中间件的情况下正确解析 node/express 中的 FormData 文件?
- html - 水平对齐图像时如何使图像之间的空间为零?
- python - 在pycharm上导入cv2
- c# - 如何将布尔正文发送到 HttpClient.PutAsync 或 HttpClient.PostAsync?
- r - 如何计算多列之间的成对差异?
- mysql - 如何减少被扫描的行数?
- c# - GetEnumerator movenext System.NullReferenceException