コード例 #1
0
 void
 generateMT
 (
     int stripe
 )
 {
     // Randomly estimate the best pair of sub-patches
     boost::mt19937 rng(abs(stripe+1) * std::time(NULL));
     if (Sample::generateSplit(m_samples, &rng, m_patch_size, m_splits[stripe]))
     {
         // Process each patch with the selected R1 and R2
         std::vector<IntIndex> val_set(m_samples.size());
         for (unsigned int i=0; i < m_samples.size(); ++i)
         {
             val_set[i].first  = m_samples[i]->evalTest(m_splits[stripe]);
             val_set[i].second = i;
         }
         std::sort(val_set.begin(), val_set.end()); // sort by f_theta
         findThreshold(m_samples, val_set, m_splits[stripe], &rng);
         m_splits[stripe].oob = 0;
     }
     else
     {
         m_splits[stripe].threshold = 0;
         m_splits[stripe].info = boost::numeric::bounds<double>::lowest();
         m_splits[stripe].oob  = boost::numeric::bounds<double>::highest();
     }
 };
コード例 #2
0
ファイル: intervals.cpp プロジェクト: fritzo/pomagma
SetId Approximator::function_lhs_rhs(const Function& fun, SetId lhs, SetId rhs,
                                     Parity parity) const {
    POMAGMA_ASSERT1(lhs, "lhs is undefined");
    POMAGMA_ASSERT1(rhs, "rhs is undefined");
    POMAGMA_ASSERT1(parity == ABOVE or parity == BELOW, "invalid parity");
    const bool upward = (parity == ABOVE);
    const DenseSet lhs_set = m_sets.load(lhs);  // positive
    const DenseSet rhs_set = m_sets.load(rhs);  // positive
    DenseSet val_set(m_item_dim);               // positive

    const Ob optimum = upward ? m_top : m_bot;
    POMAGMA_ASSERT1(lhs_set.contains(optimum), "invalid lhs set");
    POMAGMA_ASSERT1(rhs_set.contains(optimum), "invalid rhs set");
    val_set.insert(optimum);

    DenseSet temp_set(m_item_dim);
    for (auto iter = lhs_set.iter(); iter.ok(); iter.next()) {
        Ob lhs = *iter;

        // optimize for constant functions
        if (Ob lhs_top = fun.find(lhs, m_top)) {
            if (Ob lhs_bot = fun.find(lhs, m_bot)) {
                if (lhs_top == lhs_bot) {
                    convex_insert(val_set, lhs_top, upward);
                    continue;
                }
            }
        }

        temp_set.set_insn(rhs_set, fun.get_Lx_set(lhs));
        for (auto iter = temp_set.iter(); iter.ok(); iter.next()) {
            Ob rhs = *iter;
            Ob val = fun.find(lhs, rhs);
            convex_insert(val_set, val, upward);
        }
    }

    return m_sets.store(std::move(val_set));
}