001 package calhoun.analysis.crf.solver;
002
003 import java.util.Arrays;
004 import java.util.List;
005
006 import org.apache.commons.logging.Log;
007 import org.apache.commons.logging.LogFactory;
008
009 import calhoun.analysis.crf.CRFTraining;
010 import calhoun.analysis.crf.ModelManager;
011 import calhoun.analysis.crf.io.TrainingSequence;
012 import calhoun.util.Assert;
013
014 /** a dummy optimizer that just fixed the weights at values specified in the configuration.
015 * If no weights are specified, then a default all weights being fixed at 1.0 is used. */
016 public class FixedWeightOptimizer implements CRFTraining {
017 private static final Log log = LogFactory.getLog(FixedWeightOptimizer.class);
018
019 double[] starts;
020
021 public double[] optimize(ModelManager fm, List<? extends TrainingSequence<?>> data) {
022 int N = fm.getNumFeatures();
023 if (starts == null) {
024 log.warn("FixedWeightOptimizer called but weights not specified; setting all weights to 1.0");
025 starts = new double[N];
026 Arrays.fill(starts, 1.0);
027 }
028 Assert.a(starts.length == N , "Number of specified starting weights must equal the number of Features");
029 return starts;
030 }
031
032 /** gets the fixed weights that will be used in place of an optimization.
033 * @return array of feature weights to use */
034 public double[] getStarts() {
035 return starts;
036 }
037
038 /** sets the values to use as feature weights. A null value sets all weights to 1.0.
039 * @param starts array of feature weights to use */
040 public void setStarts(double[] starts) {
041 this.starts = starts;
042 }
043 }