Можно ли получить теневые цены с помощью org.apache.commons.math3.optim? - PullRequest
0 голосов
/ 10 января 2019

У меня большая проблема с LP, похожая на:

max z = c^T * x
s.t. A*x    <= b
and  Aeq * x = beq

После написания ограничений код выглядит так:

import org.apache.commons.math3.optim.linear.LinearConstraint;
import org.apache.commons.math3.optim.linear.Relationship;
import org.apache.commons.math3.exception.TooManyIterationsException;
import org.apache.commons.math3.optim.OptimizationData;
import org.apache.commons.math3.optim.PointValuePair;
import org.apache.commons.math3.optim.linear.LinearConstraintSet;
import org.apache.commons.math3.optim.linear.LinearObjectiveFunction;
import org.apache.commons.math3.optim.linear.NoFeasibleSolutionException;
import org.apache.commons.math3.optim.linear.NonNegativeConstraint;
import org.apache.commons.math3.optim.linear.SimplexSolver;
import org.apache.commons.math3.optim.linear.UnboundedSolutionException;
import org.apache.commons.math3.optim.nonlinear.scalar.GoalType;

LinearObjectiveFunction objective = new LinearObjectiveFunction(objectiveCoefficients, 0);

SimplexSolver solver = new SimplexSolver(epsilon, maxUlps, cutOff);

LinearConstraintSet constraintSet = new LinearConstraintSet(constraints);

NonNegativeConstraint nonnegative = new NonNegativeConstraint(true);

GoalType maximization = GoalType.MAXIMIZE;

OptimizationData[] optData = new OptimizationData[]{maximization, objective, constraintSet, nonnegative};

try{

PointValuePair solution = solver.optimize(optData);

}catch ...

работает довольно хорошо. Однако я не могу получить значения двойной проблемы, то есть теневые цены моих ограничений без отдельного решения двойной проблемы.

Есть ли возможность получить и значения x моей основной задачи, и теневые цены ограничений с помощью org.apache.commons.math3.optim?

Спасибо заранее

1 Ответ

0 голосов
/ 10 января 2019

Не возвращает двойников. Вы, вероятно, можете получить их из окончательной таблицы, но это может потребовать некоторой сантехники.

Отмечено, что это не хороший решатель для любых, но самых маленьких проблем LP. Это не серьезный алгоритм, а реализация в главе 1 симплексного метода полной таблицы. Не рекомендуется для больших проблем.

...