/*! * \brief Main routine for the even-6 parity problem. * \param argc Number of arguments on the command-line. * \param argv Arguments on the command-line. * \return Return value of the program. * \ingroup Parity */ int main(int argc, char *argv[]) { try { // Build primitives GP::PrimitiveSuperSet::Handle lSuperSet = new GP::PrimitiveSuperSet; lSuperSet->addPrimitive(new GP::BitwiseAnd("AND"), true); lSuperSet->addPrimitive(new GP::BitwiseOr("OR"), true); lSuperSet->addPrimitive(new GP::BitwiseNand("NAND"), true); lSuperSet->addPrimitive(new GP::BitwiseNor("NOR"), true); lSuperSet->addPrimitive(new GP::BitwiseNot("NOT"), true); lSuperSet->addPrimitive(new GP::BitwiseXor("XOR"), true); lSuperSet->addPrimitive(new GP::ADF(GP::Invoker::eGenerator, GP::Primitive::eAny, "ADFP", "ARGP")); lSuperSet->addPrimitive(new GP::ArgumentT<Int>(GP::Argument::eCaching, GP::Argument::eGenerator, "ARGP")); GP::PrimitiveSet::Handle lSet = new GP::PrimitiveSet; lSet->insert(new GP::BitwiseAnd("AND")); lSet->insert(new GP::BitwiseOr("OR")); lSet->insert(new GP::BitwiseNand("NAND")); lSet->insert(new GP::BitwiseNor("NOR")); for (unsigned int i=0; i<ParitySizeM; i++) { lSet->insert(new GP::TokenT<Int>(std::string("IN")+uint2str(i))); } lSuperSet->insert(lSet); // Build a system System::Handle lSystem = new System; // Set GP package lSystem->addPackage(new GP::PackageBase(lSuperSet)); lSystem->addPackage(new GP::PackageConstrained); // Set fitness evaluation operator allocator lSystem->setEvaluationOp("ParityEvalOp", new ParityFastEvalOp::Alloc); // Initialize the evolver Evolver::Handle lEvolver = new Evolver; lEvolver->initialize(lSystem, argc, argv); // Create population Vivarium::Handle lVivarium = new Vivarium; // Launch evolution lEvolver->evolve(lVivarium, lSystem); } catch(Exception& inException) { inException.terminate(); } catch(exception& inException) { cerr << "Standard exception caught:" << endl; cerr << inException.what() << endl << flush; return 1; } catch(...) { cerr << "Unknown exception caught!" << endl << flush; return 1; } return 0; }
double GPExperiment::suboptimizeAndCompareToTarget(unsigned suboptimizeType, GPNetwork* candidate, float* buffer) { // suboptimize according to suboptimize type if (suboptimizeType == 0) { renderIndividualByBlockPerformance(candidate, params->aux_render_block_size, numConstantValues, constantValues, target_num_frames, target_sample_times, buffer); double fitness = compareToTarget(params->exp_suboptimize_ff_type, buffer); candidate->doneRendering(); return fitness; } // run Beagle CMAES else if (suboptimizeType == 1) { std::vector<GPMutatableParam*>* candidateParams = candidate->getAllMutatableParams(); if (candidateParams->size() != 0) { try { // test initial conditions suboptimize_network = candidate; renderIndividualByBlockPerformance(suboptimize_network, params->aux_render_block_size, numConstantValues, constantValues, target_num_frames, target_sample_times, buffer); suboptimize_min_fitness = compareToTarget(params->exp_suboptimize_ff_type, buffer); // backup initial params logger->debug << "BEFORE(" << suboptimize_min_fitness << "): " << logger->net_to_string_print(suboptimize_network) << std::flush; std::vector<GPMutatableParam*>* candidate_params = suboptimize_network->getAllMutatableParams(); unsigned num_params = candidate_params->size(); suboptimize_best_params.resize(num_params); for (unsigned i = 0; i < num_params; i++) { GPMutatableParam* param = candidate_params->at(i); suboptimize_best_params[i] = param->getCopy(); } using namespace Beagle; // Build system System::Handle lSystem = new System; // Install the GA float vector and CMA-ES packages const unsigned int lVectorSize = candidateParams->size(); lSystem->addPackage(new GA::PackageFloatVector(lVectorSize)); lSystem->addPackage(new GA::PackageCMAES(lVectorSize)); // Initialize state space DoubleArray::Handle initMinValueArray = new DoubleArray(lVectorSize); DoubleArray::Handle initMaxValueArray = new DoubleArray(lVectorSize); DoubleArray::Handle minValueArray = new DoubleArray(lVectorSize); DoubleArray::Handle maxValueArray = new DoubleArray(lVectorSize); DoubleArray::Handle incValueArray = new DoubleArray(lVectorSize); // populate min/max/inc vectors for (unsigned i = 0; i < candidateParams->size(); i++) { GPMutatableParam* param = candidateParams->at(i); float paramMin = param->getMin(); float paramMax = param->getMax(); if (param->isDiscrete()) { // values are to allow any number in discrete range including min/max initMinValueArray->at(i) = paramMin + 0.5f; initMaxValueArray->at(i) = paramMax + 0.5f; minValueArray->at(i) = paramMin + 0.4f; maxValueArray->at(i) = paramMax + 0.6f; incValueArray->at(i) = 1.0f; } else { initMinValueArray->at(i) = paramMin; initMaxValueArray->at(i) = paramMax; minValueArray->at(i) = paramMin; maxValueArray->at(i) = paramMax; incValueArray->at(i) = 0.01f; } } // register state space with system Register::Description lDescription("Parameter state space", "Vector", "", ""); unsigned seed_beagle = seed + 1; lSystem->getRegister().insertEntry("ec.rand.seed", new ULong(seed_beagle), lDescription); lSystem->getRegister().insertEntry("ga.init.minvalue", initMinValueArray, lDescription); lSystem->getRegister().insertEntry("ga.init.maxvalue", initMaxValueArray, lDescription); lSystem->getRegister().insertEntry("ga.float.minvalue", minValueArray, lDescription); lSystem->getRegister().insertEntry("ga.float.maxvalue", maxValueArray, lDescription); lSystem->getRegister().insertEntry("ga.float.inc", incValueArray, lDescription); // Add evaluation operator allocator Register::Description hackDescription("Hack", "", "", ""); AudioComparisonParams::Handle evalParams = new AudioComparisonParams(); evalParams->experiment = this; evalParams->type = suboptimizeType; evalParams->candidate = candidate; evalParams->candidateFramesBuffer = buffer; lSystem->getRegister().insertEntry("audio.params", evalParams, hackDescription); // Set evaluation op lSystem->setEvaluationOp("AudioComparisonEvalOp", new AudioComparisonEvalOp::Alloc); // Set fitness type lSystem->getFactory().setConcept("Fitness", "FitnessSimpleMin"); // Initialize the evolver Evolver::Handle lEvolver = new Evolver; lEvolver->initialize(lSystem, beagle_cfg_file_path); // Create population Vivarium::Handle lVivarium = new Vivarium; // Launch evolution lEvolver->evolve(lVivarium, lSystem); // Lamarckian! for (unsigned i = 0; i < num_params; i++) { GPMutatableParam* param = suboptimize_best_params[i]; GPMutatableParam* stored_param = candidate_params->at(i); if (param->isDiscrete()) { stored_param->setDValue(param->getDValue()); } else { stored_param->setCValue(param->getCValue()); } delete param; } logger->debug << "AFTER(" << suboptimize_min_fitness << "): " << logger->net_to_string_print(suboptimize_network) << std::flush; } catch(Beagle::Exception& inException) { logger->error << "Beagle exception caught:" << std::flush; logger->error << inException.what() << std::flush; inException.terminate(logger->error); return -1; } catch (std::exception& inException) { logger->error << "Standard exception caught:" << std::flush; logger->error << inException.what() << std::flush; return -1; } } candidate->doneRendering(); return suboptimize_min_fitness; } return -1; }
/*! * \brief Main routine for the Knapsack problem. * \param argc Number of arguments on the command-line. * \param argv Arguments on the command-line. * \return Return value of the program. * \ingroup Knapsack */ int main(int argc, char** argv) { try { // Build the system System::Handle lSystem = new System; // Install the GA bit string and multi-objective optimization packages const unsigned int lNumberOfBits = 24; lSystem->addPackage(new BitStr::Package(lNumberOfBits)); lSystem->addPackage(new EMO::PackageMultiObj); // Add evaluation operator allocator lSystem->setEvaluationOp("KnapsackEvalOp", new KnapsackEvalOp::Alloc); // Initialize the evolver Evolver::Handle lEvolver = new Evolver; lEvolver->initialize(lSystem, argc, argv); // Create population Vivarium::Handle lVivarium = new Vivarium; // Launch evolution lEvolver->evolve(lVivarium, lSystem); } catch(Exception& inException) { inException.terminate(cerr); } catch(std::exception& inException) { cerr << "Standard exception caught:" << endl << flush; cerr << inException.what() << endl << flush; return 1; } return 0; }