Forum Numerical Method Optimization
Can i optimize functions like this?
-
megatrooperParticipant 2011-06-27 at 2:38 pm
//Hi, Here is a code trying to find x such that x’Vx*0.5-c’x is minimized constrained on sum of elements of x =1 ,but //it doesn’t work well and I think the problem is on optim.solve which may not be able to optimize the functions like crosssum and dot by //myself, can anyone help to find the mistakes? //Also, any better way to deal with a quadratic programming problem? //Here is the code.
import com.numericalmethod.suanshu.optimization.constrained.general.penaltymethod.PenaltyMethod; import com.numericalmethod.suanshu.optimization.unconstrained.quasinewton.BFGS; import com.numericalmethod.suanshu.analysis.function.rn2r1.RealScalarFunction; import com.numericalmethod.suanshu.number.DoubleUtils; import com.numericalmethod.suanshu.optimization.constrained.general.ConstrainedProblem; import com.numericalmethod.suanshu.vector.doubles.Vector; import com.numericalmethod.suanshu.optimization.constrained.general.constraint.EqualityConstraints; import com.numericalmethod.suanshu.optimization.constrained.general.constraint.LessThanConstraints; import com.numericalmethod.suanshu.matrix.doubles.matrixtype.dense.DenseMatrix; import com.numericalmethod.suanshu.vector.doubles.dense.DenseVector; import com.numericalmethod.suanshu.matrix.doubles.matrixtype.dense.DenseMatrixUtils; import java.util.Arrays; public class Quadprog{ public static void main(String[]arg){ double [] u = new double []{0.15,0.2,0.4,0.2,0.05,0.3,0.4,0.3,0.06}; DenseMatrix I1 = new DenseMatrix(u,3,3); double [] a = new double []{1,0.5,0.7}; DenseVector mu = new DenseVector(a);System.out.println(Arrays.toString(Solver(I1,mu))); } public static double [] Solver (final DenseMatrix V , final DenseVector mu){ final double [][] v = DenseMatrixUtils.to2DArray(V); final double []y = mu.toArray(); final int len = mu.length; RealScalarFunction f = new RealScalarFunction() { public double evaluate (double…x) { return 0.5*crosssum(x,v)-dot(x,y); } public int dimension4Domain() { return len; }public int dimension4Range() { return 1; } }; RealScalarFunction c1 = new RealScalarFunction() { public double evaluate (double …x) { return sum(x)-1; } public int dimension4Domain() { return len; }public int dimension4Range() { return 1; } }; RealScalarFunction c2 = new RealScalarFunction() { public double evaluate (double …x) { return -sum(x); } public int dimension4Domain() { return len; }public int dimension4Range() { return 1; } }; ConstrainedProblem problem = new ConstrainedProblem(f,new EqualityConstraints(c1),new LessThanConstraints(c2)); PenaltyMethod optim = new PenaltyMethod(PenaltyMethod.DEFAULT_PENALTY_FUNCTION_FACTORY, 1e30, new BFGS()); optim.solve(problem, 1e-2, 200); Vector xmin = optim.search(new DenseVector(new double []{0,0,0})); // as len=3 double fxmin = f.evaluate(xmin.toArray());System.out.println(String.format(“f(%s) = %f”, DoubleUtils.doubleArray2StringArray(xmin.toArray()), fxmin));return xmin.toArray(); }public static double sum (double []x) { //finding sum of elements of an array double sum =0; for (int i = 0; i< =x.length-1 ;i++) { sum=sum+x; } return sum; } public static double crosssum (double []x ,double [][]v) { //finding x’vx double sum =0; for (int i = 0; i< =x.length-1 ;i++) { for (int j=0; j< =x.length-1 ; j++){ sum=sum+v[j]*x*x[j]; } } return sum; } public static double dot(double []x , double []y){ //finding dot product of two arrays double dot = 0; for (int i=0; i< =x.length-1; i++){ dot = dot +x*y; } return dot; } } -
RyuParticipant 2012-01-07 at 4:42 pm
The latest SuanShu release now contains code to solve quadratic programming problems (using Active Set Method). See these links for examples:
http://www.numericalmethod.com/wiki/numericalmethod/browser/public/Examples/src/com/numericalmethod/suanshu/examples/QuadraticProgramming.java http://www.numericalmethod.com/wiki/numericalmethod/browser/public/Examples/src/com/numericalmethod/suanshu/examples/QuadraticProgramming.java http://www.numericalmethod.com/javadoc/suanshu/com/numericalmethod/suanshu/optimization/constrained/convex/quadraticprogramming/solver/activeset/package-summary.html