001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    package org.apache.commons.math.estimation;
019    
020    import java.util.ArrayList;
021    import java.util.List;
022    
023    /**
024     * Simple implementation of the {@link EstimationProblem
025     * EstimationProblem} interface for boilerplate data handling.
026     * <p>This class <em>only</em> handles parameters and measurements
027     * storage and unbound parameters filtering. It does not compute
028     * anything by itself. It should either be used with measurements
029     * implementation that are smart enough to know about the
030     * various parameters in order to compute the partial derivatives
031     * appropriately. Since the problem-specific logic is mainly related to
032     * the various measurements models, the simplest way to use this class
033     * is by extending it and using one internal class extending
034     * {@link WeightedMeasurement WeightedMeasurement} for each measurement
035     * type. The instances of the internal classes would have access to the
036     * various parameters and their current estimate.</p>
037    
038     * @version $Revision: 811827 $ $Date: 2009-09-06 17:32:50 +0200 (dim. 06 sept. 2009) $
039     * @since 1.2
040     * @deprecated as of 2.0, everything in package org.apache.commons.math.estimation has
041     * been deprecated and replaced by package org.apache.commons.math.optimization.general
042    
043     */
044    @Deprecated
045    public class SimpleEstimationProblem implements EstimationProblem {
046    
047        /** Estimated parameters. */
048        private final List<EstimatedParameter> parameters;
049    
050        /** Measurements. */
051        private final List<WeightedMeasurement> measurements;
052    
053        /**
054         * Build an empty instance without parameters nor measurements.
055         */
056        public SimpleEstimationProblem() {
057            parameters   = new ArrayList<EstimatedParameter>();
058            measurements = new ArrayList<WeightedMeasurement>();
059        }
060    
061        /**
062         * Get all the parameters of the problem.
063         * @return parameters
064         */
065        public EstimatedParameter[] getAllParameters() {
066            return parameters.toArray(new EstimatedParameter[parameters.size()]);
067        }
068    
069        /**
070         * Get the unbound parameters of the problem.
071         * @return unbound parameters
072         */
073        public EstimatedParameter[] getUnboundParameters() {
074    
075            // filter the unbound parameters
076            List<EstimatedParameter> unbound = new ArrayList<EstimatedParameter>(parameters.size());
077            for (EstimatedParameter p : parameters) {
078                if (! p.isBound()) {
079                    unbound.add(p);
080                }
081            }
082    
083            // convert to an array
084            return unbound.toArray(new EstimatedParameter[unbound.size()]);
085    
086        }
087    
088        /**
089         * Get the measurements of an estimation problem.
090         * @return measurements
091         */
092        public WeightedMeasurement[] getMeasurements() {
093            return measurements.toArray(new WeightedMeasurement[measurements.size()]);
094        }
095    
096        /** Add a parameter to the problem.
097         * @param p parameter to add
098         */
099        protected void addParameter(EstimatedParameter p) {
100            parameters.add(p);
101        }
102    
103        /**
104         * Add a new measurement to the set.
105         * @param m measurement to add
106         */
107        protected void addMeasurement(WeightedMeasurement m) {
108            measurements.add(m);
109        }
110    
111    }