⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minimizationexample.java

📁 Standord Classifier实现了一个基于Java的最大熵分类器。用于模式识别
💻 JAVA
字号:
package edu.stanford.nlp.optimization;/** * Example of using the minimization classes.  The class contents is included  * here in the documentation to make the example easy to see. *  * <pre>public class MinimizationExample {  // Sum of squares objective  private static class SumSquaresFunction implements DiffFunction {    public int domainDimension() { return 4; }    public double valueAt(double[] x) {      double sum = 0.0;      for (int i=0; i<domainDimension(); i++) {	sum += x[i]*x[i];      }      return sum;    }    public double[] derivativeAt(double[] x) {      double[] deriv = new double[domainDimension()];      for (int i=0; i<domainDimension(); i++) {	deriv[i] = 2.0*x[i];      }      return deriv;    }  }  // Sum to one constraint  private static class SumToOneConstraint implements DiffFunction {    public int domainDimension() { return 4; }    public double valueAt(double[] x) {      double sum = 0.0;      for (int i=0; i<domainDimension(); i++) {	sum += x[i];      }      return sum - 1.0;    }    public double[] derivativeAt(double[] x) {      double[] deriv = new double[domainDimension()];      for (int i=0; i<domainDimension(); i++) {	deriv[i] = 1.0;      }      return deriv;    }  }  // Component minimum constraint  private static class ComponentMinimumConstraint implements DiffFunction {    private int component;    private double minimum;    public int domainDimension() { return 4; }    public double valueAt(double[] x) {      return x[component] - minimum;    }    public double[] derivativeAt(double[] x) {      double[] deriv = new double[domainDimension()];      for (int i=0; i<domainDimension(); i++) {	deriv[i] = 0.0;      }      deriv[component] = 1.0;      return deriv;          }    public ComponentMinimumConstraint(int component, double minimum) {      this.component = component;      this.minimum = minimum;    }  }  private static String arrayToString(double[] x) {    StringBuffer sb = new StringBuffer("(");    for (int j=0; j<x.length; j++) {      sb.append(x[j]);      if (j != x.length-1)	sb.append(", ");    }    sb.append(")");    return sb.toString();  }  public static void main(String[] args) {    // Set up solvers...    Minimizer unconstrainedMinimizer = new CGMinimizer();    ConstrainedMinimizer constrainedMinimizer = new PenaltyConstrainedMinimizer(unconstrainedMinimizer);    // Set up problem...    DiffFunction objective = new SumSquaresFunction(); // sum xi^2    DiffFunction[] eqConstraints = new DiffFunction[1];    eqConstraints[0] = new SumToOneConstraint(); // sum xi = 1    DiffFunction[] ineqConstraints = new DiffFunction[2];    ineqConstraints[0] = new ComponentMinimumConstraint(1,0.3); // x1 >= 0.3    ineqConstraints[1] = new ComponentMinimumConstraint(2,0.5); // x2 >= 0.5    DiffFunction[] noConstraints = new DiffFunction[0];    double[] initial = {0.25, 0.25, 0.25, 0.25}; // note that it's not actual feasible    // unconstrained minimization    double[] x = unconstrainedMinimizer.minimize(objective, 1e-4, initial);    System.out.println("Unconstrained minimum is :            "+objective.valueAt(x)+" at "+arrayToString(x));    // with equality constraints    double[] xEQ = constrainedMinimizer.minimize(objective, 1e-4, eqConstraints, 1e-8, noConstraints, 0.0, initial);    System.out.println("Equality-conconstrained minimum is :  "+objective.valueAt(xEQ)+" at "+arrayToString(xEQ));        // with inequality constraints    double[] xINEQ = constrainedMinimizer.minimize(objective, 1e-4, noConstraints, 0, ineqConstraints, 1e-8, initial);    System.out.println("Inequality-conconstrained minimum is :"+objective.valueAt(xINEQ)+" at "+arrayToString(xINEQ));        // with all constraints    double[] xBOTH = constrainedMinimizer.minimize(objective, 1e-4, eqConstraints, 1e-8, ineqConstraints, 1e-8, initial);    System.out.println("Mixed-conconstrained minimum is :     "+objective.valueAt(xBOTH)+" at "+arrayToString(xBOTH));      }} * </pre> * * @author <a href="mailto:klein@cs.stanford.edu">Dan Klein</a> * @version 1.0 * @since 1.0 */public class MinimizationExample {  // Sum of squares objective  private static class SumSquaresFunction implements DiffFunction {    public int domainDimension() { return 4; }    public double valueAt(double[] x) {      double sum = 0.0;      for (int i=0; i<domainDimension(); i++) {	sum += x[i]*x[i];      }      return sum;    }    public double[] derivativeAt(double[] x) {      double[] deriv = new double[domainDimension()];      for (int i=0; i<domainDimension(); i++) {	deriv[i] = 2.0*x[i];      }      return deriv;          }  }  // Sum to one constraint  private static class SumToOneConstraint implements DiffFunction {    public int domainDimension() { return 4; }    public double valueAt(double[] x) {      double sum = 0.0;      for (int i=0; i<domainDimension(); i++) {	sum += x[i];      }      return sum - 1.0;    }    public double[] derivativeAt(double[] x) {      double[] deriv = new double[domainDimension()];      for (int i=0; i<domainDimension(); i++) {	deriv[i] = 1.0;      }      return deriv;    }  }  // Component minimum constraint  private static class ComponentMinimumConstraint implements DiffFunction {    private int component;    private double minimum;    public int domainDimension() { return 4; }    public double valueAt(double[] x) {      return x[component] - minimum;    }    public double[] derivativeAt(double[] x) {      double[] deriv = new double[domainDimension()];      for (int i=0; i<domainDimension(); i++) {	deriv[i] = 0.0;      }      deriv[component] = 1.0;      return deriv;    }    public ComponentMinimumConstraint(int component, double minimum) {      this.component = component;      this.minimum = minimum;    }  }  private static String arrayToString(double[] x) {    StringBuffer sb = new StringBuffer("(");    for (int j=0; j<x.length; j++) {      sb.append(x[j]);      if (j != x.length-1)	sb.append(", ");    }    sb.append(")");    return sb.toString();  }  public static void main(String[] args) {    // Set up solvers...    Minimizer unconstrainedMinimizer = new CGMinimizer();    ConstrainedMinimizer constrainedMinimizer = new PenaltyConstrainedMinimizer(unconstrainedMinimizer);    // Set up problem...    DiffFunction objective = new SumSquaresFunction(); // sum xi^2    DiffFunction[] eqConstraints = new DiffFunction[1];    eqConstraints[0] = new SumToOneConstraint(); // sum xi = 1    DiffFunction[] ineqConstraints = new DiffFunction[2];    ineqConstraints[0] = new ComponentMinimumConstraint(1,0.3); // x1 >= 0.3    ineqConstraints[1] = new ComponentMinimumConstraint(2,0.5); // x2 >= 0.5    DiffFunction[] noConstraints = new DiffFunction[0];    double[] initial = {0.25, 0.25, 0.25, 0.25}; // note that it's not actual feasible    // unconstrained minimization    double[] x = unconstrainedMinimizer.minimize(objective, 1e-4, initial);    System.out.println("Unconstrained minimum is :            "+objective.valueAt(x)+" at "+arrayToString(x));    // with equality constraints    double[] xEQ = constrainedMinimizer.minimize(objective, 1e-4, eqConstraints, 1e-8, noConstraints, 0.0, initial);    System.out.println("Equality-conconstrained minimum is :  "+objective.valueAt(xEQ)+" at "+arrayToString(xEQ));        // with inequality constraints    double[] xINEQ = constrainedMinimizer.minimize(objective, 1e-4, noConstraints, 0, ineqConstraints, 1e-8, initial);    System.out.println("Inequality-conconstrained minimum is :"+objective.valueAt(xINEQ)+" at "+arrayToString(xINEQ));        // with all constraints    double[] xBOTH = constrainedMinimizer.minimize(objective, 1e-4, eqConstraints, 1e-8, ineqConstraints, 1e-8, initial);    System.out.println("Mixed-conconstrained minimum is :     "+objective.valueAt(xBOTH)+" at "+arrayToString(xBOTH));      }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -