Как выполнить целочисленное линейное программирование в Apache Commons Math

Пакет org.apache.commons.math3.optim.linear в математической библиотеке Apache Commons позволяет Линейная оптимизация, но возвращаемые значения являются двойными. Есть ли способ выполнить целочисленное линейное программирование с помощью этой библиотеки? Я пробовал гуглить, но, похоже, нигде не упоминается ILP.

В качестве альтернативы, есть ли другая библиотека Java, которая может выполнять ILP? пожалуйста, не то, что мне нужно запустить это на Android, поэтому SCPSolver, GLPK, Or-tools. и т.д. невозможны.

Заранее спасибо.


person ShahiM    schedule 29.04.2017    source источник
comment
еще одна вещь, это очень неотложный вопрос, поэтому я расстанусь со 100 моими с трудом заработанными репутациями в качестве награды, если вы сможете решить это.   -  person ShahiM    schedule 29.04.2017
comment
Этот решатель Apache предназначен только для LP. ojalgo имеет решатель целочисленного программирования. Также существует множество решателей CP на основе Java, например. Choco   -  person Erwin Kalvelagen    schedule 29.04.2017
comment
Я пробую Ojalgo прямо сейчас. Я дал вам знать.   -  person ShahiM    schedule 29.04.2017
comment
@ЭрвинКалвелаген. Охалго бросает java.lang.NoClassDefFoundError: Failed resolution of: Ljava/lang/management/ManagementFactory;. Предположим, он не может работать на Android ??   -  person ShahiM    schedule 29.04.2017
comment
Я считаю, что источник доступен, поэтому вы сможете это исправить.   -  person Erwin Kalvelagen    schedule 01.05.2017


Ответы (2)


Поскольку этот вопрос и «линейное программирование в Android» в целом редко обсуждается, я решил опубликовать здесь свои выводы для тех, кто будет искать в будущем.

Кстати, в итоге я использовал порт Ojalgo, указанный ниже.

Это библиотеки LP, которые, как я обнаружил, можно легко импортировать в проект Android:

Apache Commons Math

Возможно, это самая хорошо поддерживаемая библиотека, она поддерживает линейную оптимизацию, но не имеет целочисленного LP.

Следующие две библиотеки поддерживают Integer LP и/или Mixed Integer LP.

Choco Solver

Несмотря на то, что последняя версия Choco (4.0) основана на Java 8, существует вариант Java 7 версии 3.3.3. Вы можете найти его здесь. Это импортирует в Android Studio без каких-либо проблем.

Еще одна проблема, с которой вы можете столкнуться, заключается в том, что, хотя на их веб-сайте есть руководства и учебные пособия для версии 4, вы не сможете найти никаких руководств для Choco 3, кроме Javadocs. Но, к счастью, кто-то сделал PDF-файл со старыми руководствами, которые вы можете получить, погуглив Choco3. Руководство пользователя.

Также обратите внимание, что Choco находится под лицензией Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License< /а>. Так что если вы хотите использовать LP в коммерческом проекте, рассмотрите следующий вариант.

Ой! Алгоритмы

Ojalgo — еще одна замечательная библиотека с лицензией MIT и поддержкой Java 7. Выяснилось, что он использует пару вызовов Java, которых нет в Android.

К счастью, MVP портировал библиотеку для работы. в Android: KIC/ojAlgoAndroid

Этот порт работал без проблем. Я разветвил и создал релиз на Jitpack: shahimclt/ojAlgoAndroid.

person ShahiM    schedule 01.05.2017
comment
Использование java.lang.management было удалено из последних сборок ojAlgo — это зависит только от профиля compact1. Кроме того, похоже, что в Android появится поддержка языковых функций Java 8. developer.android.com/studio/preview/features/ - person apete; 04.05.2017
comment
@апете. Спасибо за информацию. Я попробую это. - person ShahiM; 04.05.2017

Просто чтобы исправить ответ ShahiM:

person Jean-Guillaume Fages    schedule 08.05.2017
comment
Обратите внимание, что это BSD-4, поэтому вам придется указывать издателя, если вы рекламируете какой-либо компонент, использующий библиотеку. - person Jay; 11.11.2017
comment
Вы должны указать издателя, если вы рекламируете использование программного обеспечения (например, Choco Solver внутри или глобальное ограничение кардинальности внутри). Вы не ДОЛЖНЫ указывать издателя (но вы можете это сделать :-)), если вы рекламируете свое программное обеспечение, даже если это программное обеспечение использует Choco Solver, при условии, что ваше добавление относится к вашему программному обеспечению, а не к функциям Choco Solver. Пункт BSD: Во всех рекламных материалах, в которых упоминаются функции или использование этого программного обеспечения, должно быть указано следующее: Этот продукт включает программное обеспечение, разработанное организацией. - person Jean-Guillaume Fages; 13.11.2017