Библиотека математической оптимизации для Java --- бесплатные или открытые рекомендации?
Кто-нибудь знает такую библиотеку, которая выполняет математическую оптимизацию (линейное программирование, выпуклая оптимизация или более общие типы задач)? Я ищу что-то вроде MATLAB, но с возможностью справляться с большими проблемами. Нужно ли мне писать свои собственные реализации или покупать один из этих коммерческих продуктов (CPLEX и тому подобное)?
7 ответов
Хороший ответ зависит от того, что вы подразумеваете под "выпуклым" и "более общим". Если вы пытаетесь решить большие или сложные линейные или выпукло-квадратичные задачи оптимизации (особенно с дискретным компонентом для них), то трудно победить основные коммерческие решатели, gurobi, cplex и Dash, если деньги не являются большой проблемой для вас. Все они имеют чистый интерфейс JNI и доступны на большинстве основных платформ.
У проекта coin-or есть несколько оптимизаторов и проект для интерфейса JNI. Это абсолютно бесплатно (лицензия EPL), но потребует больше усилий для настройки и, вероятно, не даст вам такой же производительности.
Существует инструмент линейной оптимизации, называемый lpsolve. Он написан на C (я думаю), но поставляется с оболочкой Java/JNI (API не очень хорошо работает, но он выполняет свою работу). Его довольно просто использовать, и у меня он работал довольно успешно и стабильно в живой системе в течение прошлого года.
OptaPlanner (Java, открытый исходный код, ASL) может обрабатывать большие проблемы и не имеет ограничений по типу ограничений (например, линейный или выпуклый).
Вы можете попробовать JOptimizer, с открытым исходным кодом и подходит для общих задач выпуклой оптимизации (линейное программирование, квадратичное программирование, qcqp, конусное программирование, полуопределенное программирование и т. Д.
IPOPT имеет интерфейс для Java. Вы также можете адаптировать язык моделирования APMonitor для Java. Я разрабатываю эту платформу, поэтому буду рад работать с кем-то, если они захотят создать новый интерфейс для Java. Он уже имеет интерфейс Python API и MATLAB и включает в себя решатели, такие как IPOPT, APOPT, BPOPT и другие, которые могут работать с крупномасштабными системами.
Возможно, вы захотите взглянуть на JScience, это выглядит довольно полным. (Математические структуры, решение линейной алгебры и т. Д.)
Посмотрите в AMPL. Базовая версия бесплатна, но стоит больших денег. Вы не платите за язык; Вы платите за решатели. Также возможно загрузить ваш код и запустить его на своих серверах.