Я пытаюсь реализовать приложение, которое назначает студентов в l лабораторий в g лабораторных группах.Ограничения:
1: студенты должны работать с новыми студентами для каждой лаборатории.2: все студенты должны быть руководителями лаборатории один раз.
2 не может быть решен, если ученики не могут быть разделены поровну на группы.Поэтому приемлемо, если «странные» ученики никогда не станут руководителями лаборатории.
Я испробовал два подхода, но пока не доволен .:
Поиск по Табу, который решает 1, но имеет проблемы с решением 2 (я на самом деле сначала решаю 1, а затем пытаюсь решить 2, что может быть неправильным подходом, любые предложения)
Простое решение, где я делюучащиеся в #labs в массиве [0..6] [7..14] [15..21], а затем поверните (с 0,1,2 дюйма) и транспонируйте матрицу, повторите это для #labs разс увеличенным вращением (1,2,4) и (2,4,6).Для 21 студента в 3 лабораториях с 7 лабораторными группами результат выглядит следующим образом:
- лабораторная работа 1: [0, 7, 14], [1, 8, 15], [2, 9,16], [3, 10, 17], [4, 11, 18], [5, 12, 19], [6, 13, 20]
- lab 2: [6,12, 18], [0, 13, 19], [1, 7, 20], [2, 8, 14], [3, 9, 15], [4, 10, 16], [5, 11, 17]
- lab 3: [5, 10, 15], [6, 11, 16], [0, 12, 17], [1, 13, 18], [2, 7, 19], [3,8, 20], [4, 9, 14]
руководители лабораторий - это первая колонка для лаборатории 1, вторая для лаборатории 2 ...
Это решение работает достойно, но, например, не подходит для 12 студентов в 3 лабораториях или 150 студентов в 6 лабораториях.Любые предложения?
2, кажется, обрабатывает такое же количество случаев или комбинаций, и молниеносно по сравнению с 1. Может быть, я должен получить благородную цену: -)