示例#1
0
文件: matching.cpp 项目: cutun/kazoo
void HardMatching::normalize ()
{
  optimize_1();

  for (size_t i = 0; i < size_1(); ++i) {
    m_1_non[i] = true;
  }
  for (size_t ij = 0; ij < size_arc(); ++ij) {
    Arc arc = m_arcs[ij];
    m_1_ass[ij] = (m_post_ass[ij] == m_optima[arc.i]);
  }

  optimize_2();

  for (size_t j = 0; j < size_2(); ++j) {
    m_2_non[j] = true;
  }
  for (size_t ij = 0; ij < size_arc(); ++ij) {
    Arc arc = m_arcs[ij];
    m_2_ass[ij] = (m_post_ass[ij] == m_optima[arc.j]);

    if (post_1_ass(ij) and post_2_ass(ij)) {
      m_1_ass[ij] = true;
      m_1_non[arc.i] = false;
      m_2_non[arc.j] = false;
    } else {
      m_1_ass[ij] = false;
    }
  }
}
示例#2
0
文件: matching.cpp 项目: cutun/kazoo
void HardMatching::propagate_12 ()
{
  optimize_1();

  for (size_t ij = 0; ij < size_arc(); ++ij) {
    Arc arc = m_arcs[ij];

    float message = m_message_12[ij]
                 = -m_optima[arc.i].best_alternative(m_post_ass[ij]);
    m_post_ass[ij] = message
                   + m_message_21[ij]
                   + m_prior_ass[ij];

    ASSERT1_COST(m_post_ass[ij]);
  }
}
示例#3
0
/*-------------------------------------------------------------------------*/
static void
optimize(curr_poly_t *c, poly_stage2_t *data,
         root_sieve_t *rs, assess_t *assess,
         stage2_stat_t *stats)
{
    int err;
    double skewness;
    double pol_norm;
    double alpha_proj;
    double log_max_norm_2 = log(data->max_norm_2);

    profile_start(PROF_ALL);

    while (1) {
        err = read_a5pd(c, data);
        if (err < 0) {
            if (feof(data->infile))
                break;
            continue;
        }
        if (!pol_expand(c, data->gmp_N)) {
            mpz_out_str(stdout, 10, c->gmp_a[5]);
            fprintf(stderr, "expand failed\n");
            continue;
        }
        profile_start(PROF_INITIAL_OPTIMIZE);
        optimize_1(c, &skewness, &pol_norm, &alpha_proj);
        profile_stop(PROF_INITIAL_OPTIMIZE);

        if (pol_norm * exp(alpha_proj) > data->max_norm_1)
            continue;
        root_sieve_run(c, log_max_norm_2, data, rs, assess,
                       stats, skewness, pol_norm, alpha_proj);
    }

    profile_stop(PROF_ALL);
}