Vowpal Wabbit
Classes | Functions | Variables
SequenceTask_DemoLDF Namespace Reference

Classes

struct  task_data
 

Functions

void initialize (Search::search &sch, size_t &num_actions, options_i &)
 
void finish (Search::search &sch)
 
void my_update_example_indicies (Search::search &sch, bool, example *ec, uint64_t mult_amount, uint64_t plus_amount)
 
void run (Search::search &sch, multi_ex &ec)
 

Variables

Search::search_task task = {"sequence_demoldf", run, initialize, finish, nullptr, nullptr}
 

Function Documentation

◆ finish()

void SequenceTask_DemoLDF::finish ( Search::search sch)

Definition at line 402 of file search_sequencetask.cc.

References a, COST_SENSITIVE::cs_label, VW::dealloc_example(), CB::delete_label(), Search::search::get_task_data(), SequenceTask_DemoLDF::task_data::ldf_examples, and SequenceTask_DemoLDF::task_data::num_actions.

403 {
404  task_data* data = sch.get_task_data<task_data>();
405  for (size_t a = 0; a < data->num_actions; a++) VW::dealloc_example(CS::cs_label.delete_label, data->ldf_examples[a]);
406  free(data->ldf_examples);
407  free(data);
408 }
label_parser cs_label
void dealloc_example(void(*delete_label)(void *), example &ec, void(*delete_prediction)(void *))
Definition: example.cc:219
void delete_label(void *v)
Definition: cb.cc:98
T * get_task_data()
Definition: search.h:89
constexpr uint64_t a
Definition: rand48.cc:11

◆ initialize()

void SequenceTask_DemoLDF::initialize ( Search::search sch,
size_t &  num_actions,
options_i  
)

Definition at line 379 of file search_sequencetask.cc.

References a, VW::alloc_examples(), Search::AUTO_CONDITION_FEATURES, Search::AUTO_HAMMING_LOSS, COST_SENSITIVE::label::costs, polylabel::cs, COST_SENSITIVE::cs_label, label_parser::default_label, Search::search::get_vw_pointer_unsafe(), example_predict::interactions, vw::interactions, Search::IS_LDF, example::l, SequenceTask_DemoLDF::task_data::ldf_examples, SequenceTask_DemoLDF::task_data::num_actions, Search::search::set_options(), and Search::search::set_task_data().

380 {
381  CS::wclass default_wclass = {0., 0, 0., 0.};
382 
383  example* ldf_examples = VW::alloc_examples(sizeof(CS::label), num_actions);
384  for (size_t a = 0; a < num_actions; a++)
385  {
386  CS::label& lab = ldf_examples[a].l.cs;
388  lab.costs.push_back(default_wclass);
389  ldf_examples[a].interactions = &sch.get_vw_pointer_unsafe().interactions;
390  }
391 
392  task_data* data = &calloc_or_throw<task_data>();
393  data->ldf_examples = ldf_examples;
394  data->num_actions = num_actions;
395 
396  sch.set_task_data<task_data>(data);
397  sch.set_options(Search::AUTO_CONDITION_FEATURES | // automatically add history features to our examples, please
398  Search::AUTO_HAMMING_LOSS | // please just use hamming loss on individual predictions -- we won't declare loss
399  Search::IS_LDF); // we generate ldf examples
400 }
label_parser cs_label
std::vector< std::string > * interactions
void(* default_label)(void *)
Definition: label_parser.h:12
example * alloc_examples(size_t, size_t count=1)
Definition: example.cc:204
uint32_t AUTO_CONDITION_FEATURES
Definition: search.cc:49
vw & get_vw_pointer_unsafe()
Definition: search.cc:3115
COST_SENSITIVE::label cs
Definition: example.h:30
uint32_t IS_LDF
Definition: search.cc:49
void set_options(uint32_t opts)
Definition: search.cc:3053
uint32_t AUTO_HAMMING_LOSS
Definition: search.cc:49
polylabel l
Definition: example.h:57
constexpr uint64_t a
Definition: rand48.cc:11
void set_task_data(T *data)
Definition: search.h:84
std::vector< std::string > interactions
Definition: global_data.h:457
v_array< wclass > costs

◆ my_update_example_indicies()

void SequenceTask_DemoLDF::my_update_example_indicies ( Search::search sch,
bool  ,
example ec,
uint64_t  mult_amount,
uint64_t  plus_amount 
)

Definition at line 411 of file search_sequencetask.cc.

References Search::search::get_stride_shift().

Referenced by run().

413 {
414  size_t ss = sch.get_stride_shift();
415  for (features& fs : *ec)
416  for (feature_index& idx : fs.indicies) idx = (((idx >> ss) * mult_amount) + plus_amount) << ss;
417 }
size_t get_stride_shift()
Definition: search.cc:3097
the core definition of a set of features.
uint64_t feature_index
Definition: feature_group.h:21

◆ run()

void SequenceTask_DemoLDF::run ( Search::search sch,
multi_ex ec 
)

Definition at line 419 of file search_sequencetask.cc.

References a, VW::copy_example_data(), COST_SENSITIVE::label::costs, polylabel::cs, Search::search::get_history_length(), Search::search::get_task_data(), example::l, SequenceTask_DemoLDF::task_data::ldf_examples, my_update_example_indicies(), SequenceTask_DemoLDF::task_data::num_actions, Search::search::output(), predict(), and Search::search::predictNeedsExample().

420 {
421  task_data* data = sch.get_task_data<task_data>();
422  Search::predictor P(sch, (ptag)0);
423  for (ptag i = 0; i < ec.size(); i++)
424  {
425  for (uint32_t a = 0; a < data->num_actions; a++)
426  {
427  if (sch.predictNeedsExample()) // we can skip this work if `predict` won't actually use the example data
428  {
429  VW::copy_example_data(false, &data->ldf_examples[a], ec[i]); // copy but leave label alone!
430  // now, offset it appropriately for the action id
431  my_update_example_indicies(sch, true, &data->ldf_examples[a], 28904713, 4832917 * (uint64_t)a);
432  }
433 
434  // regardless of whether the example is needed or not, the class info is needed
435  CS::label& lab = data->ldf_examples[a].l.cs;
436  // need to tell search what the action id is, so that it can add history features correctly!
437  lab.costs[0].x = 0.;
438  lab.costs[0].class_index = a + 1;
439  lab.costs[0].partial_prediction = 0.;
440  lab.costs[0].wap_value = 0.;
441  }
442 
443  action oracle = ec[i]->l.multi.label - 1;
444  action pred_id = P.set_tag((ptag)(i + 1))
445  .set_input(data->ldf_examples, data->num_actions)
446  .set_oracle(oracle)
447  .set_condition_range(i, sch.get_history_length(), 'p')
448  .predict();
449  action prediction = pred_id + 1; // or ldf_examples[pred_id]->ld.costs[0].weight_index
450 
451  if (sch.output().good())
452  sch.output() << prediction << ' ';
453  }
454 }
uint32_t get_history_length()
Definition: search.cc:3098
std::stringstream & output()
Definition: search.cc:3043
void copy_example_data(bool audit, example *dst, example *src)
Definition: example.cc:72
uint32_t action
Definition: search.h:19
T * get_task_data()
Definition: search.h:89
void my_update_example_indicies(Search::search &sch, bool, example *ec, uint64_t mult_amount, uint64_t plus_amount)
constexpr uint64_t a
Definition: rand48.cc:11
void predict(bfgs &b, base_learner &, example &ec)
Definition: bfgs.cc:956
uint32_t ptag
Definition: search.h:20
bool predictNeedsExample()
Definition: search.cc:3041
v_array< wclass > costs

Variable Documentation

◆ task

Search::search_task SequenceTask_DemoLDF::task = {"sequence_demoldf", run, initialize, finish, nullptr, nullptr}

Definition at line 29 of file search_sequencetask.cc.