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).

Затем убедитесь, что ваша вторая переменная.... и так далее.

Это может быть трудоемким для написания, но это не должно быть слишком сложно, чтобы понять это правильно.

Другие вопросы по тегам