Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
28.09.2026
Размер:
22 Кб
Скачать
☆

Требования для всех вариантов

Каждое решение должно демонстрировать:

  1. Инкапсуляцию (с использованием @property и сеттеров, где уместно).

  2. Наследование (создание иерархии минимум из 2-х классов).

  3. Полиморфизм (переопределение методов, например, __str__, __repr__, calculate()).

  4. Использование магических методов (как минимум __init__, __str__, __repr__).

  5. Композицию или агрегацию (один класс содержит экземпляр другого).

  6. Класс должен быть упакован в отдельный модуль. В основном файле main.py продемонстрировать работу всех возможностей.

Shape1

Варианты (любой на ваш выбор)

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.

Соседние файлы в папке Лабораторная работа №5