Skip to content

wittiden/BelAgroOptimization

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌾 BelAgroOptimization

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

🚀 Установка

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

git clone https://github.com/your_username/AgroOptimization.git
cd AgroOptimization

2. Создание окружения

conda create -n agro_env python=3.14 -y
conda activate agro_env

3. Установка IPOPT

conda install -c conda-forge ipopt cyipopt -y

4. Установка зависимостей

pip install -r requirements.txt

5. Создание базы данных PostgreSQL

CREATE DATABASE agro_optimization_dev

Настроить подключение в:

app/database/config.py

или через переменные окружения.


6. Выполнение миграций

alembic upgrade head

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

Выполнить SQL-скрипт:

seed.sql

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

conda activate agro_env
python -m app.main

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

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

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

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

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

📈 Возможные улучшения

  • динамика плодородия почв
  • машинно-тракторный парк
  • трудовые ресурсы
  • Streamlit/FastAPI интерфейс

About

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

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors