2016-01-26 3 views
2

Я хотел бы решить так называемые смешанные целые линейные программы в Java (каким-то методом Branch-and-Bound/Cut). Я не хочу использовать коммерческие библиотеки (CPLEX, Gurobi, SCIP), которые дорого стоят за пределами академических кругов. С другой стороны, он не обязательно должен быть независимым от платформы, поэтому я мог бы вызвать какой-то внешний код или исполняемый файл, если это достаточно хорошо документировано.Решение смешанных целых линейных программ в Java

Кто-нибудь сделал что-то подобное раньше или имеет хорошую идею?

Чтобы быть более точным: в основном, я хочу сгенерировать смешанную целую линейную программу и решить ее оптимально. Большой бонус будет заключаться в том, что генерация вырезания (во время процесса решения) также возможна с помощью какого-либо механизма обратного вызова.

+0

Насколько велики ваши проблемы? Большие коммерческие решатели, как правило, намного быстрее, чем свободные решатели, поэтому вы можете найти, что это стоит запрашиваемой цены. Я видел проблемы, которые занимают более часа с помощью бесплатного решателя, который можно решить за несколько секунд с помощью CPLEX. Но это зависит от структуры проблемы, так что вы можете быть в порядке. – TimChippingtonDerrick

+0

Я знаю, что есть огромные различия в скорости, но проблемы, которые я рассматриваю, относительно малы. –

ответ

3

Вы можете проверить COIN-OR проекты, в частности,

BCP: Рамки для построения параллельных branch- уцененный алгоритмы для смешанных целочисленных линейных программ

CBC: LP основе ветвей и вырезать библиотеку

ВКТ: библиотека режущих плоскостей генераторов

в случае, если вам необходим ручной механизм вырезания. Это проект с открытым исходным кодом, и они могут использовать как GLPK, так и коммерческие решатели. Альтернативно, для решения MIP вы можете вызвать GLPK после моделирования проблемы с инструментом COIN-OR. Проблема заключается в том, чтобы найти подходящую оболочку Java (возможно, нужен хороший поиск в googling). Например, CMPL использует CBC и GLPK и имеет Java API (jCmpl).

Стоит также упомянуть SCIP, а также интерфейс Java.

0

поздний ответ ...

Просто о всех решателей (коммерческих или с открытым исходным кодом) имеют Java интерфейсы.

Единственный чистый решатель MIP для Java, о котором я знаю, это ojAlgo.