コード例 #1
0
ファイル: gauss.cpp プロジェクト: mikestillman/practice1
GaussElimComputation::GaussElimComputation(const Matrix *m, int collsyz, int nsyz)
  : row(m->n_rows()-1),
    R(m->get_ring()),
    gens(m),
    n_gb(0),
    n_pairs(0),
    n_syz(0),
    collect_syz(collsyz)
{
  int i;

  typedef struct gm_elem *gm_elem_ptr;
  reduce_list = newarray(gm_elem_ptr,m->n_rows());
  gb_list = newarray(gm_elem_ptr,m->n_rows());

  for (i=0; i<m->n_rows(); i++)
    {
      reduce_list[i] = NULL;
      gb_list[i] = NULL;
    }

  if (nsyz < 0 || nsyz > m->n_cols())
    nsyz = m->n_cols();
  n_comps_per_syz = nsyz;
  Fsyz = m->cols()->sub_space(nsyz);

  for (i=0; i<m->n_cols(); i++)
    {
      gm_elem *p = new_gen(i);
      insert(p);
    }
}
コード例 #2
0
/*
 * Initialize an allocated mount node.
 * It is assumed that the mount node was b-zero'd
 * before getting here so anything that would
 * be set to zero isn't done here.
 */
void
init_map(am_node *mp, char *dir)
{
  /*
   * mp->am_mapno is initialized by exported_ap_alloc
   * other fields don't need to be set to zero.
   */
  mp->am_mnt = new_mntfs();
  mp->am_mfarray = 0;
  mp->am_name = strdup(dir);
  mp->am_path = strdup(dir);
  mp->am_gen = new_gen();
#ifdef HAVE_FS_AUTOFS
  mp->am_autofs_fh = 0;
#endif /* HAVE_FS_AUTOFS */

  mp->am_timeo = gopt.am_timeo;
  mp->am_attr.ns_status = NFS_OK;
  mp->am_fattr = gen_fattr;
  mp->am_fattr.na_fsid = 42;
  mp->am_fattr.na_fileid = mp->am_gen;
  clocktime(&mp->am_fattr.na_atime);
  /* next line copies a "struct nfstime" among several fields */
  mp->am_fattr.na_mtime = mp->am_fattr.na_ctime = mp->am_fattr.na_atime;

  new_ttl(mp);
  mp->am_stats.s_mtime = mp->am_fattr.na_atime.nt_seconds;
  mp->am_dev = -1;
  mp->am_rdev = -1;
}
コード例 #3
0
ファイル: position.c プロジェクト: michaeldv/donna_vista
// Reports game status for current position or after the given move. The status
// helps to determine whether to continue with search or if the game is over.
//------------------------------------------------------------------------------
Status standing(Position *self, Move move, int score) {
    Status status = InProgress;

    if (move) {
        self = make_move(self, move);
    }

    int ply = PLY(); // After the ^^^ move is made.

    if (score == 0) {
        if (ply == 1) {
            if (insufficient(self)) {
                status = Insufficient;
            } else if (third_repetition(self)) {
                status = Repetition;
            } else if (fifty(self)) {
                status = FiftyMoves;
            }
        }
        if (status == InProgress) {
            MoveGen *gen = new_gen(self, MaxPly);
            if (!any_valid(generate_moves(gen))) {
                status = Stalemate;
            }
        }
    } else if (score == Checkmate - ply) {
        if (is_in_check(self, self->color)) {
            status = (self->color == White ? BlackWon : WhiteWon);
        } else {
            status = Stalemate;
        }
    } else if (score > Checkmate - MaxDepth && (score + ply) / 2 > 0) {
        status = (self->color == White ? BlackWinning : WhiteWinning);
    }

    if (move) {
        self = undo_last_move(self);
    }

    return status;
}
コード例 #4
0
ファイル: main.c プロジェクト: sn6uv/box-packing
int main() {
    int button_code;
    int pause_state = 0;
    int reset_state = 0;

    setup_gui();

    // Seed random num generator
    srand (time(NULL));

    box_fam = create_gen(gen_size);
    randomise_gen(box_fam);    

    ifit = -1;

    for (int i=0; i<ngen; i++) {
        // Score generation
        score_gen(box_fam);

        printf("gen %i\r", i);
        fflush(stdout);
        // Draw fittest of the fit
        jfit = fittest_cov(box_fam);
        if (ifit != jfit) {
            ifit = jfit;
            clear_window();
            draw_boarder();
            draw_cover(& box_fam[ifit]);
            draw_pause_button(pause_state);
            draw_reset_button(reset_state);
            flush_window();
            printf("gen %i, %f\n", i, nboxes*pow(box_fam[ifit].l,2));
            add_score(i, nboxes*pow(box_fam[ifit].l,2));
        } 
        if (window_redraw_required()) {
            clear_window();
            draw_boarder();
            draw_cover(& box_fam[ifit]);
            draw_pause_button(pause_state);
            draw_reset_button(reset_state);
            draw_scores();
            flush_window();
        }

        button_code = handle_button_presses();
        while (button_code != 0 || pause_state || reset_state) {
            if (pause_state || reset_state)
                button_code = blocking_handle_button_presses();

            switch (button_code) {
                case -1:
                    // Redraw Required
                    clear_window();
                    draw_boarder();
                    draw_cover(& box_fam[ifit]);
                    draw_pause_button(pause_state);
                    draw_reset_button(reset_state);
                    draw_scores();
                    flush_window();
                    break;
                case 1:
                    // Play/Pause Button
                    if (pause_state) {
                        printf("\rPlay!         \n");
                        pause_state = 0;
                    } else {
                        printf("\rPause!        \n");
                        pause_state = 1;
                    }

                    draw_pause_button(pause_state);
                    flush_window();
                    break;
                case 2:
                    // Reset/Start Button  
                    if (reset_state) {
                        printf("\rStart!             \n");
                        reset_state = 0;
                    } else {
                        printf("\rReset!             \n");
                        print_best();
                        i = 0;
                        randomise_gen(box_fam);
                        score_gen(box_fam);            
                        reset_state = 1;
                        reset_scores();
                        flush_window();
                    }
                    clear_window();
                    draw_boarder();
                    draw_cover(& box_fam[ifit]);

                    draw_pause_button(pause_state);
                    draw_reset_button(reset_state);
                    flush_window();
                    break;
                default:
                    printf("\rButton Error %i\n         ", button_code);
                    exit(button_code);
            }
            button_code = handle_button_presses();
        }

        // Evolve Generation
        new_gen(box_fam); 
    }
    // Clear last gen n line
    printf("                  \r");
    fflush(stdout);

    close_gui();
    print_best();

    printf("Press enter to close\n");
    while( getchar() != '\n' );
    return 0;
}
コード例 #5
0
ファイル: gb-test1.cpp プロジェクト: pzinn/M2
void gbB::initialize(const Matrix *m, int csyz, int nsyz, M2_arrayint gb_weights0, int strat, int max_reduction_count0)
{
     // max_reduction_count: default was 10
     // 1 is best possible for 3-anderbuch!
     // 5 is: (114.64 sec, 494 MB)
     // 10 is best so far (125.33 sec, 527 MB virtual).
     // 50 is faster/smaller than 100, and 1000 was awful, on 3-andersbuch

  max_reduction_count = max_reduction_count0;

  const PolynomialRing *origR = m->get_ring()->cast_to_PolynomialRing();
  if (origR == NULL)
    {
      ERROR("ring is not a polynomial ring");
      // MES: throw an error here.
      assert(0);
    }
  originalR = origR;
  R = origR->get_gb_ring();
  weightInfo = new GBWeight(m->rows(), gb_weights0);
  gb_weights = weightInfo->get_weights();

  nvars = R->get_flattened_monoid()->n_vars();

  spair_stash = new stash("gbB spairs", sizeof(spair));
  gbelem_stash = new stash("gbB elems", sizeof(gbelem));
  exp_size = EXPONENT_BYTE_SIZE(nvars+2);
  lcm_stash = new stash("gbB lead monoms", exp_size);


  if (nsyz < 0 || nsyz > m->n_cols())
    nsyz = m->n_cols();
  n_rows_per_syz = nsyz;

  F = m->rows();
  Fsyz = m->cols()->sub_space(n_rows_per_syz);

  S = new SPairSet;
  first_in_degree = 0;
  n_syz = 0;
  n_pairs_computed = 0;
  n_gens_left = 0;
  n_subring = 0;

  _strategy = strat;
  _collect_syz = csyz;
  _is_ideal = (F->rank() == 1 && csyz == 0);
  if (R->is_weyl_algebra())
    _is_ideal = false;

  hilbert = 0;
  n_saved_hilb = 0;

  this_degree = F->lowest_primary_degree() - 1;
  npairs = 0;
  complete_thru_this_degree = this_degree;
  set_status(COMP_NOT_STARTED);

  stats_nreductions = 0;
  stats_ntail = 0;
  stats_npairs = 0;
  stats_ngb = 0;
  stats_ngcd1 = 0;

  divisor_previous = -1;
  divisor_previous_comp = -1;

  lookup = MonomialTable::make(nvars);

  minimal_gb = ReducedGB::create(originalR,F,Fsyz);
  minimal_gb_valid = true;

  if (originalR->is_quotient_ring())
    {
      ringtable = originalR->get_quotient_MonomialTable();

      first_gb_element = originalR->n_quotients();
      for (int i=0; i<first_gb_element; i++)
        {
          gbvector *f = const_cast<gbvector *>(originalR->quotient_gbvector(i));
          gbelem *g = gbelem_ring_make(f);
          gb.push_back(g);
        }
    }
  for (int i=0; i<m->n_cols(); i++)
    {
      ring_elem denom;
      gbvector *f = originalR->translate_gbvector_from_vec(F,(*m)[i], denom);
      spair *p = new_gen(i, f, denom);
      if (p != NULL)
        {
          spair_set_insert(p);
          n_gens_left++;
        }
    }

  state = STATE_NEWDEGREE; // will be changed if hilb fcn is used
  np_i = first_gb_element;
  ar_i = first_gb_element;
  ar_j = ar_i+1;
  n_gb = first_gb_element;
}