package geniusweb.opponentmodel;
import geniusweb.actions.Action;
import geniusweb.issuevalue.Domain;
import geniusweb.profile.Profile;
import geniusweb.profile.utilityspace.UtilitySpace;
import geniusweb.progress.Progress;
/**
* An opponentmodel estimates a {@link UtilitySpace} from received opponent
* actions.
*
Requirement
A OpponentModel must have a constructor that takes the
* Domain as argument. unfortunately this can not be enforced in a java
* interface
*/
public interface OpponentModel extends Profile {
/**
* Update this with a new action that was done by the opponent that this
* model is modeling. {@link #with(Domain)} must be called before calling
* this.
*
* @param action the new incoming action.
* @param progress the current progress of the negotiation. Calls to this
* must be done with increasing progress.
* @return the updated {@link OpponentModel}
*/
OpponentModel with(Action action, Progress progress);
}