/* 最適コストを可能ならば更新する * f==true: minimize * f==false: maximize */ void lmn_update_opt_cost(LmnWorkerGroup *wp, State *new_s, BOOL f) { if (env_threads_num() >= 2) workers_opt_end_lock(wp); if ((f && workers_opt_cost(wp) > state_cost(new_s)) || (!f && workers_opt_cost(wp) < state_cost(new_s))) { workers_opt_end_state(wp) = new_s; } if (env_threads_num() >= 2) workers_opt_end_unlock(wp); }
LmnCost workers_opt_cost(LmnWorkerGroup *wp) { LmnCost cost; State *opt = workers_opt_end_state(wp); if (!opt) { cost = lmn_env.opt_mode == OPT_MINIMIZE ? ULONG_MAX : 0; } else { cost = state_cost(opt); } return cost; }
double default_uniform_t::trajectory_cost(const trajectory_t& t) { PRX_ASSERT(t.size()>0); double cost = 0; trajectory_t::const_iterator i = t.begin(); trajectory_t::const_iterator j = t.begin(); j++; for ( ; j != t.end(); ++i,++j) { cost+=dist(*i,*j)*state_cost(*j); } return cost; }
/** Printer * ownerはNULLでもok */ void dump_state_data(State *s, LmnWord _fp, LmnWord _owner) { FILE *f; StateSpace owner; unsigned long print_id; #ifdef KWBT_OPT LmnCost cost = lmn_env.opt_mode != OPT_NONE ? state_cost(s) : 0UL; #endif /* Rehashが発生している場合, * dummyフラグが真かつエンコード済みフラグが偽のStateオブジェクトが存在する. * このようなStateオブジェクトのバイナリストリングは * Rehashされた側のテーブルに存在するStateオブジェクトに登録されているためcontinueする. */ if (is_dummy(s) && !is_encoded(s)) return; f = (FILE *)_fp; owner = (StateSpace)_owner; { /* この時点で状態は, ノーマル || (dummyフラグが立っている && エンコード済)である. * dummyならば, バイナリストリング以外のデータはオリジナル側(parent)に記録している. */ State *target = !is_dummy(s) ? s : state_get_parent(s); if (owner) { print_id = state_format_id(target, owner->is_formated); } else { print_id = state_format_id(target, FALSE); } } switch (lmn_env.mc_dump_format) { case LaViT: fprintf(f, "%lu::", print_id); state_print_mem(s, _fp); break; case FSM: /* under constructions.. */ fprintf(f, "1\n"); break; case Dir_DOT: if (state_succ_num(s) == 0) { fprintf(f, " %lu [style=filled, fillcolor = \"#C71585\", shape = Msquare];\n", print_id); } break; case CUI: { BOOL has_property = owner && statespace_has_property(owner); #ifdef KWBT_OPT fprintf(f, "%lu::%lu::%s" , print_id, cost , has_property ? automata_state_name(statespace_automata(owner), state_property_state(s)) : ""); #else fprintf(f, "%lu::%s" , print_id , has_property ? automata_state_name(statespace_automata(owner), state_property_state(s)) : ""); #endif state_print_mem(s, _fp); break; } default: lmn_fatal("unexpected"); break; } }