// Generate a random genotype void random() { // Randomize each chip for (size_t i = 0; i < _chips.size(); ++i) { _chips[i].random(); } // Randomize interconnections (we need at least 2 chips) if (_chips.size() >= 2) { #ifdef CONSTRAINT_PROJECTION_INTERCONNECTIONS for (size_t chip_number = 0; chip_number < _chips.size(); ++chip_number) { typename nn_t::graph_t graph_src = _chips[chip_number].get_graph(); int neuron_id = -1; BGL_FORALL_VERTICES_T(vertex, graph_src, typename nn_t::graph_t) { neuron_id++; // If this is an input neuron, output neuron or inhib neuron, don't create interconnection from it if ((!(graph_src[vertex].get_in() == -1)) || (!(graph_src[vertex].get_out() == -1)) || (graph_src[vertex].inhib())) { continue; } for (size_t chip_number2 = 0; chip_number2 < _chips.size(); ++chip_number2) { // Interconnection is between 2 different chips if (chip_number == chip_number2) continue; // Random interconnection with another chip if (misc::rand<float>() < Params::dnn_mrf::interconn_other_chip_proba) { interconnection_t interconnection; interconnection.src_chip_id = chip_number; interconnection.src_neuron_id = neuron_id;//graph_src[vertex].get_id(); interconnection.dest_chip_id = chip_number2; interconnection.dest_neuron_id = misc::rand<int>(chips(interconnection.dest_chip_id).get_nb_inputs(), chips(interconnection.dest_chip_id).get_nb_neurons());; weight_t weight; weight.random(); interconnection.connection.set_weight(weight); _interconnections.push_back(interconnection); } } } } #else // Randomize interconnections size_t initial_nb_interconnections = misc::rand<int>(Params::dnn_mrf::initial_min_nb_interconn, Params::dnn_mrf::initial_max_nb_interconn + 1); for (size_t interconnections_number = 0; interconnections_number < initial_nb_interconnections; ++interconnections_number) { _interconnections.push_back(random_interconnection_nodup()); } #endif //std::cout << "random->erase" << std::endl; //_interconnections.erase(_interconnections.begin()); //std::cout << "oker" << std::endl; //_chips[0].write(std::cout); //std::cin.get(); }
void Cpot::subtractChips(const CChips& c) { // This function subtracts chips from the pot evenly across all players int i = 0; CChips numChips = getChips(); CChips chips(c); CChips oneChip(1, 0); while (chips > 0 && numChips >= chips) { for (i = 0; (chips > 0) && (i < 10); i++) { if (chips_[i] > 0) { chips_[i] -= oneChip; chips -= oneChip; } } } }