Exemplo n.º 1
0
        protected override ProgramCollection <Program, MergeConflict, IReadOnlyList <Node>, TFeatureValue> LearnTopKUnchecked <TFeatureValue>(
            IEnumerable <Constraint <MergeConflict, IReadOnlyList <Node> > > constraints,
            Feature <TFeatureValue> feature,
            int k,
            int?numRandomProgramsToInclude,
            ProgramSamplingStrategy samplingStrategy,
            IEnumerable <MergeConflict> additionalInputs = null,
            CancellationToken cancel = default,
            Guid?guid = null)
        {
            var result = LearnImpl(constraints, feature, k, numRandomProgramsToInclude, samplingStrategy, cancel);

            if (result == null || result.IsEmpty)
            {
                return(ProgramCollection <Program, MergeConflict, IReadOnlyList <Node>, TFeatureValue> .Empty);
            }

            var pruned = result as PrunedProgramSet;

            return(ProgramCollection <Program, MergeConflict, IReadOnlyList <Node>, TFeatureValue> .From(pruned, p => new Program(p), feature));
        }
Exemplo n.º 2
0
        private ProgramSet LearnImpl <TFeatureValue>(IEnumerable <Constraint <MergeConflict, IReadOnlyList <Node> > > constraints,
                                                     Feature <TFeatureValue> feature,
                                                     int?k,
                                                     int?numRandomProgramsToInclude,
                                                     ProgramSamplingStrategy samplingStrategy,
                                                     CancellationToken cancel = default)
        {
            Grammar grammar = LanguageGrammar.Instance.Grammar;
            Dictionary <State, object> examples =
                constraints.OfType <Example <MergeConflict, IReadOnlyList <Node> > >()
                .ToDictionary(
                    e => State.CreateForLearning(grammar.InputSymbol, e.Input),
                    e => (object)e.Output);
            var spec      = new ExampleSpec(examples);
            var witnesses = new WitnessFunctions(grammar);
            var engine    = new SynthesisEngine(
                grammar,
                new SynthesisEngine.Config
            {
                Strategies = new ISynthesisStrategy[] { new DeductiveSynthesis(witnesses) },
                UseThreads = false
            });

            LearningTask task = k.HasValue
                ? LearningTask.Create(grammar.StartSymbol, spec, numRandomProgramsToInclude, samplingStrategy, k.Value, feature)
                : new LearningTask(grammar.StartSymbol, spec);

            ProgramSet set = engine.Learn(task, cancel);

            engine.Configuration.LogListener?.SaveLogToXML("log.xml");
            if (k.HasValue)
            {
                return(set.Prune(k.Value, numRandomProgramsToInclude, feature, null,
                                 task.FeatureCalculationContext,
                                 samplingStrategy, engine.RandomNumberGenerator, engine.Configuration.LogListener));
            }

            return(set);
        }