Exemple #1
0
std::vector<ParseTree*> XPathTokenElement::evaluate(ParseTree* t) {
  // return all children of t that match nodeName
  std::vector<ParseTree*> nodes;
  for (auto c : t->children) {
    if (antlrcpp::is<TerminalNode*>(c)) {
      TerminalNode* tnode = dynamic_cast<TerminalNode*>(c);
      if ((tnode->getSymbol()->getType() == _tokenType && !_invert) ||
          (tnode->getSymbol()->getType() != _tokenType && _invert)) {
        nodes.push_back(tnode);
      }
    }
  }
  return nodes;
}
Exemple #2
0
    int GpModel::main( int argc, char** argv ) {
        GpModel model(30);
        model.setCrossoverOperator(new RegularAndFairSizeCrossover(200));
        model.setMutationOperator(new RegularMutation());
        model.setReproductionOperator(new RegularReproduction());
        model.getTreeGenerator().setPreferredDepth(2);
        model.getTreeGenerator().setPreferredMethod(TreeGenerator::M_RAMPED);
        model.setLowerFitnessBetter(true);

        model.create();

        model.setProbabilityCrossover(1.0);
        model.setProbabilityMutation(0.01);
        model.setProbabilityReproduction(1 - (model.getProbabilityCrossover() + model.getProbabilityMutation()));

        TestFunctionListener listener;
        //        for (int i = 0; i < 1000; ++i) {
        int i = 0;
        while (true) {
            ++i;
            double average_fitness = 0.0;
            double average_size = 0.0;
            for (int j = 0; j < model.getPopulationSize(); ++j) {
                TerminalNode* node = model.evaluate(model.getTree(j), listener);
                int fitness = node->getValue();
                delete node;
                model.getTree(j).setFitness(abs(fitness));
                average_fitness += abs(fitness);
                average_size += model.getTree(j).getSize();
            }
            BDEBUG("avg-size=" + TO_STRING(average_size / model.getPopulationSize()) + "\tavg-fitness=" + TO_STRING(average_fitness / model.getPopulationSize()) + "\tepoch=" + TO_STRING(i) + "");
            model.step();
            //            model.crossover();
        }
        return 0;
    }