//Copyright (C) 2005 Richard J. Northedge
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//This file is based on the MaxentModel.java source file found in the
//original java implementation of MaxEnt. That source file contains the following header:
// Copyright (C) 2001 Jason Baldridge and Gann Bierner
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
using System;
namespace BotSharp.MachineLearning
{
///
/// Interface for maximum entropy models.
///
///
/// Jason Baldridge
///
///
/// Richard J. Northedge
///
///
/// based on MaxentModel.java, $Revision: 1.4 $, $Date: 2003/12/09 23:13:53 $
///
public interface IMaximumEntropyModel
{
///
/// Returns the number of outcomes for this model.
///
///
/// The number of outcomes.
///
int OutcomeCount
{
get;
}
///
/// Evaluates a context.
///
///
/// A list of string names of the contextual predicates
/// which are to be evaluated together.
///
///
/// An array of the probabilities for each of the different
/// outcomes, all of which sum to 1.
///
double[] Evaluate(string[] context);
///
/// Evaluates a context.
///
///
/// A list of string names of the contextual predicates
/// which are to be evaluated together.
///
///
/// An array which is populated with the probabilities for each of the different
/// outcomes, all of which sum to 1.
///
///
/// an array of the probabilities for each of the different
/// outcomes, all of which sum to 1. The probabilities array is returned if it is appropiately sized.
///
double[] Evaluate(string[] context, double[] probabilities);
///
/// Simple function to return the outcome associated with the index
/// containing the highest probability in the double[].
///
///
/// A double[] as returned by the
/// Evaluate(string[] context)
/// method.
///
///
/// the string name of the best outcome
///
string GetBestOutcome(double[] outcomes);
///
/// Return a string matching all the outcome names with all the
/// probabilities produced by the eval(string[]
/// context) method.
///
///
/// A double[] as returned by the
/// eval(string[] context)
/// method.
///
///
/// string containing outcome names paired with the normalized
/// probability (contained in the double[] ocs)
/// for each one.
///
string GetAllOutcomes(double[] outcomes);
///
/// Gets the string name of the outcome associated with the supplied index
///
///
/// the index for which the name of the associated outcome is desired.
///
///
/// the string name of the outcome
///
string GetOutcomeName(int index);
///
/// Gets the index associated with the string name of the given
/// outcome.
///
///
/// the string name of the outcome for which the
/// index is desired
///
///
/// the index if the given outcome label exists for this
/// model, -1 if it does not.
///
int GetOutcomeIndex(string outcome);
}
}