Skip to content

Repository files navigation

🌾 BelAgroOptimization

BelAgroOptimization - проект на базе Pyomo и SQLAlchemy, реализующий многоуровневую модель оптимизации сельскохозяйственного производства с хранением данных в PostgreSQL.

Проект моделирует работу агропредприятия и позволяет находить оптимальную стратегию распределения ресурсов для максимизации прибыли с возможностью загрузки и выгрузки сценариев через Excel.


📌 Описание

Модель учитывает ключевые элементы сельского хозяйства:

  • 🌱 растениеводство (выбор культур и посевных площадей)
  • 🐄 животноводство (молочное и мясное стадо)
  • 🌾 удобрения и состояние почвы
  • 🌿 кормовую базу (силос, сено, концентраты, пастбище)
  • 💰 экономические показатели (цены, затраты, прибыль)
  • 🌡️ сезонность и погодные условия

Цель модели — максимизация прибыли агропредприятия при заданных ресурсных и технологических ограничениях.


🧠 Математическая постановка

Задача формулируется как задача нелинейной оптимизации с ограничениями:

  • переменные посева культур
  • переменные внесения удобрений
  • переменные поголовья скота
  • нелинейные зависимости урожайности от погоды и удобрений
  • зависимость продуктивности животных от кормления с убывающей отдачей
  • баланс производства и потребления кормов
  • максимизация чистой прибыли

Решатель

  • GLPK

⚙️ Технологии

  • Python 3.10
  • GLPK
  • pydantic
  • pydantic-settings
  • sqlalchemy
  • psycopg-binary
  • alembic
  • pyomo
  • numpy
  • pandas
  • matplotlib
  • ruff
  • loguru

🏗️ Архитектура

┌──────────────────────────────────────────────┐
│ PostgreSQL                                  │
└──────────────────────────────────────────────┘
                    │
                    ▼
┌──────────────────────────────────────────────┐
│ SQLAlchemy ORM + Alembic                    │
└──────────────────────────────────────────────┘
                    │
                    ▼
┌──────────────────────────────────────────────┐
│ Repository Layer (queries.py)               │
└──────────────────────────────────────────────┘
                    │
                    ▼
┌──────────────────────────────────────────────┐
│ ORM → DTO Mapper                            │
└──────────────────────────────────────────────┘
                    │
                    ▼
┌──────────────────────────────────────────────┐
│ Pydantic Schemas                            │
└──────────────────────────────────────────────┘
                    │
                    ▼
┌──────────────────────────────────────────────┐
│ DTO → dict converter                        │
└──────────────────────────────────────────────┘
                    │
                    ▼
┌──────────────────────────────────────────────┐
│ BelarusAgroModel (Pyomo)                    │
└──────────────────────────────────────────────┘
                    │
                    ▼
┌──────────────────────────────────────────────┐
│ GLPK Solver                                  │
└──────────────────────────────────────────────┘

📂 Структура проекта

AgroOptimization/
│
├── app/
│   ├── database/
│   │   ├── models/
│   │   │   ├── crop.py
│   │   │   ├── feed.py
│   │   │   ├── field.py
│   │   │   ├── livestock.py
│   │   │   ├── operation.py
│   │   │   ├── optimization.py
│   │   │   ├── scenario.py
│   │   │   └── weather.py
│   │   │
│   │   ├── base.py
│   │   ├── config.py
│   │   └── engine.py
│   │
│   ├── modules/
│   │   ├── repository/
│   │   │   ├── queries.py
│   │   │   └── mapper.py
│   │   │
│   │   ├── model/
│   │   │   └── opt_model.py
│   │   │
│   │   └── schemas.py
│   │
│   └── main.py
│
├── migrations/
├── requirements.txt
└── README.md

🚀 Развертывание

1. Клонирование репозитория

git clone https://github.com/wittiden/BelAgroOptimization.git   

2. Настройка всех зависимостей

docker compose --profile migrations --profile pgadmin up --build

3. Заполнение базы начальными данными

Выполнить в запущенном pgadmin SQL-скрипт из файла:

script_sql.txt

▶️ Запуск проекта

docker compose up

📊 Результаты оптимизации

После решения модель формирует:

  • оптимальную структуру посевов
  • распределение культур по полям
  • оптимальное поголовье животных
  • баланс кормов
  • уровень кормления животных
  • использование удобрений
  • сезонную продуктивность
  • итоговую прибыль

🧩 Особенности модели

  • ✔ Многоуровневая архитектура
  • ✔ PostgreSQL + SQLAlchemy ORM
  • ✔ Alembic миграции
  • ✔ Поддержка сценариев
  • ✔ Линейная оптимизация
  • ✔ Убывающая отдача кормления
  • ✔ Баланс кормов
  • ✔ Сезонность производства
  • ✔ Валидация через Pydantic
  • ✔ Агротехнические ограничения
  • ✔ Хранение результатов оптимизации
  • ✔ Matplotlib визуализация

About

BelAgroOptimization - проект на базе Pyomo для многоуровневой оптимизации сельскохозяйственного производства. Модель учитывает растениеводство, животноводство, использование удобрений, кормовую базу и экономические параметры предприятия.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages