//
// $Source: /cvsroot/gambit/gambit/sources/gui/analysis.h,v $
// $Date: 2006/08/20 16:18:18 $
// $Revision: 1.9 $
//
// DESCRIPTION:
// Declaration of analysis storage classes
//
// This file is part of Gambit
// Copyright (c) 2005, The Gambit Project
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program 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 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.
//
#ifndef ANALYSIS_H
#define ANALYSIS_H
class gbtGameDocument;
//
// This file contains classes which manage the output of analysis tools.
// Currently, one class is supported, which is simply a list of profiles
// output by, e.g., an algorithm to compute Nash equilibria.
// Future classes will be adapted to other types of output (e.g.,
// output of stable sets or convex components of equilibria, etc.)
//
class TiXmlNode;
class gbtAnalysisOutput {
protected:
gbtGameDocument *m_doc;
wxString m_label, m_description, m_command;
public:
/// @name Lifecycle
//@{
/// Construct a new output group
gbtAnalysisOutput(gbtGameDocument *p_doc) : m_doc(p_doc) { }
/// Clean up an output group
virtual ~gbtAnalysisOutput() { }
//@}
/// @name General data access
//@{
/// Get the label (short description) of the list
const wxString &GetLabel(void) const { return m_label; }
/// Set the label (short description) of the list
void SetLabel(const wxString &p_label) { m_label = p_label; }
/// Get the description of the list
const wxString &GetDescription(void) const { return m_description; }
/// Set the description of the list
void SetDescription(const wxString &p_desc) { m_description = p_desc; }
/// Get the command used to generate the list
const wxString &GetCommand(void) const { return m_command; }
/// Set the command used to generate the list
void SetCommand(const wxString &p_command) { m_command = p_command; }
/// The number of profiles in the list
virtual int NumProfiles(void) const = 0;
/// Get the index of the currently selected profile
virtual int GetCurrent(void) const = 0;
/// Set the index of the currently selected profile
virtual void SetCurrent(int p_index) = 0;
/// Are these behavior or strategy profiles natively?
virtual bool IsBehavior(void) const = 0;
//@}
virtual std::string GetPayoff(int pl, int p_index = -1) const = 0;
virtual std::string GetRealizProb(const Gambit::GameNode &,
int p_index = -1) const = 0;
virtual std::string GetBeliefProb(const Gambit::GameNode &,
int p_index = -1) const = 0;
virtual std::string GetNodeValue(const Gambit::GameNode &, int pl,
int p_index = -1) const = 0;
virtual std::string GetInfosetProb(const Gambit::GameNode &,
int p_index = -1) const = 0;
virtual std::string GetInfosetValue(const Gambit::GameNode &,
int p_index = -1) const = 0;
virtual std::string GetActionValue(const Gambit::GameNode &, int act,
int p_index = -1) const = 0;
virtual std::string GetActionProb(const Gambit::GameNode &, int act,
int p_index = -1) const = 0;
virtual std::string GetActionProb(int p_action, int p_index = -1) const = 0;
virtual std::string GetStrategyProb(int p_strategy,
int p_index = -1) const = 0;
virtual std::string GetStrategyValue(int p_strategy,
int p_index = -1) const = 0;
virtual void AddOutput(const wxString &) = 0;
/// Map all behavior profiles to corresponding mixed profiles
virtual void BuildNfg(void) = 0;
/// Write a profile list to XML savefile
virtual void Save(std::ostream &) const = 0;
};
//!
//! This class manages a list of profiles, computed, e.g., by an
//! algorithm for finding Nash equilibria. It maintains two lists
//! of profiles, one with the behavior representation and the other
//! with the mixed representation.
//!
template <class T> class gbtAnalysisProfileList : public gbtAnalysisOutput {
private:
bool m_isBehav;
int m_current;
Gambit::List<Gambit::MixedBehavProfile<T> > m_behavProfiles;
Gambit::List<Gambit::MixedStrategyProfile<T> > m_mixedProfiles;
public:
//!
//! @name Lifecycle
//!
//@{
/// Construct a new profile list for the specified document
gbtAnalysisProfileList(gbtGameDocument *p_doc, bool p_isBehav)
: gbtAnalysisOutput(p_doc), m_isBehav(p_isBehav), m_current(0) { }
/// Cleanup the profile list
virtual ~gbtAnalysisProfileList() { }
//@}
//!
//! @name General data access
//!
//@{
/// Are these behavior or strategy profiles natively?
bool IsBehavior(void) const { return m_isBehav; }
/// The number of profiles in the list
int NumProfiles(void) const;
std::string GetPayoff(int pl, int p_index = -1) const;
/// Return the realization probability of the node for the given
/// profile. (index == -1 for currently selected profile)
std::string GetRealizProb(const Gambit::GameNode &, int p_index = -1) const;
std::string GetBeliefProb(const Gambit::GameNode &, int p_index = -1) const;
std::string GetNodeValue(const Gambit::GameNode &, int pl,
int p_index = -1) const;
std::string GetInfosetProb(const Gambit::GameNode &, int p_index = -1) const;
std::string GetInfosetValue(const Gambit::GameNode &,
int p_index = -1) const;
std::string GetActionValue(const Gambit::GameNode &, int act,
int p_index = -1) const;
std::string GetActionProb(const Gambit::GameNode &, int act,
int p_index = -1) const;
std::string GetActionProb(int p_action, int p_index = -1) const;
std::string GetStrategyProb(int p_strategy,
int p_index = -1) const;
std::string GetStrategyValue(int p_strategy,
int p_index = -1) const;
/// Get the index of the currently selected profile
int GetCurrent(void) const { return m_current; }
/// Set the index of the currently selected profile
void SetCurrent(int p_index) { m_current = p_index; }
//@}
//!
//! @name Adding profiles to the list
//!
//@{
void AddOutput(const wxString &);
/// Map all behavior profiles to corresponding mixed profiles
void BuildNfg(void);
/// Remove all profiles from the list
void Clear(void);
//@}
//!
//! @name Saving and loading profile lists
//!
//@{
/// Build a profile list from XML savefile
void Load(TiXmlNode *analysis);
/// Write a profile list to XML savefile
void Save(std::ostream &) const;
//@}
};
#endif // ANALYSIS_H
syntax highlighted by Code2HTML, v. 0.9.1