void tpcc_wl::init_tab_order(uint64_t did, uint64_t wid) { uint64_t perm[g_cust_per_dist]; init_permutation(perm, wid); /* initialize permutation of customer numbers */ for (UInt32 oid = 1; oid <= g_cust_per_dist; oid++) { row_t * row; uint64_t row_id; t_order->get_new_row(row, 0, row_id); row->set_primary_key(oid); uint64_t o_ol_cnt = 1; uint64_t cid = perm[oid - 1]; //get_permutation(); row->set_value(O_ID, oid); row->set_value(O_C_ID, cid); row->set_value(O_D_ID, did); row->set_value(O_W_ID, wid); uint64_t o_entry = 2013; row->set_value(O_ENTRY_D, o_entry); if (oid < 2101) row->set_value(O_CARRIER_ID, URand(1, 10, wid-1)); else row->set_value(O_CARRIER_ID, 0); o_ol_cnt = URand(5, 15, wid-1); row->set_value(O_OL_CNT, o_ol_cnt); row->set_value(O_ALL_LOCAL, 1); // ORDER-LINE #if !TPCC_SMALL for (uint32_t ol = 1; ol <= o_ol_cnt; ol++) { t_orderline->get_new_row(row, 0, row_id); row->set_value(OL_O_ID, oid); row->set_value(OL_D_ID, did); row->set_value(OL_W_ID, wid); row->set_value(OL_NUMBER, ol); row->set_value(OL_I_ID, URand(1, 100000, wid-1)); row->set_value(OL_SUPPLY_W_ID, wid); if (oid < 2101) { row->set_value(OL_DELIVERY_D, o_entry); row->set_value(OL_AMOUNT, 0); } else { row->set_value(OL_DELIVERY_D, 0); row->set_value(OL_AMOUNT, (double)URand(1, 999999, wid-1)/100); } row->set_value(OL_QUANTITY, 5); char ol_dist_info[24]; MakeAlphaString(24, 24, ol_dist_info, wid-1); row->set_value(OL_DIST_INFO, ol_dist_info); } #endif // NEW ORDER if (oid > 2100) { t_neworder->get_new_row(row, 0, row_id); row->set_value(NO_O_ID, oid); row->set_value(NO_D_ID, did); row->set_value(NO_W_ID, wid); } } }
int local_optimization(int n, int edge[][SIZE+1]) { int i, j, k; int improved = 1; int modify = 0; int cost = (offsprings[n]->cost = calc_cost(offsprings[n], edge)); int permutation[SIZE+1]; Chromosome *c; init_chromosome(&c); for (i=0; i<=SIZE; i++) c->ch[i] = offsprings[n]->ch[i]; int num = 0; init_permutation(permutation); while (improved) { improved = 0; for (i=1; i<=SIZE; i++) { int tmp = 0; c->ch[permutation[i]] = (1 - c->ch[permutation[i]]) % 2; tmp = calc_cost(c, edge); if (tmp > cost) { offsprings[n]->ch[permutation[i]] = c->ch[permutation[i]]; improved = 1; cost = tmp; offsprings[n]->cost = tmp; } else c->ch[permutation[i]] = (1 - c->ch[permutation[i]]) % 2; } } free_chromosome(c); return 1; }
void tpcc_wl::init_tab_order(uint64_t did, uint64_t wid) { init_permutation(); /* initialize permutation of customer numbers */ for (UInt32 oid = 1; oid <= g_cust_per_dist; oid++) { row_t * row; uint64_t row_id; t_order->get_new_row(row, 0, row_id); row->set_primary_key(oid); uint64_t o_ol_cnt = 1; uint64_t cid = get_permutation(); row->set_value(O_ID, oid); row->set_value(O_C_ID, cid); row->set_value(O_D_ID, did); row->set_value(O_W_ID, wid); uint64_t o_entry = 2013; row->set_value(O_ENTRY_D, o_entry); if (oid < 2101) row->set_value(O_CARRIER_ID, URand(1, 10)); else row->set_value(O_CARRIER_ID, 0); o_ol_cnt = URand(5, 15); row->set_value(O_OL_CNT, o_ol_cnt); row->set_value(O_ALL_LOCAL, 1); // Insert to indexes // uint64_t key = custKey(cid, did, wid); // index_insert(i_order_wdc, key, row, wh_to_part(wid)); // key = orderPrimaryKey(wid, did, oid); // index_insert(i_order_wdo, key, row, wh_to_part(wid)); // ORDER-LINE #if !TPCC_SMALL for (int ol = 1; ol <= o_ol_cnt; ol++) { t_orderline->get_new_row(row, 0, row_id); row->set_value(OL_O_ID, oid); row->set_value(OL_D_ID, did); row->set_value(OL_W_ID, wid); row->set_value(OL_NUMBER, ol); row->set_value(OL_I_ID, URand(1, 100000)); row->set_value(OL_SUPPLY_W_ID, wid); if (oid < 2101) { row->set_value(OL_DELIVERY_D, o_entry); row->set_value(OL_AMOUNT, 0); } else { row->set_value(OL_DELIVERY_D, 0); row->set_value(OL_AMOUNT, (double)URand(1, 999999)/100); } row->set_value(OL_QUANTITY, 5); char ol_dist_info[24]; MakeAlphaString(24, 24, ol_dist_info); row->set_value(OL_DIST_INFO, ol_dist_info); // uint64_t key = orderlineKey(wid, did, oid); // index_insert(i_orderline, key, row, wh_to_part(wid)); // key = distKey(did, wid); // index_insert(i_orderline_wd, key, row, wh_to_part(wid)); } #endif // NEW ORDER if (oid > 2100) { t_neworder->get_new_row(row, 0, row_id); row->set_value(NO_O_ID, oid); row->set_value(NO_D_ID, did); row->set_value(NO_W_ID, wid); } } }