Apache Commons Math SimplexSolver с нижними и верхними границами?
Я намерен решить следующую задачу линейного программирования, используя метод Simplex, представленный в библиотеке Apache Commons Math. Я не заставляю его работать, и я нахожу документацию API ограниченной.
проблема
Начиная с вектора s0
определить s
Решение проблемы:
| min f' * s
| s
|
| s.t. s_l <= s <= s_u
где f
это вектор, s_l
а также s_u
нижняя и верхняя границы s
соответственно.
Я могу легко решить эту проблему в Matlab с помощью команды linprog(f, [], [], [], [], s_l, s_u, s0, options)
и желаю сделать то же самое в Java, предпочтительно используя Apache Commons Math.
SimplexSolver
Я пытался использовать Apache Commons Math SimplexSolver
похожее объяснение здесь: http://google-opensource.blogspot.se/2009/06/introducing-apache-commons-math.html
Но я не могу шов, чтобы определить свои границы s_l
а также s_u
и я должен предоставить LinearConstraint
(которого у меня нет), используя этот метод.
Вы должны быть в состоянии к этому?
1 ответ
Я не уверен, есть ли ярлык, но на самом деле нижняя и верхняя граница - это всего лишь 2 линейных ограничения.
Убедитесь, что ваша первая переменная больше первого элемента нижней границы (ограничение 1) и меньше первого элемента верхней границы (ограничение 2).
Затем убедитесь, что ваша вторая переменная.... и так далее.
Это может быть трудоемким для написания, но это не должно быть слишком сложно, чтобы понять это правильно.