BelAgroOptimization - проект на базе Pyomo и SQLAlchemy, реализующий многоуровневую модель оптимизации сельскохозяйственного производства с хранением данных в PostgreSQL.
Проект моделирует работу агропредприятия и позволяет находить оптимальную стратегию распределения ресурсов для максимизации прибыли с возможностью загрузки и выгрузки сценариев через Excel.
Модель учитывает ключевые элементы сельского хозяйства:
- 🌱 растениеводство (выбор культур и посевных площадей)
- 🐄 животноводство (молочное и мясное стадо)
- 🌾 удобрения и состояние почвы
- 🌿 кормовую базу (силос, сено, концентраты, пастбище)
- 💰 экономические показатели (цены, затраты, прибыль)
- 🌡️ сезонность и погодные условия
Цель модели — максимизация прибыли агропредприятия при заданных ресурсных и технологических ограничениях.
Задача формулируется как задача нелинейной оптимизации с ограничениями:
- переменные посева культур
- переменные внесения удобрений
- переменные поголовья скота
- нелинейные зависимости урожайности от погоды и удобрений
- зависимость продуктивности животных от кормления с убывающей отдачей
- баланс производства и потребления кормов
- максимизация чистой прибыли
- IPOPT (нелинейная оптимизация)
- Python 3.14
- Pyomo 6.10+
- IPOPT 3.14+
- SQLAlchemy 2.0+
- PostgreSQL
- Alembic
- Pydantic 2.13+
- pandas
- matplotlib
- loguru
┌──────────────────────────────────────────────┐
│ PostgreSQL │
└──────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ SQLAlchemy ORM + Alembic │
└──────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ Repository Layer (queries.py) │
└──────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ ORM → DTO Mapper │
└──────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ Pydantic Schemas │
└──────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ DTO → dict converter │
└──────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ BelarusAgroModel (Pyomo) │
└──────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ IPOPT 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
git clone https://github.com/your_username/AgroOptimization.git
cd AgroOptimizationconda create -n agro_env python=3.14 -y
conda activate agro_envconda install -c conda-forge ipopt cyipopt -ypip install -r requirements.txtCREATE DATABASE agro_optimization_devНастроить подключение в:
app/database/config.py
или через переменные окружения.
alembic upgrade headВыполнить SQL-скрипт:
seed.sql
conda activate agro_env
python -m app.mainПосле решения модель формирует:
- оптимальную структуру посевов
- распределение культур по полям
- оптимальное поголовье животных
- баланс кормов
- уровень кормления животных
- использование удобрений
- сезонную продуктивность
- итоговую прибыль
- ✔ Многоуровневая архитектура
- ✔ PostgreSQL + SQLAlchemy ORM
- ✔ Alembic миграции
- ✔ Поддержка сценариев
- ✔ Нелинейная оптимизация
- ✔ Убывающая отдача кормления
- ✔ Баланс кормов
- ✔ Сезонность производства
- ✔ Валидация через Pydantic
- ✔ Агротехнические ограничения
- ✔ Хранение результатов оптимизации
- ✔ Matplotlib визуализация
- динамика плодородия почв
- машинно-тракторный парк
- трудовые ресурсы
- Streamlit/FastAPI интерфейс