Quicopt, оптимизационный солвер как сервис
Quicopt, сервис-солвер для сложных задач оптимизации; разбор устроен вокруг страницы документации «Getting Started» на quicopt.com, которая обсуждалась на Hacker News и набрала 40 баллов и 32 комментария (автор публикации на HN, пользователь paddi91). Идея сервиса в том, чтобы не изучать отдельный API Quicopt, а строить модель в уже знакомом Python-инструменте, OR-Tools MathOpt или Pyomo, и одной строкой client.solve(model) отправлять её на решение в облако.
Установка, один пакет с PyPI: pip install quicopt[mathopt] для OR-Tools MathOpt или quicopt[pyomo] для Pyomo. Лицензионный файл, регистрация или отдельный ключ не нужны: на бесплатном тарифе первый же вызов сам создаёт API-ключ и переиспользует его для всех последующих вызовов в рамках одного объекта Client. В документации, два готовых к запуску примера, QUBO-задача и небольшая MILP-задача: их можно просто запустить и сравнить, что печатает каждый.
После вызова solve() клиент конвертирует модель, отправляет её в API Quicopt и возвращает объект Result: result.display, уже отформатированный вид, который рендерит сервер, а поля status, objective и solution (решение, проиндексированное по именам переменных модели) подробно описаны в справочнике по API. Там же, пример того, как выглядит ответ на заведомо невыполнимую модель, и асинхронный вариант API для фоновых заданий.
На сегодня сервис решает семь классов задач: LP (линейное программирование), QP (квадратичное программирование), MILP (смешанно-целочисленное линейное программирование), MINLP (смешанно-целочисленное нелинейное программирование), QUBO (квадратичная безусловная бинарная оптимизация), PUBO/HUBO (полиномиальная и более высокого порядка безусловная бинарная оптимизация) и NLP (нелинейное программирование), для каждого в документации есть рабочий пример. Одно ограничение бесплатного тарифа: в нелинейных моделях пока принимаются только бинарные (включено/выключено) целочисленные переменные, произвольные целочисленные, нет. Поддержка целевых функций типа «чёрный ящик» обещана «скоро», то есть сейчас её ещё нет. Модель вне поддерживаемых классов сервис не пытается решить кое-как, он возвращает понятный отказ, а не «половинчатый» результат.
Бесплатный тариф позиционируется как небольшая, разовая точка входа «на попробовать»: для реальных проектов авторы предлагают написать им напрямую и рассказать, что именно нужно оптимизировать. При этом Quicopt прямо предупреждает: бесплатный API работает «как есть», без гарантий доступности, работоспособности или корректности результата и без обязательств по уровню обслуживания (SLA), а ответственность ограничена умыслом и грубой небрежностью. Данные, отправленные через API, компания сохраняет, чтобы улучшать свои солверы в будущем, поэтому пользователей прямо просят не отправлять личные, конфиденциальные или иным образом чувствительные данные внутри оптимизационной модели.
Ключевые факты
- Quicopt, солвер-как-сервис для задач оптимизации: пробовать можно бесплатно, без регистрации и без ручного API-ключа, первый вызов client.solve() сам создаёт ключ и переиспользует его дальше.
- Модель строится в стандартных Python-инструментах, OR-Tools MathOpt или Pyomo, без изучения отдельного API Quicopt; готовая модель передаётся одним вызовом client.solve(model).
- Поддерживаются семь классов задач, LP, QP, MILP, MINLP, QUBO, PUBO/HUBO и NLP, для каждого в документации есть рабочий пример, включая пример ответа на заведомо невыполнимую модель.
- Ограничение бесплатного тарифа: в нелинейных моделях сейчас принимаются только бинарные целочисленные переменные (не произвольные целые); поддержка целевых функций «чёрный ящик» пока не реализована и заявлена «на скоро».
- Сервис прямо оговаривает статус бесплатного API: предоставляется «как есть», без гарантий доступности и результата и без SLA; отправленные данные компания сохраняет для доработки солверов, поэтому просит не передавать через него личные и чувствительные данные.
Почему это важно
Quicopt снимает типичное трение при пробе оптимизационного солвера: не нужно ни покупать или устанавливать лицензию, ни регистрироваться, ни вручную заводить API-ключ, первый же вызов client.solve() на бесплатном тарифе сам создаёт ключ и переиспользует его для всех следующих вызовов в рамках одного и того же клиента. При этом модель описывается в уже знакомых Python-инструментах, OR-Tools MathOpt или Pyomo, а не в специфичном для Quicopt формате: тот же код модели работает с любым MathOpt-совместимым солвером, то есть жёсткой привязки к одному вендору не возникает.
Кому это важно
В первую очередь, разработчикам и исследователям, которые уже строят модели в OR-Tools MathOpt или Pyomo и хотят быстро прогнать конкретную задачу, линейную, квадратичную, смешанно-целочисленную, QUBO/PUBO/HUBO или нелинейную, без установки и настройки отдельного солвера. А также тем, у кого есть реальная прикладная задача оптимизации за пределами бесплатного тарифа: команда Quicopt прямо предлагает написать им и рассказать, что именно нужно оптимизировать.
Как это применить
Установка, один пакет с PyPI: pip install quicopt[mathopt] (для OR-Tools MathOpt) или quicopt[pyomo] (для Pyomo), без лицензионного файла и без отдельной регистрации. Модель строится стандартно: переменные, целевая функция и, для MILP, ограничения; готовую модель передают в client.solve(model). Клиент сам конвертирует модель, отправляет её в API Quicopt и на первом вызове автоматически заводит API-ключ, который переиспользуется в дальнейшем. Результат, объект Result: result.display даёт уже отформатированный для чтения вывод, а поля status, objective и solution (решение, проиндексированное по именам переменных модели) описаны в справочнике по API; там же, пример ответа на заведомо невыполнимую модель и асинхронный вариант API для фоновых заданий. Для задач за пределами бесплатного тарифа предлагается написать команде Quicopt напрямую.
Можно ли доверять
Источник, официальная страница документации Quicopt («Getting Started»), то есть самоописание сервиса, а не независимая проверка; на Hacker News материал набрал 40 баллов и 32 комментария (автор публикации на HN, paddi91), это говорит об интересе сообщества, но не о независимом тестировании производительности солвера. Сам Quicopt честно обозначает границы: бесплатный API называют «ознакомительным», предоставляемым «как есть», без гарантий доступности, работоспособности или корректности результата и без SLA (соглашения об уровне обслуживания). Конкретные технические шаги, установка, список поддерживаемых классов задач, устройство ключа, проверяемы по самому тексту; а вот качество и скорость решения источником не подтверждаются, это предстоит проверить тому, кто попробует сервис сам.
Риски и подводные камни
Технические ограничения бесплатного тарифа: в нелинейных моделях пока принимаются только бинарные (включено/выключено) целочисленные переменные, а не произвольные целые; поддержка целевых функций типа «чёрный ящик», не сейчас, а «скоро», то есть по факту пока её нет; модель вне поддерживаемых классов задач сервис не решает частично, он отклоняет её с понятным сообщением. Юридические и приватные риски: ответственность Quicopt ограничена умыслом и грубой небрежностью, гарантий уровня обслуживания нет; компания прямо сохраняет данные, отправленные через API, чтобы улучшать свои солверы, и явно просит не передавать через бесплатный API личные, конфиденциальные или иным образом чувствительные данные внутри оптимизационной модели. Наконец, сам бесплатный тариф описан как «небольшая, разовая точка входа», то есть не рассчитан на постоянную промышленную нагрузку.
«Бесплатный ознакомительный API предоставляется «как есть», исключительно для оценки и исследований, без гарантий доступности, работоспособности или результата и без каких-либо обязательств по уровню обслуживания.»
— документация Quicopt, страница «Getting Started»