/*
* Copyright © 2010 by Ondrej Skalicka. All Rights Reserved
*/
package cz.cvut.felk.cig.jcop.problem;
/**
* Objective problem groups all problem interfaces into one and adds methods to determine if an implementation has these
* interfaces really implemented or just they throw an exception if interface's method is called.
*
* @author Ondrej Skalicka
* @see BaseObjectiveProblem BaseObjectiveProblem is basic implementation of ObjectiveProblem interface and should be
* base class for all problems (or at least all local search problems).
*/
public interface ObjectiveProblem extends StartingConfigurationProblem, RandomConfigurationProblem,
DestinationProblem, Problem, GlobalSearchProblem {
/**
* Checks if problem has destination.
*
* @return true if implements DestinationProblem interface
*/
boolean hasDestination();
/**
* Checks if problem has starting attributes.
*
* @return true if implements StartingConfigurationProblem interface
*/
boolean hasStartingConfiguration();
/**
* Checks if problem has random attributes(s).
*
* @return true if implements RandomConfigurationProblem interface
*/
boolean hasRandomConfiguration();
/**
* Checks if problem has what is required to do global search on it.
*
* @return true if implements GlobalSearchProblem interface
*/
boolean hasGlobalSearch();
/**
* Returns problem around which ObjectiveProblem is wrapped.
*
* @return wrapped problem
*/
Problem getProblem ();
}