19 using namespace shogun;
57 else if (type.
m_ctype==CT_SCALAR)
63 m_parameters_length++;
68 SG_WARNING(
"Parameter %s.%s was not added to parameter combination, "
69 "since it isn't of floating point type\n", obj->
get_name(),
95 m_child_nodes->append_element(comb);
107 void CParameterCombination::init()
109 m_parameters_length=0;
114 SG_ADD((
CSGObject**)&m_child_nodes,
"child_nodes",
"Children of this node",
126 m_child_nodes->append_element(child);
130 const char* name,
bool value,
index_t index)
134 for (
index_t i = 0; i < m_param->get_num_parameters(); ++i)
136 void* param = m_param->get_parameter(i)->m_parameter;
138 if (!strcmp(m_param->get_parameter(i)->m_name, name))
140 if (m_param->get_parameter(i)->m_datatype.m_ptype
142 SG_ERROR(
"Parameter %s not a boolean parameter", name)
145 *((
bool*)(param)) = value;
148 (*((
bool**)(param)))[index] = value;
160 const char* name, int32_t value,
index_t index)
164 for (
index_t i = 0; i < m_param->get_num_parameters(); ++i)
166 void* param = m_param->get_parameter(i)->m_parameter;
168 if (!strcmp(m_param->get_parameter(i)->m_name, name))
170 if (m_param->get_parameter(i)->m_datatype.m_ptype
172 SG_ERROR(
"Parameter %s not a integer parameter", name)
175 *((int32_t*)(param)) = value;
178 (*((int32_t**)(param)))[index] = value;
193 for (
index_t i = 0; i < m_param->get_num_parameters(); ++i)
195 void* param = m_param->get_parameter(i)->m_parameter;
197 if (!strcmp(m_param->get_parameter(i)->m_name, name))
199 if (m_param->get_parameter(i)->m_datatype.m_ptype
201 SG_ERROR(
"Parameter %s not a double parameter", name)
207 (*((
float64_t**)(param)))[index] = value;
223 for (
index_t i = 0; i < m_param->get_num_parameters(); i++)
225 if (!strcmp(m_param->get_parameter(i)->m_name, name))
226 return m_param->get_parameter(i);
242 for (
index_t i = 0; i < m_param->get_num_parameters(); i++)
244 if (m_param->get_parameter(i)->m_datatype.m_ptype==PT_SGOBJECT)
247 (*((
CSGObject**)m_param->get_parameter(i)->m_parameter));
255 for (
index_t i = 0; i < m_child_nodes->get_num_elements(); ++i)
258 m_child_nodes->get_element(i);
295 char* prefix=SG_MALLOC(
char, prefix_num+1);
296 for (
index_t i=0; i<prefix_num; ++i)
299 prefix[prefix_num]=
'\0';
309 for (
index_t i=0; i<m_param->get_num_parameters(); ++i)
312 if (m_param->get_parameter(i)->m_datatype.m_ptype==PT_SGOBJECT)
317 current_sgobject->
get_name(), current_sgobject);
320 else if (m_param->get_parameter(i)->m_datatype.m_ctype == CT_SGVECTOR)
322 SG_SPRINT(
"\"%s\"=", m_param->get_parameter(i)->m_name)
324 get_parameter(i)->m_parameter);
325 if (!m_param->get_parameter(i)->m_datatype.m_length_y)
327 SG_ERROR(
"Parameter vector %s has no length\n",
328 m_param->get_parameter(i)->m_name);
331 index_t length = *(m_param->get_parameter(i)->m_datatype.m_length_y);
333 for (
index_t j = 0; j < length; j++)
339 SG_SPRINT(
"\"%s\"=", m_param->get_parameter(i)->m_name)
340 void* param=m_param->get_parameter(i)->m_parameter;
342 if (m_param->get_parameter(i)->m_datatype.m_ptype==PT_FLOAT64)
344 else if (m_param->get_parameter(i)->m_datatype.m_ptype==PT_INT32)
346 else if (m_param->get_parameter(i)->m_datatype.m_ptype==PT_BOOL)
347 SG_SPRINT(
"%s ", *((
bool*)param ?
"true" :
"false"))
360 for (
index_t i=0; i<m_child_nodes->get_num_elements(); ++i)
363 m_child_nodes->get_element(i);
374 SG_SDEBUG(
"entering CParameterCombination::parameter_set_multiplication()\n")
399 result->append_element(p);
403 SG_SDEBUG(
"leaving CParameterCombination::parameter_set_multiplication()\n")
420 *result=*current_set;
456 SG_SERROR(
"leaf sets multiplication only possible if all "
466 SG_SERROR(
"leaf sets multiplication only possible if all "
467 "leafs have non-NULL Parameter instances\n");
478 *param_sets[0], *param_sets[1]);
480 delete param_sets[0];
481 delete param_sets[1];
488 param_product=parameter_set_multiplication(*param_product,
496 delete old_temp_result;
497 delete param_sets[i];
522 delete param_product;
532 SG_SDEBUG(
"entering CParameterCombination::non_value_tree_multiplication()\n")
560 for (set<string>::iterator it=names.begin(); it!=names.end(); ++it)
572 const char* first_name=(*(names.begin())).c_str();
576 SG_SDEBUG(
"adding trees for first name \"%s\":\n", first_name)
592 SG_SDEBUG(
"building products with remaining trees:\n")
593 set<string>::iterator it=names.begin();
594 for (++it; it!=names.end(); ++it)
596 SG_SDEBUG(
"processing \"%s\"\n", (*it).c_str())
599 const char* current_name=(*it).c_str();
636 SG_SDEBUG(
"leaving CParameterCombination::non_value_tree_multiplication()\n")
658 if (!strcmp(current_name, desired_name))
685 for (
index_t i=0; i<m_child_nodes->get_num_elements(); ++i)
688 m_child_nodes->get_element(i);
710 for (
index_t i=0; i<m_child_nodes->get_num_elements(); ++i)
713 m_child_nodes->get_element(i);
729 if (m_param->get_num_parameters()>1 ||
730 m_param->get_parameter(0)->m_datatype.m_ptype!=PT_SGOBJECT)
732 SG_SERROR(
"invalid CParameterCombination node type, has children"
733 " and more than one parameter or is not a "
739 *((
CSGObject**)(m_param->get_parameter(0)->m_parameter));
743 for (
index_t i=0; i<m_child_nodes->get_num_elements(); ++i)
746 m_child_nodes->get_element(i);
754 SG_SERROR(
"CParameterCombination node has illegal type.\n")
762 for (
index_t i=0; i<m_param->get_num_parameters(); i++)
774 dict->add(param, value);
776 else if (type.
m_ctype==CT_SCALAR)
780 dict->add(param, value);
786 for (
index_t i=0; i<m_child_nodes->get_num_elements(); i++)
789 m_child_nodes->get_element(i);
802 for (
index_t i=0; i<m_param->get_num_parameters(); i++)
822 for (
index_t i=0; i<m_child_nodes->get_num_elements(); i++)
825 m_child_nodes->get_element(i);
845 dict->
add(param, parent);