/*
 * 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.math3.optimization.linear;

import java.util.Collection;
import java.util.Collections;

import org.apache.commons.math3.exception.MathIllegalStateException;
import org.apache.commons.math3.exception.MaxCountExceededException;
import org.apache.commons.math3.optimization.GoalType;
import org.apache.commons.math3.optimization.PointValuePair;

Base class for implementing linear optimizers.

This base class handles the boilerplate methods associated to thresholds settings and iterations counters.

Deprecated:As of 3.1 (to be removed in 4.0).
Since:2.0
/** * Base class for implementing linear optimizers. * <p> * This base class handles the boilerplate methods associated to thresholds * settings and iterations counters. * * @deprecated As of 3.1 (to be removed in 4.0). * @since 2.0 */
@Deprecated public abstract class AbstractLinearOptimizer implements LinearOptimizer {
Default maximal number of iterations allowed.
/** Default maximal number of iterations allowed. */
public static final int DEFAULT_MAX_ITERATIONS = 100;
Linear objective function.
Since:2.1
/** * Linear objective function. * @since 2.1 */
private LinearObjectiveFunction function;
Linear constraints.
Since:2.1
/** * Linear constraints. * @since 2.1 */
private Collection<LinearConstraint> linearConstraints;
Type of optimization goal: either GoalType.MAXIMIZE or GoalType.MINIMIZE.
Since:2.1
/** * Type of optimization goal: either {@link GoalType#MAXIMIZE} or {@link GoalType#MINIMIZE}. * @since 2.1 */
private GoalType goal;
Whether to restrict the variables to non-negative values.
Since:2.1
/** * Whether to restrict the variables to non-negative values. * @since 2.1 */
private boolean nonNegative;
Maximal number of iterations allowed.
/** Maximal number of iterations allowed. */
private int maxIterations;
Number of iterations already performed.
/** Number of iterations already performed. */
private int iterations;
Simple constructor with default settings.

The maximal number of evaluation is set to its default value.

/** * Simple constructor with default settings. * <p>The maximal number of evaluation is set to its default value.</p> */
protected AbstractLinearOptimizer() { setMaxIterations(DEFAULT_MAX_ITERATIONS); }
Returns:true if the variables are restricted to non-negative values.
/** * @return {@code true} if the variables are restricted to non-negative values. */
protected boolean restrictToNonNegative() { return nonNegative; }
Returns:the optimization type.
/** * @return the optimization type. */
protected GoalType getGoalType() { return goal; }
Returns:the optimization type.
/** * @return the optimization type. */
protected LinearObjectiveFunction getFunction() { return function; }
Returns:the optimization type.
/** * @return the optimization type. */
protected Collection<LinearConstraint> getConstraints() { return Collections.unmodifiableCollection(linearConstraints); }
{@inheritDoc}
/** {@inheritDoc} */
public void setMaxIterations(int maxIterations) { this.maxIterations = maxIterations; }
{@inheritDoc}
/** {@inheritDoc} */
public int getMaxIterations() { return maxIterations; }
{@inheritDoc}
/** {@inheritDoc} */
public int getIterations() { return iterations; }
Increment the iterations counter by 1.
Throws:
  • MaxCountExceededException – if the maximal number of iterations is exceeded
/** * Increment the iterations counter by 1. * @exception MaxCountExceededException if the maximal number of iterations is exceeded */
protected void incrementIterationsCounter() throws MaxCountExceededException { if (++iterations > maxIterations) { throw new MaxCountExceededException(maxIterations); } }
{@inheritDoc}
/** {@inheritDoc} */
public PointValuePair optimize(final LinearObjectiveFunction f, final Collection<LinearConstraint> constraints, final GoalType goalType, final boolean restrictToNonNegative) throws MathIllegalStateException { // store linear problem characteristics this.function = f; this.linearConstraints = constraints; this.goal = goalType; this.nonNegative = restrictToNonNegative; iterations = 0; // solve the problem return doOptimize(); }
Perform the bulk of optimization algorithm.
Throws:
Returns:the point/value pair giving the optimal value for objective function
/** * Perform the bulk of optimization algorithm. * @return the point/value pair giving the optimal value for objective function * @exception MathIllegalStateException if no solution fulfilling the constraints * can be found in the allowed number of iterations */
protected abstract PointValuePair doOptimize() throws MathIllegalStateException; }