protected override void onInstanceActivated(ConceptInstance instance, BeamGenerator generator)
        {
            var subject             = generator.GetValue(instance, Concept2.Subject);
            var property            = generator.GetValue(instance, Concept2.Property);
            var inheritedProperties = generator.GetPropertyValues(subject, includeInstanceProps: false);

            var value = generator.GetValue(subject, property.Concept);

            if (value == null)
            {
                var refutation  = new ConceptInstance(Concept2.KnowledgeRefutation);
                var refutedInfo = new ConceptInstance(subject.Concept);
                generator.SetValue(refutedInfo, property.Concept, new ConceptInstance(Concept2.Something));
                generator.SetValue(refutation, Concept2.Subject, refutedInfo);
                generator.SetValue(refutation, Concept2.Property, property);
                generator.Push(new InstanceOutputEvent(refutation));
            }
            else
            {
                var confirmation  = new ConceptInstance(Concept2.KnowledgeConfirmed);
                var confirmedInfo = new ConceptInstance(subject.Concept);

                generator.SetValue(confirmedInfo, property.Concept, value);
                generator.SetValue(confirmation, Concept2.Subject, confirmedInfo);
                generator.Push(new InstanceOutputEvent(confirmation));
            }
        }
Beispiel #2
0
        protected override void onInstanceActivated(ConceptInstance instance, BeamGenerator generator)
        {
            var property = generator.GetValue(instance, _propertyParameter);
            var subject  = generator.GetValue(instance, _subjectParameter);

            var answer = getAnswer(subject, property.Concept, generator);

            if (answer.Count == 0)
            {
                //generator.Push(new StaticScoreEvent(-0.20));
                generator.Push(new InstanceOutputEvent(new ConceptInstance(Concept2.NotFound)));
            }
            else if (answer.Count == 1)
            {
                generator.Push(new StaticScoreEvent(0.20));
                generator.Push(new InstanceOutputEvent(answer.First()));
            }
            else
            {
                var needRefinementInstance = new ConceptInstance(Concept2.NeedsRefinement);
                generator.SetValue(needRefinementInstance, Concept2.Subject, subject);
                generator.SetValue(subject, Concept2.OnSetListener, instance);
                generator.Push(new InstanceOutputEvent(needRefinementInstance));
            }
        }
Beispiel #3
0
        protected IEnumerable <string> GetUnknownPhrases(BeamGenerator generator)
        {
            var allInputPhrases = GetMany <InputPhraseEvent>();

            var currentBuffer = new List <InputPhraseEvent>();

            foreach (var inputPhrase in allInputPhrases)
            {
                var phrase = inputPhrase;
                var isPhraseDisconnected = currentBuffer.Count > 0 && phrase.InputId - currentBuffer.Last().InputId != 1;

                if (generator.IsInputUsed(phrase) || isDelimiter(inputPhrase) || isPhraseDisconnected)
                {
                    if (currentBuffer.Count > 0)
                    {
                        yield return(composeUnknownPhrase(currentBuffer));
                    }

                    currentBuffer.Clear();
                    continue;
                }
                currentBuffer.Add(phrase);
            }

            if (currentBuffer.Count > 0)
            {
                yield return(composeUnknownPhrase(currentBuffer));
            }
        }
Beispiel #4
0
        protected override void onInstanceActivated(ConceptInstance instance, BeamGenerator generator)
        {
            var subject = generator.GetValue(instance, Concept2.Subject);
            var target  = generator.GetValue(instance, Concept2.Target);

            var relevantProperties = getRelevantProperties(target, generator);

            if (!relevantProperties.Any())
            {
                generator.Push(new StaticScoreEvent(-0.5));
                return;
            }

            var disambiguation = new ConceptInstance(Concept2.PropertyValueDisambiguation);

            generator.SetValue(disambiguation, Concept2.Unknown, subject);
            generator.SetValue(disambiguation, Concept2.Target, target);
            foreach (var pair in relevantProperties)
            {
                var propertyInstance = new ConceptInstance(pair.Key);
                foreach (var value in pair.Value)
                {
                    var valueInstance = new ConceptInstance(value);
                    generator.SetValue(valueInstance, Concept2.Property, propertyInstance);
                    generator.SetValue(disambiguation, Concept2.Subject, valueInstance);
                }
            }

            generator.Push(new InstanceActivationRequestEvent(disambiguation));
        }
Beispiel #5
0
        protected override void onInstanceActivated(ConceptInstance instance, BeamGenerator generator)
        {
            var activations = generator.GetInstanceActivations();

            foreach (var relevantInstanceActivation in activations)
            {
                if (!relevantInstanceActivation.CanBeReferenced)
                {
                    continue;
                }

                var relevantInstance = relevantInstanceActivation.Instance;
                if (relevantInstance == instance)
                {
                    //dont reference self
                    continue;
                }

                //try tunnel instances between turns
                generator.Push(new StaticScoreEvent(0.05));
                generator.Push(new InstanceReferencedEvent(relevantInstance));
                generator.Pop();
                generator.Pop();
            }
        }
        internal override IEnumerable <string> GenerateFeatures(BeamNode node)
        {
            var targetActivationEvent = BeamGenerator.GetInstanceActivationRequest(PropertySet.Subject, node);
            var sourceActivationEvent = BeamGenerator.GetInstanceActivationRequest(PropertySet.Value, node);

            if (targetActivationEvent == null || sourceActivationEvent == null)
            {
                yield break;
            }

            var ngramLimitCount = 2;
            var targetSufixes   = new InputPhraseEvent[0];//BeamGenerator.GetSufixPhrases(targetActivationEvent.ActivationPhrase, ngramLimitCount, node);
            var targetPrefixes  = BeamGenerator.GetPrefixPhrases(targetActivationEvent.ActivationPhrases.FirstOrDefault(), ngramLimitCount, node);
            var featureId       = "* --" + PropertySet.Property.Name + "--> $1";
            var targetId        = "$1";

            for (var i = 0; i < ngramLimitCount; ++i)
            {
                if (targetSufixes.Length > i)
                {
                    yield return(targetId + " " + ngramFeature(targetSufixes, i) + " | " + featureId);
                }

                if (targetPrefixes.Length > i)
                {
                    yield return(ngramFeature(targetPrefixes, i) + " " + targetId + " | " + featureId);
                }
            }
        }
Beispiel #7
0
        internal static List <ConceptInstance> FindRelevantConcepts(BeamGenerator generator, HashSet <Concept2> requiredProperties)
        {
            //TODO better matching logic
            var concepts = generator.GetDefinedConcepts();
            var result   = new List <ConceptInstance>();

            foreach (var concept in concepts)
            {
                var conceptInstance   = new ConceptInstance(concept);
                var missingProperties = new HashSet <Concept2>(requiredProperties);

                foreach (var propertyValue in generator.GetPropertyValues(conceptInstance))
                {
                    var property = propertyValue.Key;
                    var value    = propertyValue.Value;

                    missingProperties.Remove(value.Concept);
                }

                if (missingProperties.Count == 0)
                {
                    result.Add(conceptInstance);
                }
            }

            return(result);
        }
Beispiel #8
0
        private void ConnectToBeamGenerator()
        {
            try
            {
                // connect with bbeam gnerators
                beamGenerators = part.FindModulesImplementing <BeamGenerator>().Where(m => (m.beamType & compatibleBeamTypes) == m.beamType).ToList();

                if (beamGenerators.Count == 0 && part.parent != null)
                {
                    beamGenerators.AddRange(part.parent.FindModulesImplementing <BeamGenerator>().Where(m => (m.beamType & compatibleBeamTypes) == m.beamType));
                }

                if (beamGenerators.Count == 0)
                {
                    var attachedParts = part.attachNodes
                                        .Where(m => m.attachedPart != null)
                                        .Select(m => m.attachedPart)
                                        .SelectMany(m => m.FindModulesImplementing <BeamGenerator>())
                                        .Where(m => (m.beamType & compatibleBeamTypes) == m.beamType);

                    beamGenerators.AddRange(attachedParts);
                }

                activeBeamGenerator = beamGenerators.FirstOrDefault();

                if (activeBeamGenerator != null && activeBeamGenerator.part != this.part)
                {
                    activeBeamGenerator.UpdateMass(this.maximumPower);
                }
            }
            catch (Exception ex)
            {
                Debug.LogError("[KSPI] Microwave Transmitter OnStart search for beamGenerator: " + ex);
            }
        }
Beispiel #9
0
        protected override void onInstanceActivated(ConceptInstance instance, BeamGenerator generator)
        {
            var parameterValue    = generator.GetValue(instance, _parameter);
            var relevantInstances = getRelevantInstances(instance, parameterValue.Concept, generator).ToArray();

            foreach (var relevantInstance in relevantInstances)
            {
                //avoid reference circles
                if (relevantInstance.Concept == instance.Concept)
                {
                    continue;
                }

                if (!generator.IsDefined(relevantInstance.Concept))
                {
                    continue;
                }

                //try tunnel instances between turns
                generator.Push(new StaticScoreEvent(0.05));
                generator.Push(new InstanceReferencedEvent(relevantInstance));
                generator.Pop();
                generator.Pop();
            }
        }
Beispiel #10
0
    GameObject SpawnObject(GameObject prev)
    {
        GameObject myChildObject, clone;

        if (prev.transform.childCount > 0)
        {
            myChildObject = prev.transform.GetChild(0).gameObject;
            prev.transform.DetachChildren();
            clone = Instantiate(prev, transform.position, transform.rotation);
            myChildObject.transform.parent = prev.transform;
        }
        else
        {
            clone = Instantiate(prev, transform.position, transform.rotation);
        }

        GameObject storey = new GameObject();

        storey.transform.SetParent(transform);

        clone.transform.SetParent(storey.transform);
        RandomScaleObject(clone);
        clone.GetComponent <MeshRenderer>().material = material;

        BeamGenerator beamGen = clone.GetComponent <BeamGenerator>();

        beamGen.seed = Random.Range(0, 100000);
        beamGen.Generate();

        return(clone);
    }
Beispiel #11
0
        protected override IEnumerable <string> execute(BeamGenerator generator)
        {
            var unknownPhrases      = GetUnknownPhrases(generator);
            var isInLearnPhraseMode = PreviousPolicy <LearnNewPhrase>(out var learnPolicy) || PreviousPolicy <UnknownAnsweredToLearnNewPhrase>(out learnPolicy);

            if (!isInLearnPhraseMode || unknownPhrases.Count() != 1)
            {
                yield break;
            }

            var unknown = generator.GetValue(learnPolicy.Tag, Concept2.Unknown);
            var prompt  = generator.GetValue(learnPolicy.Tag, Concept2.Prompt);


            //remember runtime info so others can use it
            generator.SetValue(TagInstance, Concept2.Unknown, unknown);
            generator.SetValue(TagInstance, Concept2.Prompt, prompt);

            generator.Push(new InstanceActivationRequestEvent(prompt));
            yield return($"Still, I'm not getting it. What does {singular(unknown)} mean?");

            yield return($"That is complicated. What does {singular(unknown)} mean?");

            yield return($"I don't know those words. Could you put {singular(unknown)} differently?");
        }
        public override string GenerateSharedPixelShader(ShaderStage stage, int methodIndex, int optionIndex)
        {
            var gen      = new BeamGenerator();
            var bytecode = gen.GenerateSharedPixelShader(stage, methodIndex, optionIndex).Bytecode;

            return(D3DCompiler.Disassemble(bytecode));
        }
        public override string GenerateSharedVertexShader(VertexType vertex, ShaderStage stage)
        {
            var gen      = new BeamGenerator();
            var bytecode = gen.GenerateSharedVertexShader(vertex, stage).Bytecode;

            return(D3DCompiler.Disassemble(bytecode));
        }
        internal static ConceptInstance Create(BeamGenerator generator, Concept2 subject, string description)
        {
            var instance = new ConceptInstance(Concept2.RememberConceptDescription);

            generator.SetValue(instance, Concept2.Subject, new ConceptInstance(subject));
            generator.SetValue(instance, Concept2.Description, new ConceptInstance(Concept2.From(description)));
            return(instance);
        }
        internal override double GetDefaultScore(BeamNode node)
        {
            var descriptions = BeamGenerator.GetDescriptions(Concept, node);

            var composedPhrase = getComposedPhrase();

            return(getSimilarity(composedPhrase, Concept.Name, descriptions)); //TODO solve the descriptions
        }
Beispiel #16
0
        internal static ConceptInstance Create(BeamGenerator generator, ConceptInstance yesInstance, ConceptInstance noInstance)
        {
            var prompt = new ConceptInstance(Concept2.Prompt);

            generator.SetValue(prompt, Concept2.Yes, yesInstance);
            generator.SetValue(prompt, Concept2.No, noInstance);
            return(prompt);
        }
Beispiel #17
0
        public static void BeamBranchTesting()
        {
            var b = new BeamGenerator();

            b.Push(new InputPhraseEvent("x"));
            b.Pop();
            b.Push(new InputPhraseEvent("y"));
            b.PushSelf();
        }
        protected override IEnumerable <string> execute(BeamGenerator generator)
        {
            generator.Push(new Events.StaticScoreEvent(-0.5));
            yield return("How can I help you?");

            yield return("I need to know what should I do.");

            yield return("Please, tell me what should I do.");
        }
        protected override void onInstanceActivated(ConceptInstance instance, BeamGenerator generator)
        {
            var subjects = generator.GetValues(instance, Concept2.Subject).ToArray();

            var answer  = generator.GetValue(instance, Concept2.Answer);
            var unknown = generator.GetValue(instance, Concept2.Unknown);
            var target  = generator.GetValue(instance, Concept2.Target);

            var directSubjects   = filterDirectSubjects(subjects, answer);
            var indirectSubjects = filterIndirectSubjects(subjects, answer, generator);

            if (answer.Concept == Concept2.Nothing)
            {
                // user does not like any option
                return;
            }

            if (directSubjects.Count() == 1)
            {
                pushSetSubject(target, directSubjects.First(), generator, unknown);
                return;
            }

            if (indirectSubjects.Count() == 1)
            {
                pushSetSubject(target, indirectSubjects.First(), generator, unknown);
                return;
            }

            if (indirectSubjects.Count() == 0)
            {
                generator.Push(new InstanceOutputEvent(new ConceptInstance(Concept2.DisambiguationFailed)));
                return;
            }

            if (indirectSubjects.Count() < subjects.Count())
            {
                //create new disambiguation
                generator.Push(new StaticScoreEvent(0.1));
                pushNewDisambiguation(indirectSubjects, unknown, target, generator);
                return;
            }

            if (indirectSubjects.Count() == subjects.Count())
            {
                var knowledgeConfirmation = new ConceptInstance(Concept2.DisambiguatedKnowledgeConfirmed);
                generator.SetValue(knowledgeConfirmation, Concept2.Subject, answer);
                generator.SetValue(knowledgeConfirmation, Concept2.Target, instance);
                generator.Push(new StaticScoreEvent(0.05));
                generator.Push(new InstanceOutputEvent(knowledgeConfirmation));
                return;
            }

            //disambiguation was not helpful
            generator.Push(new StaticScoreEvent(-1.0));
        }
Beispiel #20
0
        private void pushNewOptions(IEnumerable <ConceptInstance> options, BeamGenerator generator)
        {
            var optionPrompt = new ConceptInstance(Concept2.OptionPrompt);

            foreach (var option in options)
            {
                generator.SetValue(optionPrompt, Concept2.Option, option);
            }
            generator.Push(new InstanceActivationRequestEvent(optionPrompt));
        }
Beispiel #21
0
        internal static void GenerateActivationRequest(string unknown, BeamGenerator generator)
        {
            var newConcept         = Concept2.From(unknown);
            var newConceptInstance = new ConceptInstance(newConcept);

            var learnInstance = new ConceptInstance(Concept2.LearnNewConcept);

            generator.SetValue(learnInstance, Concept2.Unknown, newConceptInstance);
            generator.Push(new InstanceActivationRequestEvent(learnInstance));
        }
Beispiel #22
0
        internal static ConceptInstance Create(BeamGenerator generator, PropertySetTarget target, ConceptInstance value)
        {
            var rememberValue = new ConceptInstance(Concept2.RememberPropertyValue);

            generator.SetValue(rememberValue, Concept2.Target, target.Instance);
            generator.SetValue(rememberValue, Concept2.TargetProperty, new ConceptInstance(target.Property));
            generator.SetValue(rememberValue, Concept2.Subject, value);

            return(rememberValue);
        }
        protected override void onInstanceActivated(ConceptInstance instance, BeamGenerator generator)
        {
            var subject     = generator.GetValue(instance, Concept2.Subject);
            var description = generator.GetValue(instance, Concept2.Description);

            var conceptDescription = new ConceptDescriptionEvent(subject.Concept, description.Concept.Name);
            var export             = new ExportEvent(conceptDescription);

            generator.Push(export);
            generator.Push(conceptDescription);
        }
Beispiel #24
0
        protected override void onInstanceActivated(ConceptInstance instance, BeamGenerator generator)
        {
            var property = generator.GetValue(instance, Concept2.Property);
            var target   = generator.GetValue(instance, Concept2.Target);

            var setTarget = new PropertySetTarget(target, Concept2.HasProperty);
            var evt       = new PropertySetEvent(setTarget, property, allowActivation: false);

            generator.Push(evt);
            generator.Push(new ExportEvent(evt));
        }
        public override string GeneratePixelShader(ShaderStage stage, List <int> shaderOptions)
        {
            var albedo      = (Albedo)shaderOptions[0];
            var blend_mode  = (Blend_Mode)shaderOptions[1];
            var black_point = (Black_Point)shaderOptions[2];
            var fog         = (Fog)shaderOptions[3];

            var gen      = new BeamGenerator(albedo, blend_mode, black_point, fog);
            var bytecode = gen.GeneratePixelShader(stage).Bytecode;

            return(D3DCompiler.Disassemble(bytecode));
        }
Beispiel #26
0
        protected override IEnumerable <string> execute(BeamGenerator generator)
        {
            var activeInstance = Get <InstanceActiveEvent>(e => e.Request != null && e.Request.ActivationPhrases.Any() && canBeReported(e.Instance));

            if (activeInstance == null)
            {
                yield break;
            }

            generator.Push(new Events.StaticScoreEvent(-0.3));
            generator.Push(new InstanceReferencedEvent(activeInstance.Instance));
            yield return($"I know {singular(activeInstance.Instance)} but what should I do?");
        }
Beispiel #27
0
        internal static void States(BeamGenerator generator, int stateCount = int.MaxValue)
        {
            var rankedNodes = generator.GetRankedNodes().ToArray();

            var rankedStates = rankedNodes.Take(stateCount).Reverse().ToArray();

            foreach (var state in rankedStates)
            {
                Indent();
                State(state.Value);
                Dedent();
                Writeln($"S: {state.Rank:0.00} | N: {rankedNodes.Length} > ", HeadlineColor);
                Writeln("\n", HeadlineColor);
            }
        }
        protected override IEnumerable <string> execute(BeamGenerator generator)
        {
            //we are searching for deactivated instances because after call instance is deactivated
            var rememberAbility = FindDeactivatedTurnInstances(i => i.Concept == Concept2.RememberConceptDescription).FirstOrDefault();

            if (rememberAbility == null)
            {
                yield break;
            }

            var subject = generator.GetValue(rememberAbility, Concept2.Subject);

            generator.Push(new Events.InstanceReferencedEvent(subject));
            yield return($"Thank you. What should I do with {singular(subject)}?");
        }
Beispiel #29
0
        protected override void onInstanceActivated(ConceptInstance instance, BeamGenerator generator)
        {
            var unknown = generator.GetValue(instance, Concept2.Unknown);
            var answer  = generator.GetValue(instance, Concept2.Answer).Concept;


            if (answer == Concept2.Nothing || answer == Concept2.No || answer == Concept2.Nothing)
            {
                //nothing to report
            }
            else
            {
                generator.Push(new InstanceOutputEvent(instance));
            }
        }
Beispiel #30
0
        protected override void onInstanceActivated(ConceptInstance instance, BeamGenerator generator)
        {
            var criterion       = generator.GetValue(instance, _parameter);
            var criterionValues = generator.GetPropertyValues(criterion);

            criterionValues.Remove(Concept2.OnSetListener); // TODO internal property removal should be done in more systematic way
            criterionValues.Remove(Concept2.HasProperty);
            criterionValues.Remove(Concept2.HasPropertyValue);

            var requiredProperties = new HashSet <Concept2>(criterionValues.Values.Select(i => i.Concept));

            requiredProperties.Add(criterion.Concept);

            var result         = FindRelevantConcepts(generator, requiredProperties);
            var isSubjectClass = generator.GetInverseConceptValues(Concept2.InstanceOf, criterion).Any();


            if (result.Count == 0)
            {
                if (isSubjectClass)
                {
                    generator.Push(new StaticScoreEvent(0.1));
                }
                else
                {
                    generator.Push(new StaticScoreEvent(-0.1));
                }

                generator.Push(new InstanceOutputEvent(new ConceptInstance(Concept2.NotFound)));
            }
            else if (result.Count == 1)
            {
                generator.Push(new StaticScoreEvent(0.5));
                generator.Push(new InstanceOutputEvent(result.First()));
            }
            else
            {
                if (generator.IsProperty(criterion.Concept))
                {
                    generator.Push(new StaticScoreEvent(-0.15));
                }

                var needRefinementInstance = new ConceptInstance(Concept2.NeedsRefinement);
                generator.SetValue(needRefinementInstance, Concept2.Subject, criterion);
                generator.SetValue(criterion, Concept2.OnSetListener, instance);
                generator.Push(new InstanceOutputEvent(needRefinementInstance));
            }
        }