Web-first инструмент для моделирования ИЭС 2026: лоты, тарифный аукцион, энергосистема, прогноз, unified lot optimizer и post-auction planning.
- ruleset 2026 на существующей Flask-архитектуре без второго параллельного engine;
25детерминированно-случайных лотов тестовой игры;- единый
unified lot optimizerбез ручного strategy-switching в основном UX; - delta-profit valuation по
48тактам; - consumer fixed tariff per tick, а не
demand * tariff; - anti-dumping cap
1.2 * useful_energy_(t-1) + 10; - market model: exchange sale, GP fallback, GP purchase, balancing penalty;
- network validator: tree, path to main, no islands, no mixed districts, hospital dual input, factory warning;
- robust wind valuation: prior/posterior по скрытым thresholds, storm shutdown, hysteresis и inertia;
- singles / pairs / groups catalog с
optimal_purchase_price, expected profit и risk-adjusted ranking; - post-auction JSON/YAML template для дальнейшего моделирования.
ies_bot_skeleton/domain/ies2026/config.pyruleset defaults, anti-dumping, storage/network constraints, installation priority.ies_bot_skeleton/domain/ies2026/types.pytyped 2026 entities и payloads.ies_bot_skeleton/domain/ies2026/forecast.pycanonical 48-tick forecast normalization.ies_bot_skeleton/domain/ies2026/network.pytopology planner и validator.ies_bot_skeleton/domain/ies2026/engine.pymarginal value / delta-profit, floor/ceiling, storage decomposition, market simulation.ies_bot_skeleton/web/services/evaluation.pyweb adapter над domain engine.ies_bot_skeleton/web/services/strategy.pystrategy snapshot: singles, pairs, groups, plan B, plan C.ies_bot_skeleton/web/services/post_auction_plan.pyexport post-auction system plan.
- один
main_substation; - consumer tariff = fixed connection tariff per tick;
- generator/storage/infrastructure bids use service tariff ceiling logic;
- storage
capacity=120,charge_rate=15,discharge_rate=20; - anti-dumping:
max_declared_sale_t = 1.2 * useful_energy_(t-1) + 10; - useful energy считается после сетевых потерь;
- all-pay не является основным режимом и применяется только как special-case для fixed package / tie-break;
- cumulative all-pay budget cap =
5000; - network must be a tree without cycles and islands;
- hospital requires two inputs;
- factory allows one or two inputs, one input gives warning.
- Покупка лота блокируется, если активный прогноз несовместим с составом лота.
- покупка требует явного checkbox-confirmation цены сделки в quick auction.
- Оценка в quick auction не меняет
current_bid. - Циклы и разрывы до главной подстанции блокируются на write-path.
- demand elasticity model;
- loss approximation;
- wind curve calibration hooks;
- aggregate market clearing approximation;
- веса robust wind posterior и risk-adjusted ranking.
- коэффициенты потерь по глубине и connection point;
- elasticity по типам потребителей;
- параметры конкретных ВЭС по историческим данным игры;
- GP fallback / balancing tariffs, если правила будут уточнены численно.
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
export FLASK_APP=ies_bot_skeleton.web.app:create_app
flask db upgrade -d ies_bot_skeleton/web/migrations
flask seed
flask runОткрыть http://127.0.0.1:5000
/dashboard/sessions/<id>/lots/<id>/lots/item/<lot_id>/system/<id>/forecast/<id>/api/sessions/<id>/post-auction-plan/api/sessions/<id>/post-auction-plan.yaml
Весь набор, 167 тестов, около 36 секунд:
.venv/bin/pytest -q testsЛинтер и форматирование, ровно то же гоняет CI:
.venv/bin/ruff check .
.venv/bin/black --check .Тесты работают на SQLite в памяти, поэтому ни PostgreSQL, ни переменные окружения для прогона не нужны.