Кроме обучения алгоритмам и оптимизации нужно помочь студентам работать и думать, как инженеры
Студенты-инженеры способны решать гораздо более сложные задачи, чем мы думаем.
Я обнаружил это преподавая курс «Алгоритмы и оптимизация», где студенты решали задачи оптимизации, в которых необходимо было принять решения на какие компромиссы пойти, чтобы удовлетворить противоречивым требованиям и прийти к жизнеспособному решению.
Хотя назначаемые мной задачи легко понять - например, помочь фермеру решить, какие культуры посадить для получения максимальной прибыли, - их сложно решить аналитически без соответствующего набора инструментов. Студентам требуется объединить понятия, усвоенные в первый год обучения, с навыками программирования для разработки математического решения и преобразования его в код или модель с последующим отображением, и интерпретацией результата.
MATLAB и Simulink позволяют студентам решать задачи такой сложности за один семестр. Вместо того, чтобы сосредотачиваться на деталях реализации нижнего уровня - уровня компонентов, они могут использовать встроенные функции и блоки для разработки решений, которые на Python, C или C# занимают до 10 раз больше времени.
Введение в программирование в MATLAB
Как правило, студенты, изучающие алгоритмы и оптимизацию, уже прошли вводный курс программирования, но для большинства из них MATLAB ещё неизвестен.
Для знакомства с языком MATLAB и средой разработки, в первом задании студентам можно поставить задачу создания простого пользовательского интерфейса. (рисунок 1).
Рисунок 1. Графический интерфейс пользователя, созданный студентом в MATLAB
Интерфейс включает в себя анимированные разноцветные графики, которые интересней для студентов, чем статические диаграммы. В комплексе эта задача помогает студентам обрести уверенность в своих способностях и создать приложение, следуя простому процессу, которое в начале могло казаться очень сложным.
Первое важное задание — это задача нелинейной оптимизации, которую нужно решить в MATLAB. Все три года, в течение которых я преподавал курс, я сталкивался с разными проблемами. В этом году это была проблема сельского хозяйства: ученики должны были определить, сколько земли следует засадить каждой из двух культур, чтобы максимизировать прибыль, учитывая предполагаемое количество осадков и затраты на электроэнергию для работы ирригационных насосов. В прошлом году студентам пришлось оптимизировать систему управления энергопотреблением, чтобы найти оптимальное сочетание энергосистемы, солнечной и ветровой энергии. За год до этого я дал им сценарий добычи, в котором они должны были найти самый дешевый метод эксплуатации и вентиляции шахты с комбинацией дизельного и электрического оборудования для погрузки-разгрузки и вентиляции.
Каждый из этих сценариев теоретически легко понять, но ни один не имеет очевидного математического решения.
Студенты сначала переводят словесное описание проблемы в систему уравнений. Затем они должны определить, какие методы нелинейного программирования использовать и применить их для решения задачи в MATLAB.
Наконец, они генерируют решение проблемы нелинейной оптимизации и переводят его в Simulink, чтобы визуализировать, как это решение будет работать в различных практических сценариях.
Динамические оптимизации в Simulink
В следующих заданиях студенты изучают, как решать задачи динамической оптимизации в Simulink, изменяя первоначальные решения в MATLAB для обработки параметров, которые меняются со временем.
Например, в задаче о сельском хозяйстве вместо того, чтобы использовать постоянную норму осадков, основанную на средних показателях сезона, ученики должны учитывать количество осадков, которые меняются день ото дня.
Они разрабатывают модели Simulink, в которых имитируются осадки, скорость ветра, облачный покров и другие переменные окружающей среды с использованием случайно сгенерированных значений в пределах заранее определенного диапазона (рисунок 2).
Рисунок 2. Модель Simulink, созданная студентом для оптимизации выбора сельскохозяйственных культур.
Они включают код MATLAB из прошлых заданий как определяемые пользователем функциональные блоки, а затем уточняют код и модель, пока не найдут решение, которое работает для различных наборов динамических условий.
Для разработки моделей, студенты должны сначала построить отдельные компоненты, а затем выяснить, как объединить их в целостную систему. Я советую им тестировать модели чаще и как можно раньше, а не ждать, пока будет собрана вся система.
Я также показываю им, как они могут использовать блоки Simulink Scope для построения сигналов в любой точке своей модели и отслеживания ошибок в системе, как это сделал бы инженер при отладке реальной системы (рис. 3).
Рисунок 3. Примеры выходных данных блока Simulink Scope.
Работаем как инженеры
Хотя я призываю студентов выполнять большую часть заключительного задания самостоятельно, я также разрешаю им работать в группах.
Даже если они решают работать вместе, каждый студент должен сдать свое собственное задание и быть в состоянии объяснить мне, как работает каждая строка кода MATLAB.
Я говорю своим студентам, что вполне приемлемо включать частичные решения других, если вы полностью понимаете эти решения и то, как они работают.
Некоторые преподаватели не согласны позволять студентам включать работу своих одноклассников в свою, но я считаю, что мой подход отражает то, как инженеры работают в реальном мире - у большинства инженеров нет ни времени, ни ресурсов для решения каждой проблемы с нуля.
MATLAB для продвинутых проектов
Недавно я начал преподавать курс для четверокурсников по анализу данных, в котором студенты используют MATLAB для выполнения более сложных заданий. Эти задания основаны на моих собственных исследованиях и диссертациях, а также написанных моими аспирантами. Я разбил анализ данных на три этапа.
На первом этапе студенты выполняют простые статистические исследования и визуализацию данных.
Затем они применяют статистические измерения, чтобы увидеть, как различные подмножества данных отличаются друг от друга. Наконец, они создают модели регрессии, нейронной сети и дерева решений и используют их для прогнозирования на основе данных.
Студентам было необходимо закончить выполнение их экзаменационных заданий в течение 6 недель.
В первые несколько недель один студент приходил ко мне несколько раз в рабочее время с вопросами о том, что делать дальше.
Потом я узнал, что этот студент поделился знаниями, полученными от меня, со своими однокурсниками - он действовал как своего рода старший инженер или ведущий инженер, работающий с младшими инженерами над реальным проектом.
Почти каждый ученик курса выполнил свои задания и сделал это хорошо.
Эти результаты ещё раз убедили меня и доказали студентам, что основной принцип работы современных инженеров - продумать и решить сложные инженерные проблемы, если у вас есть правильные инструменты и вы знаете, как их использовать.
Автор Элвин Хоффман, Северо-Западный университет
Комментарии
Ну, Санчо, разочаровал: я-то думал, что это описание наших студентов и преподавателей. А оказалось, некий Элвин Хоффман (молодец, конечно).
Предупреждать надо в начале.
Зарубежный опыт может быть тоже полезен))
Кто спорит? Что бы мы без Матлаба делали?