1 семестр / Лабораторные работы / Лабораторная работа №5 / Задание
.docxТребования для всех вариантов
Каждое решение должно демонстрировать:
Инкапсуляцию (с использованием @property и сеттеров, где уместно).
Наследование (создание иерархии минимум из 2-х классов).
Полиморфизм (переопределение методов, например, __str__, __repr__, calculate()).
Использование магических методов (как минимум __init__, __str__, __repr__).
Композицию или агрегацию (один класс содержит экземпляр другого).
Класс должен быть упакован в отдельный модуль. В основном файле main.py продемонстрировать работу всех возможностей.
Варианты (любой на ваш выбор)
1 Вариант. Моделирование исследовательского эксперимента
Задача: Создайте систему для управления научным экспериментом.
Классы:
Sensor: Базовый класс для датчика. Атрибуты: id, calibration_factor, unit. Метод read_data() возвращает случайное значение (симуляция).
AdvancedSensor(Sensor): Наследует от Sensor. Добавляет атрибуты: precision, last_calibration_date. Переопределяет read_data(), добавляя "шум", зависящий от precision.
Experiment: Класс для эксперимента. Атрибуты: name, start_date, sensor_list (композиция: список объектов Sensor). Методы: add_sensor(), run() - запускает сбор данных со всех датчиков в течение N итераций и сохраняет результаты в файл CSV, get_average_readings().
Доп. задание: Реализуйте класс Calibrator, который может принимать Sensor и выполнять его калибровку (изменять calibration_factor).
2 Вариант. Симулятор финансовых инструментов (для экономики/финансов)
Задача: Создайте простой симулятор портфеля ценных бумаг.
Классы:
FinancialInstrument: Базовый класс. Атрибуты: ticker, current_price. Методы: calculate_risk() (возвращает 0), update_price(new_price).
Stock(FinancialInstrument): Добавляет dividend_yield, sector. Переопределяет calculate_risk() на основе волатильности (условно).
Bond(FinancialInstrument): Добавляет coupon_rate, maturity_date. Переопределяет calculate_risk() на основе кредитного рейтинга (условно).
Portfolio: Атрибуты: owner, instruments (словарь: {ticker: объект}). Методы: add_instrument(), calculate_total_value(), calculate_portfolio_risk() (средневзвешенный риск), show_composition().
Доп. задание: Реализуйте класс Market, который генерирует случайные колебания цен для всех инструментов в портфеле.
3 Вариант. Управление вычислительными задачами в HPC-среде
Задача: Смоделировать систему очередей для вычислительных задач.
Классы:
ComputeTask: Базовый класс. Атрибуты: task_id, required_cores, required_memory_gb, status ("pending", "running", "completed"). Методы: execute() (меняет статус), __str__.
MPITask(ComputeTask): Задача для параллельных вычислений. Добавляет nodes_count. Переопределяет execute().
GPUTask(ComputeTask): Задача для GPU. Добавляет gpu_type. Переопределяет execute().
ComputeQueue: Атрибуты: name, max_cores, max_memory, queue (список задач). Методы: add_task(task) (с проверкой доступности ресурсов), run_next() (запускает первую задачу, которая помещается по ресурсам), show_queue().
Доп. задание: Реализуйте приоритетную очередь на основе required_cores или создайте класс Scheduler, управляющий несколькими очередями.
4 Вариант. Система управления умным лабораторным оборудованием
Задача: Создать систему для удаленного управления приборами.
Классы:
LabDevice: Базовый класс. Атрибуты: device_id, location, power_on (bool). Методы: turn_on(), turn_off(), get_status().
Spectrometer(LabDevice): Добавляет wavelength_range, integration_time. Методы: set_parameters(), acquire_spectrum() (возвращает список случайных чисел).
ThermalChamber(LabDevice): Добавляет target_temperature, humidity. Методы: set_temperature(), start_program(program: list) (программа - список кортежей (время, температура)).
LabController: Атрибут devices (словарь устройств). Методы: add_device(), turn_on_all(), find_device_by_location(), execute_protocol(protocol_name) - заранее заданная последовательность команд для устройств.
Доп. задание: Добавьте логирование всех действий устройств в файл.
5 Вариант. Модель представления научных публикаций и цитирования
Задача: Создать систему для анализа публикаций исследователя.
Классы:
Publication: Базовый класс. Атрибуты: title, authors, year, journal, doi. Методы: __str__, format_apa().
Article(Publication): Добавляет volume, issue, pages.
ConferencePaper(Publication): Добавляет conference_name, proceedings.
Researcher: Атрибуты: name, publications (список объектов Publication). Методы: add_publication(), get_publications_by_year(), calculate_h_index() (упрощенная симуляция: если у публикации 5+ цитат, она учитывается).
Доп. задание: Создайте класс CitationGraph, который визуализирует связи между публикациями исследователей (можно выводить в консоль матрицу смежности).
6 Вариант. Менеджер конфигураций для машинного обучения
Задача: Создать классы для описания экспериментов ML.
Классы:
ModelConfig: Базовый класс конфигурации модели. Атрибуты: model_name, input_size, output_size.
NNModelConfig(ModelConfig): Для нейронных сетей. Добавляет hidden_layers (список), activation, dropout_rate.
TrainingConfig: Класс для конфигурации обучения. Атрибуты: epochs, batch_size, optimizer, learning_rate.
Experiment: Атрибуты: exp_id, model_config (объект ModelConfig), training_config (объект TrainingConfig), results (dict). Методы: run() (симуляция обучения, заполняет results), save_config(path), load_config(path).
Доп. задание: Реализуйте метод to_dict() и from_dict() для классов конфигураций для сериализации в JSON.
