public proposition
{... } ;
обеспечивает класс propositionтребуе м ы м типо м. Кро м е того, важно от м етить, что класс trip_announcementопределяет операторный м етод operator(). Следовательно, наш класс trip_armouncement— конкретный, а не абстрактный. Теперь мы можем объявить и использовать предположение типа trip_announcementнепосредственно в программе агента. В классе trip_announcementопределены слелую-щие дополнительные члены данных: Origin Destination Candidates
Эти члены данных используются для указания пунктов отправления и назначения автобусного маршрута. Если автобусный маршрут требует пересадки с одного автобуса надругой и несколько остановок в пути, то член данных Candidatesбудет содержать полный путь следования. Следовательно, объект класса trip_armouncementпредставляет собой утверждение об автобусном маршруте и пути следования. В классе trip_armouncementтакже определены некоторые дополнительные операторы. Эти операторы позволяют уравнять класс trip_announcement«в правах» со встроенны м и типа м и данных языка С++. Помимо убеждений относительно автобусных м аршрутов, агент также обладает убеждения м и, связанны м и с показателя м и успешности функционирования расс м атривае м ой ко м пании. Эти убеждения отличаются по структуре, но в основном содержат высказывания, которые могут быть истинными либо ложными. Итак, мы снова испо л ьзуе м класс propositionв качестве базового. Влистинге 12.3 представлено объявление класса p eformance_statement.
// Листинг 12.3. Объявление класса performance_statement
class performance__statement :
public proposition{
//. . .
int Bays;
float Sales;
float PerHour;
public:
bool operator() (void);
bool operator==(const performance__statement &X) const;
void bays(int X);
int bays(void);
float sales(void);
void sales(float X);
float perHour(void);
void perHour(float X);
friend bool operator||(bool X,performance_statement &Y);
friend bool operator&&(bool X,performance_statement &Y); //. . .
};
Обратите вни м ание на то, что этот класс также обеспечивает шаблонный класс propositionпараметром .
class performance_statement :
public proposition {...}
Благодаря это м у объявлению класс propositionтеперь определен д ля объектов типа performance_statement.Класс performance_statementиспользуется для представления убеждений об объе м е продаж, количестве обслуженных клиентов (в час) и загрузке ре м онтных секций в день. Для каждого из перечисленных убеждений о том, что агент имеет в соответствующей области, существует отдельное высказывание. Эта инфор м ация хранится в таких членах данных:
Bays
Sales
PerHour
Такие высказывания, как «По секции 1 объе м продаж составил 300тыс. долл., обслужено 10 клиентов в час, а коэффициент загрузки равен 4», м ожно представить с по м о щ ью объекта класса performance_statement.Итак, наш класс агента и м еет две категории убеждений, реализованных ввиде данных, тип которых выведен из класса proposition.На рис. 12.2 представлена UML-диагра мм а классов trip_announcementи performance__statement.Эти классы предназначены для хранения структуры убеждений агента.
Рис. 12.2. UML-диаграмма классов trip_announcement и performance_statement |
Классы, представленные на рис. 12.2, образуют фундаментдля когнитивных структур данных агента, которые делают агента рациональным. Именно рационализм класса агента отличает его от других типов объектно-ориентированных классов. Рассмотрим объявление класса агента, приведенное в листинге 12.4.
// Листинг 12.4. Объявление класса agent
class agent{
//.. .
private:
performance_statement Manager1;
performance_statement Manager2;
performance_statement Manager3;
trip_announcement Trip1;
trip_announcement Trip2;
trip_announcement Trip3;
list TripBeliefs;
list PerformanceBeliefs;
public:
agent(void);
bool determineVacationAppropriate(void);
bool scheduleVacation(void);
void updateBeliefs(void);
void setGoals(void);
void displayTravelPlan(void);
//.. .
} .
Как и классы предположений, класс агента представляет собой упрощенную версию. Полный листинг объявления класса, который можно было бы использовать на практике, занял бы три или четыре страницы. Но для описательных целей, которые мы преслелуем в этой книге, приведенного вполне достаточно. Итак, класс agent содержит два контейнера-списка.
Читать дальше