Скорость решения линейного программирования ojAlgo - PullRequest
0 голосов
/ 19 октября 2018

Я довольно новичок в линейном программировании, я решил свою первую проблему с lpsolve (двоичная dll, вызываемая из Java, через обертку JavaILP, чтобы получить более объектно-ориентированный код), и это было очень быстро (50 мс).

Затем я решил избежать нативного кода (если это возможно) и переписал все, используя ojAlgo, и для моей проблемы с 2100 переменными время решения увеличилось с 50 мс до 1089 мс.

Этоскорость нормальная / ожидаемая?

Это потому, что ojAlgo использует BigDecimal (не уверен, что это так, я видел double s в коде там и там), а lpsolve, вероятно, использует int s?

Могу ли я что-нибудь с этим сделать?

С другой стороны, найденный максимум увеличился с 1013 до OPTIMAL 1249, что хорошо.(используя lpsolve, я даже не знал, что существует лучшее решение)

edit: Я не заметил, что несколько имен выражений конфликтовали, и я думаю, это заставило их перезаписывать друг друга;теперь я исправил это, и решение OPTIMAL 1013 найдено ... за 8270 мс.

1 Ответ

0 голосов
/ 19 октября 2018

Совершенно нормально для чистого Java-решателя работать медленнее, чем нативный код.

Есть ли у вас целочисленные переменные?Если вы это сделаете, то это MIP, и его может быть довольно сложно решить.

ojAlgo разделяет модель и решатель.Модель использует BigDecimal для внутреннего использования.Модель анализирует проблему и вызывает различные решатели в зависимости от характеристик проблемы.Решатели могут работать с любым типом чисел, который они хотят.Встроенные решатели ojAlgo работают с примитивным двойным.

Вы можете подключить любой решатель, который вам нравится в ojAlgo.Уже есть интеграции для 3 лучших коммерческих решателей:

https://github.com/optimatika/ojAlgo-extensions/tree/develop/ojAlgo-cplex

https://github.com/optimatika/ojAlgo-extensions/tree/develop/ojAlgo-gurobi

https://github.com/optimatika/ojAlgo-extensions/tree/develop/ojAlgo-mosek

Есть и другие чистые Java,с открытым исходным кодом, доступны решатели LP:

https://github.com/optimatika/ojAlgo-extensions/tree/develop/ojAlgo-joptimizer

https://github.com/optimatika/ojAlgo-extensions/tree/develop/ojAlgo-commons-math3

Интеграция для lpsolve пока отсутствует ...

...