40 const std::string name;
42 value(
const std::string & n): name(n) {}
44 const std::string & get_name()
const {
return name; }
56 const std::string name;
59 std::list<const value*> list_of_possible_values;
62 variable(
const std::string & n): name(n) {}
63 virtual bool get_is_input_variable()
const {
return false; }
64 virtual bool get_is_hidden_variable()
const {
return false; }
65 virtual bool get_is_output_variable()
const {
return false; }
66 virtual const std::string get_type_name()
const = 0;
68 const std::string & get_name()
const {
return name; }
70 void add_possible_value(
const value * v)
72 list_of_possible_values.push_back(v);
74 const std::list<const value*> & get_list_of_possible_values()
const {
return list_of_possible_values; }
76 bool get_can_have_value(
const value * v)
const;
78 virtual void report_xml(std::ostream & s)
const = 0;
89 std::vector<value*> vector_of_values;
94 std::vector<value*>& get_vector_of_values() {
return vector_of_values; }
96 value* get_value(
const char * v);
106 virtual bool get_is_input_variable()
const {
return true; }
107 virtual const std::string get_type_name()
const {
return "input"; }
108 virtual void report_xml(std::ostream & s)
const
110 s <<
"<perkun:input_variable name=\"" << get_name() <<
"\">\n";
111 s <<
"<perkun:possible_values>\n";
112 for (std::list<const value*>::const_iterator i(list_of_possible_values.begin());
113 i != list_of_possible_values.end(); i++)
115 s <<
"<perkun:value name=\"" << (*i)->get_name() <<
"\" />\n";
117 s <<
"</perkun:possible_values>\n";
118 s <<
"</perkun:input_variable>\n";
129 virtual bool get_is_output_variable()
const {
return true; }
130 virtual const std::string get_type_name()
const {
return "output"; }
131 virtual void report_xml(std::ostream & s)
const
133 s <<
"<perkun:output_variable name=\"" << get_name() <<
"\">\n";
134 s <<
"<perkun:possible_values>\n";
135 for (std::list<const value*>::const_iterator i(list_of_possible_values.begin());
136 i != list_of_possible_values.end(); i++)
138 s <<
"<perkun:value name=\"" << (*i)->get_name() <<
"\" />\n";
140 s <<
"</perkun:possible_values>\n";
141 s <<
"</perkun:output_variable>\n";
152 virtual bool get_is_hidden_variable()
const {
return true; }
153 virtual const std::string get_type_name()
const {
return "hidden"; }
154 virtual void report_xml(std::ostream & s)
const
156 s <<
"<perkun:hidden_variable name=\"" << get_name() <<
"\">\n";
157 s <<
"<perkun:possible_values>\n";
158 for (std::list<const value*>::const_iterator i(list_of_possible_values.begin());
159 i != list_of_possible_values.end(); i++)
161 s <<
"<perkun:value name=\"" << (*i)->get_name() <<
"\" />\n";
163 s <<
"</perkun:possible_values>\n";
164 s <<
"</perkun:hidden_variable>\n";
174 std::vector<variable*> vector_of_variables;
178 std::vector<variable*> & get_vector_of_variables() {
return vector_of_variables; }
180 variable * get_variable(
const char * v);
205 const value * get_output_variable_value(
variable * v)
const {
return map_output_variable_to_value.at(v); }
207 void insert(variable * v, value * w) { map_output_variable_to_value.insert(std::pair<variable*,value*>(v, w)); }
209 void report(std::ostream & s)
const;
211 void report_xml(std::ostream & s)
const;
213 bool get_match(
const std::map<variable*, value*> & m)
const;
215 const std::map<variable*, value*>& get_map_output_variable_to_value()
const
231 std::list<action*> list_of_actions;
233 bool get_allowed(
const std::map<
variable*, std::vector<value*>::const_iterator> & m)
const;
237 my_variables(v), my_values(w) {}
243 const std::list<action*> & get_list_of_actions()
const {
return list_of_actions; }
245 std::list<action*> & get_list_of_actions() {
return list_of_actions; }
247 action *
get(
const std::map<variable*, value*> & m);
265 std::map<variable*, value*> map_hidden_variable_to_value;
267 std::map<const action*, std::map<state*,float> > map_action_to_probability_distribution;
275 my_visible_state(vs),
283 return map_hidden_variable_to_value.at(v);
286 void insert(
variable * v,
value * w) { map_hidden_variable_to_value.insert(std::pair<variable*,value*>(v, w)); }
288 void report(std::ostream & s)
const;
290 void report_xml(std::ostream & s,
bool with_model =
true)
const;
292 bool get_match(
const std::map<variable*, value*> & m)
const;
294 void set_model(
action * a, std::map<state*,float> & m)
296 map_action_to_probability_distribution.insert(std::pair<
const action*,std::map<state*,float> >(a, m));
299 const visible_state & get_visible_state()
const {
return my_visible_state; }
301 const std::map<const action*, std::map<state*,float> > & get_map_action_to_probability_distribution()
const
302 {
return map_action_to_probability_distribution; }
304 std::map<const action*, std::map<state*,float> > & get_map_action_to_probability_distribution()
305 {
return map_action_to_probability_distribution; }
307 void make_random_model();
309 int get_model_size()
const;
316 void set_impossible()
321 bool get_possible()
const {
return !impossible; }
338 std::list<state*> list_of_states;
339 std::map<variable*,value*> map_input_variable_to_value;
347 bool get_allowed(
const std::map<
variable*, std::vector<value*>::const_iterator> & m)
const;
358 void insert(
variable * v,
value * w) { map_input_variable_to_value.insert(std::pair<variable*,value*>(v, w)); }
362 void report(std::ostream & s)
const;
364 void report_xml(std::ostream & s,
bool with_states =
true)
const;
366 bool get_match(
const std::map<variable*, value*> & m)
const;
368 state *
get(
const std::map<variable*, value*> & m);
370 const state *
get(
const std::map<variable*, value*> & m)
const;
372 const value* get_input_variable_value(variable* v)
const {
return map_input_variable_to_value.at(v); }
374 const std::list<state*> & get_list_of_states()
const {
return list_of_states; }
376 std::list<state*> & get_list_of_states() {
return list_of_states; }
378 float get_payoff()
const;
380 const collection_of_visible_states & get_visible_states()
const {
return my_visible_states; }
382 collection_of_visible_states & get_visible_states() {
return my_visible_states; }
384 void make_random_model();
386 int get_amount_of_states()
const {
return list_of_states.size(); }
388 int get_model_size()
const;
390 void test_model()
const;
392 int get_amount_of_possible_states()
const;
394 void set_illegal(action * a) { list_of_illegal_actions.push_back(a); }
396 bool get_is_illegal(action * a)
const;
404 class query:
public std::map<variable*, value*>
410 my_variables(v), std::map<variable*, value*>(m) {}
411 void report(std::ostream & s)
const;
414 void make_input_query();
417 void make_hidden_query();
419 void check_contains_all_input_variables()
const;
421 void check_contains_only_input_variables()
const;
423 void check_contains_all_hidden_variables()
const;
425 void check_contains_only_input_or_hidden_variables()
const;
427 void check_contains_all_output_variables()
const;
429 void check_contains_only_output_variables()
const;
443 std::list<visible_state*> list_of_visible_states;
445 std::map<const visible_state*,float> map_visible_state_to_payoff_value;
447 bool get_allowed(
const std::map<
variable*, std::vector<value*>::const_iterator> & m)
const;
455 const visible_state *
get(
const std::map<variable*, value*> & m)
const;
461 return map_visible_state_to_payoff_value.at(s);
466 if (map_visible_state_to_payoff_value.find(s) == map_visible_state_to_payoff_value.end())
467 map_visible_state_to_payoff_value.insert(std::pair<const visible_state *,float>(s, p));
469 map_visible_state_to_payoff_value[s] = p;
472 void set_payoff(
const std::map<variable*, value*> & m,
float p)
477 throw std::runtime_error(
"query failed");
483 void report(std::ostream & s)
const;
485 void report_xml(std::ostream & s)
const;
487 const std::list<visible_state*> & get_list_of_visible_states()
const {
return list_of_visible_states; }
489 std::list<visible_state*> & get_list_of_visible_states() {
return list_of_visible_states; }
491 void make_random_model();
493 void make_random_payoff();
495 int get_amount_of_states()
const;
497 void test_model()
const;
508 std::map<state *, float> map_state_to_probability;
511 float get_probability(
state * s)
const;
513 void set_probability(
state * s,
float p) { map_state_to_probability.insert(std::pair<state*,float>(s, p)); }
515 void set_probability(
const std::map<variable*, value*> &
query,
float p)
517 state * s = my_visible_state.get(query);
520 throw std::runtime_error(
"query failed");
522 set_probability(s, p);
525 void report(std::ostream & s)
const;
527 void report_xml(std::ostream & s)
const;
531 const visible_state & get_visible_state()
const {
return my_visible_state; }
559 tracker(std::list<tracker*> & stack, std::string f,
int line);
576 virtual void report(std::ostream & s)
const;
578 virtual void report_xml(std::ostream & s)
const;
589 enum target_type { COUT = 0x1, CERR = 0x2, SINGLE_FILE = 0x4, ITERATED_FILES = 0x8 };
591 enum dump_stack_mode_type { dump_stack_as_XML, dump_stack_as_text };
593 enum dump_belief_mode_type { dump_belief_as_XML, dump_belief_as_text };
595 enum dump_iteration_report_mode_type { dump_iteration_report_as_XML, dump_iteration_report_as_text };
597 dump_stack_mode_type dump_stack_mode;
599 dump_belief_mode_type dump_belief_mode;
601 dump_iteration_report_mode_type dump_iteration_report_mode;
603 target_type dump_stack_target, dump_belief_target, dump_iteration_report_target;
606 int min_report_depth, max_report_depth;
608 int stack_file_counter, belief_file_counter, iteration_report_file_counter;
610 virtual void dump_stack(std::ostream & s)
const = 0;
611 virtual void dump_stack_XML(std::ostream & s)
const = 0;
613 virtual void dump_iteration_report(std::ostream & s)
const = 0;
614 virtual void dump_iteration_report_XML(std::ostream & s)
const = 0;
616 virtual void dump_belief(std::ostream & s)
const = 0;
617 virtual void dump_belief_XML(std::ostream & s)
const = 0;
619 virtual std::string get_stack_file_prefix()
const;
620 virtual std::string get_iteration_report_file_prefix()
const;
621 virtual std::string get_belief_file_prefix()
const;
624 void dump_stack_to_target_stream();
625 void dump_belief_to_target_stream();
626 void dump_iteration_report_to_target_stream();
629 void set_min_report_depth(
int d) { min_report_depth = d; }
630 void set_max_report_depth(
int d) { max_report_depth = d; }
665 virtual void dump_stack(std::ostream & s)
const;
666 virtual void dump_stack_XML(std::ostream & s)
const;
668 virtual void dump_iteration_report(std::ostream & s)
const;
669 virtual void dump_iteration_report_XML(std::ostream & s)
const;
681 std::list<action*>::const_iterator & my_iterator;
686 float & max,
action *& argmax, std::list<action*>::const_iterator & i,
int l,
690 float get_max()
const;
691 action * get_argmax()
const;
692 action * get_current_action()
const;
693 int get_level()
const;
694 const belief & get_belief()
const;
696 virtual void report(std::ostream & s)
const;
697 virtual void report_xml(std::ostream & s)
const;
766 my_visible_states(vs),
821 enum mode_type { NONE, DECLARING_VALUES, DECLARING_VARIABLES_VALUES } mode;
830 std::map<variable*, value*> q, initial_state_query, action_query;
832 belief *current_belief, *former_belief;
834 const action * former_action;
836 std::list<variable*> list_of_input_variables;
840 variable * get_variable(
const char * v);
842 value * get_value(
const char * v);
844 bool get_special_command(
const char * buffer)
const;
846 void execute_special_command(
const char * buffer);
848 void explain()
const;
855 void declare_values();
856 void declare_variables_values();
857 void add_value(
const char * s);
859 void create_input_variable(
const char * s);
860 void create_hidden_variable(
const char * s);
861 void create_output_variable(
const char * s);
865 void test_model()
const;
869 void assert_query_fact(
const char * v,
const char * val);
871 int parse(
const char * filename);
880 virtual void print_initial_loop_message()
const;
882 virtual void print_current_belief();
888 virtual void get_input(std::map<variable*, value*> & m,
bool & eof);
896 virtual void dump_belief(std::ostream & s)
const;
897 virtual void dump_belief_XML(std::ostream & s)
const;
902 std::ostream& operator<<(std::ostream & s,
const perkun::query & q);
std::map< variable *, value * > map_output_variable_to_value
Definition: perkun.h:196
virtual void action_iteration_increment(std::list< action * >::const_iterator &target)
Definition: action_iteration_controller.cc:29
virtual bool get_action_iteration_terminated(const std::list< action * >::const_iterator &i)
Definition: action_iteration_controller.cc:34
virtual void set_apriori_belief(belief *b) const
Definition: optimizer_with_all_data.cc:40
virtual void on_error_in_populate_belief_for_consequence(const belief &b1, const action &a, const visible_state &vs, belief &target) const
Definition: optimizer.cc:24
std::list< tracker * > & my_stack
Definition: perkun.h:544
const std::string & get_function_name() const
Definition: tracker.cc:35
virtual void dump_stack(std::ostream &s) const
Definition: class_with_tracking.cc:25
const action * get_optimal_action(const belief &b, int n)
Definition: optimizer.cc:146
mode_type
Definition: perkun.h:821
virtual void execute(const action *a)
Definition: optimizer_with_all_data.cc:444
float get_payoff_expected_value_for_consequences(const belief &b1, int n, const action &a)
Definition: optimizer.cc:110
std::list< tracker * > stack_of_trackers
Definition: perkun.h:647
int my_line_number
Definition: perkun.h:554
decision
Definition: perkun.h:652
int get_line_number() const
Definition: tracker.cc:37
tracker(std::list< tracker * > &stack, std::string f, int line)
Definition: tracker.cc:25
void populate_belief_for_consequence(const belief &b1, const action &a, const visible_state &vs, belief &target) const
Definition: optimizer.cc:33
virtual std::list< action * >::const_iterator get_action_iteration_begin()
Definition: action_iteration_controller.cc:24
~tracker()
Definition: tracker.cc:30
std::list< action * > list_of_illegal_actions
Definition: perkun.h:345
virtual decision make_decision(const std::list< tracker * > &s)
Definition: class_with_tracking.cc:69
virtual void get_input(std::map< variable *, value * > &m, bool &eof)
Definition: optimizer_with_all_data.cc:391
const std::string my_function_name
Definition: perkun.h:549
float get_consequence_probability(const belief &b1, const action &a, const visible_state &vs) const
Definition: optimizer.cc:86
void test_model() const
Definition: state.cc:152