/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.commons.math.estimation;

import java.io.Serializable;

/** This class represents the estimated parameters of an estimation problem.
 *
 * <p>The parameters of an estimation problem have a name, a value and
 * a bound flag. The value of bound parameters is considered trusted
 * and the solvers should not adjust them. On the other hand, the
 * solvers should adjust the value of unbounds parameters until they
 * satisfy convergence criterions specific to each solver.</p>
 *
 * @version $Revision$ $Date$
 * @since 1.2
 * @deprecated as of 2.0, everything in package org.apache.commons.math.estimation has
 * been deprecated and replaced by package org.apache.commons.math.optimization.general
 *
 */
@Deprecated
public class EstimatedParameter
  implements Serializable {

  /** Simple constructor.
   * Build an instance from a first estimate of the parameter,
   * initially considered unbound.
   * @param name name of the parameter
   * @param firstEstimate first estimate of the parameter
   */
  public EstimatedParameter(String name, double firstEstimate) {
    this.name = name;
    estimate  = firstEstimate;
    bound     = false;
  }

  /** Simple constructor.
   * Build an instance from a first estimate of the parameter and a
   * bound flag
   * @param name name of the parameter
   * @param firstEstimate first estimate of the parameter
   * @param bound flag, should be true if the parameter is bound
   */
  public EstimatedParameter(String name,
                            double firstEstimate,
                            boolean bound) {
    this.name  = name;
    estimate   = firstEstimate;
    this.bound = bound;
  }

  /** Copy constructor.
   * Build a copy of a parameter
   * @param parameter instance to copy
   */
  public EstimatedParameter(EstimatedParameter parameter) {
    name     = parameter.name;
    estimate = parameter.estimate;
    bound    = parameter.bound;
  }

  /** Set a new estimated value for the parameter.
   * @param estimate new estimate for the parameter
   */
  public void setEstimate(double estimate) {
    this.estimate = estimate;
  }

  /** Get the current estimate of the parameter
   * @return current estimate
   */
  public double getEstimate() {
    return estimate;
  }

  /** get the name of the parameter
   * @return parameter name
   */
  public String getName() {
    return name;
  }

  /** Set the bound flag of the parameter
   * @param bound this flag should be set to true if the parameter is
   * bound (i.e. if it should not be adjusted by the solver).
   */
  public void setBound(boolean bound) {
    this.bound = bound;
  }

  /** Check if the parameter is bound
   * @return true if the parameter is bound */
  public boolean isBound() {
    return bound;
  }

  /** Name of the parameter */
  private   String  name;

  /** Current value of the parameter */
  protected double  estimate;

  /** Indicator for bound parameters
   * (ie parameters that should not be estimated)
   */
  private   boolean bound;

  /** Serializable version identifier */
  private static final long serialVersionUID = -555440800213416949L;

}
