Я снова вернулся с моей продолжающейся сагой вопросов распределения студенческих проектов. Благодаря Морон (который не соответствует его тезке) у меня есть немного направления для оценки части моего проекта.
Следуя идее проблемы назначения и венгерского алгоритма, я хотел бы выразить свои данные в виде файла .csv, который в конечном итоге выглядел бы так в форме электронной таблицы. Это основано на структуре, которую я видел здесь .
| | Project 1 | Project 2 | Project 3 |
|----------|-----------|-----------|-----------|
|Student1 | | 2 | 1 |
|----------|-----------|-----------|-----------|
|Student2 | 1 | 2 | 3 |
|----------|-----------|-----------|-----------|
|Student3 | 1 | 3 | 2 |
|----------|-----------|-----------|-----------|
Чтобы сделать его менее загадочным: строки - это студенты / агенты, а столбцы - проекты / задачи. Очевидно, ОДИН проект может быть назначен ОДНОМУ студенту. Короче говоря, это то, чем занимается мой проект. Поля представляют веса предпочтений, которые студенты придают проектам (от 1 до 10). Если он не заполнен, этот студент не хочет этот проект, и нет никаких шансов, что ему / ей будет назначен такой проект.
В любом случае, мои данные хранятся в словарях. Конкретно для студентов и проектов словари такие, что:
students[student_id] = Student(student_id, student_name, alloc_proj, alloc_proj_rank, preferences)
where preferences is in the form of a dictionary such that
preferences[rank] = {project_id}
и
projects[project_id] = Project(project_id, project_name)
Я знаю, что sorted(students.keys())
даст мне отсортированный список всех идентификаторов студентов, которые будут заполнять метки строк, а sorted(projects.keys())
даст мне список, который мне нужен для заполнения меток столбцов. Таким образом, для каждого студента, я бы зашел в их словарь предпочтений и сопоставил соответствующие проекты с рангами Я могу сделать это много.
Я не могу понять, как создать файл .csv. Любая помощь, указатели или хорошие учебники будут высоко оценены.