Я довольно новичок в линейном программировании, я решил свою первую проблему с lpsolve (двоичная dll, вызываемая из Java, через обертку JavaILP, чтобы получить более объектно-ориентированный код), и это было очень быстро (50 мс).
Затем я решил избежать нативного кода (если это возможно) и переписал все, используя ojAlgo, и для моей проблемы с 2100 переменными время решения увеличилось с 50 мс до 1089 мс.
Этоскорость нормальная / ожидаемая?
Это потому, что ojAlgo использует BigDecimal
(не уверен, что это так, я видел double
s в коде там и там), а lpsolve, вероятно, использует int
s?
Могу ли я что-нибудь с этим сделать?
С другой стороны, найденный максимум увеличился с 1013
до OPTIMAL 1249
, что хорошо.(используя lpsolve, я даже не знал, что существует лучшее решение)
edit: Я не заметил, что несколько имен выражений конфликтовали, и я думаю, это заставило их перезаписывать друг друга;теперь я исправил это, и решение OPTIMAL 1013
найдено ... за 8270 мс.