# commons-user mailing list archives

##### Site index · List index
Message view
Top
From Alexander SehlstrĂ¶m <alexan...@sehlstrom.se>
Subject [Math] Limitations of the SimplexSolver class?
Date Mon, 08 Apr 2013 15:29:10 GMT
```Hello,

I am trying to solve a linear programming problem using the SimplexSolver (org.apache.commons.math3.optim.linear.SimplexSolver).

It dose start to compute, however it never returns any result. Is there any limit on the number
of variables it is possible to solve for?

Determine s_c, the solution of:

| min   g(x)' * s
| s.t.  s_l <= s <= s_u

where g(x) is the vector of first order derivatives of f(x) with
respect to xi, s is the step length to use for update of x and
the lower and upper bounds of s are defined as:

s_l = max( -delta, xmin - x )
s_u = min(  delta, xmax - x )

The number of variables are 640 since g(x) is a vector of length 640.

My code runs fine until SimplexSolver.optimize() is called; the method never returns a result
and the code is stuck without any error thrown.

Thanks
Alexander

My code is appended below.

// Gradient of objective function at x
LinearObjectiveFunction g = new LinearObjectiveFunction(evaluation.derivatives.toArray(),
0);

// Boundaries s_l and s_u
// - Treat the boundaries as linear constraints.
DoubleMatrix tempMatrix = new DoubleMatrix(x.length, 2);

// s_l = max( -delta, xmin - x ),
tempMatrix.putColumn(0, DoubleMatrix.ones(x.length).mul(-1*delta));
tempMatrix.putColumn(1, xmin.sub(x));
s_l = tempMatrix.rowMaxs();

// s_u = min(  delta, xmax - x ),
tempMatrix.putColumn(0, DoubleMatrix.ones(x.length).mul(delta));
tempMatrix.putColumn(1, xmax.sub(x));
s_u = tempMatrix.rowMins();

Collection<LinearConstraint> constraints = new ArrayList();

for (int i = 0; i < s_l.length; i++) {
double[] coef = eye.getRow(i).toArray();
constraints.add(new LinearConstraint(coef, Relationship.GEQ, s_l.get(i)));
constraints.add(new LinearConstraint(coef, Relationship.LEQ, s_u.get(i)));
}

// Solve
LinearConstraintSet lcs = new LinearConstraintSet(constraints);
NonNegativeConstraint nnc = new NonNegativeConstraint(false);

simplexresult = new SimplexSolver().optimize(new MaxIter(100), g, lcs, nnc);

s_c = new DoubleMatrix(simplexresult.getPoint());

```
Mime
• Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message