public IEnumerable <RlmLearnedCase> GetLearnedCases(RlmGetLearnedCasesParams data)
        {
            RlmNetworkWebAPI      network = LoadNetworkFromCache(data);
            RlmSessionCaseHistory hist    = network.SessionCaseHistory;

            return(hist.GetLearnedCases(data.RneuronId, data.SolutionId, data.Scale));
        }
        public void CreateOrLoadNetwork(CreateLoadNetworkParams data)
        {
            IRlmDbData       rlmDbData = new RlmDbDataSQLServer(data.RlmName);
            RlmNetworkWebAPI network   = new RlmNetworkWebAPI(rlmDbData);

            if (network.LoadNetwork(data.NetworkName))
            {
                RlmNetworkWebAPI cache;
                if (RLM_NETWORKS.TryGetValue(data.RlmName, out cache))
                {
                    cache = network;
                }
                else
                {
                    RLM_NETWORKS.TryAdd(data.RlmName, cache = network);
                }

                cache.ResetExpiry();
            }
            else
            {
                IEnumerable <RlmIO> inputs  = data.Inputs.Select(a => new RlmIO(a.IOName, a.DotNetType, a.Min, a.Max, a.InputType)).ToList();
                IEnumerable <RlmIO> outputs = data.Outputs.Select(a => new RlmIO(a.IOName, a.DotNetType, a.Min, a.Max)).ToList();

                network.NewNetwork(data.NetworkName, inputs, outputs);
                RLM_NETWORKS.TryAdd(data.RlmName, network);
            }
        }
        public IEnumerable <RlmIODetails>[] GetCaseIODetails(RlmGetCaseIODetailsParams data)
        {
            RlmNetworkWebAPI      network = LoadNetworkFromCache(data);
            RlmSessionCaseHistory hist    = network.SessionCaseHistory;

            return(hist.GetCaseIODetails(data.CaseId));
        }
        public IEnumerable <RlmLearnedSessionDetails> GetSessionIODetails(RlmGetSessionDetailsParams data)
        {
            RlmNetworkWebAPI      network = LoadNetworkFromCache(data);
            RlmSessionCaseHistory hist    = network.SessionCaseHistory;

            return(hist.GetSessionIODetails(data.SessionIds));
        }
        public long?GetSolutionIdFromOutputs(RlmGetSolutionIdFromOutputs data)
        {
            RlmNetworkWebAPI      network = LoadNetworkFromCache(data);
            RlmSessionCaseHistory hist    = network.SessionCaseHistory;

            return(hist.GetSolutionIdFromOutputs(data.OutputValuesPair));
        }
        public RlmCaseIOHistory GetCaseInputOutputDetails(RlmGetCaseIOParams data)
        {
            RlmNetworkWebAPI      network = LoadNetworkFromCache(data);
            RlmSessionCaseHistory hist    = network.SessionCaseHistory;

            return(hist.GetCaseIOHistory(data.CaseId, data.RneuronId, data.SolutionId));
        }
        public long?GetNextPrevLearnedCaseId(RlmGetNextPrevLearnedCaseIdParams data)
        {
            RlmNetworkWebAPI      network = LoadNetworkFromCache(data);
            RlmSessionCaseHistory hist    = network.SessionCaseHistory;

            return(hist.GetNextPreviousLearnedCaseId(data.CaseId.Value, data.IsNext));
        }
        public IEnumerable <RlmCaseHistory> GetSessionCases(RlmGetSessionCaseParams data)
        {
            RlmNetworkWebAPI      network = LoadNetworkFromCache(data);
            RlmSessionCaseHistory hist    = network.SessionCaseHistory;

            return(hist.GetSessionCaseHistory(data.SessionId, data.Skip, data.Take));
        }
        private IEnumerable <RlmSessionHistory> getSessionsWithSignificantLearning(RlmFilterResultParams data)
        {
            RlmNetworkWebAPI      network = LoadNetworkFromCache(data);
            RlmSessionCaseHistory hist    = network.SessionCaseHistory;

            return(hist.GetSignificantLearningEvents(data.Skip, data.Take));
        }
        private IEnumerable <RlmSessionHistory> getSessionHistory(RlmFilterResultParams data)
        {
            RlmNetworkWebAPI      network = LoadNetworkFromCache(data);
            RlmSessionCaseHistory hist    = network.SessionCaseHistory;

            return(hist.GetSessionHistory(data.Skip, data.Take));
        }
        public long StartSession(RlmParams data)
        {
            long retVal = 0;

            RlmNetworkWebAPI network = LoadNetworkFromCache(data);

            retVal = network.SessionStart();

            return(retVal);
        }
        public void SetRLMSettings(RlmSettingsParams data)
        {
            RlmNetworkWebAPI network = LoadNetworkFromCache(data);

            network.NumSessions      = data.NumSessions;
            network.StartRandomness  = data.StartRandomness;
            network.EndRandomness    = data.EndRandomness;
            network.MaxLinearBracket = data.MaxLinearBracket;
            network.MinLinearBracket = data.MinLinearBracket;
        }
        public CycleOutputParams RunCycle(RunCycleParams data)
        {
            var retVal = new CycleOutputParams();

            RlmNetworkWebAPI network = LoadNetworkFromCache(data);

            var inputsCycle = new List <RlmIOWithValue>();

            foreach (var ins in data.Inputs)
            {
                inputsCycle.Add(new RlmIOWithValue(network.Inputs.Where(item => item.Name == ins.IOName).First(), ins.Value));
            }

            var Cycle = new RlmCycle();
            RlmCyclecompleteArgs cycleOutput = null;

            // supervised training
            if (data.Outputs == null ||
                (data.Outputs != null && data.Outputs.Count > 0))
            {
                var outputsCycle = new List <RlmIOWithValue>();
                foreach (var outs in data.Outputs)
                {
                    outputsCycle.Add(new RlmIOWithValue(network.Outputs.First(a => a.Name == outs.IOName), outs.Value));
                }

                cycleOutput = Cycle.RunCycle(network, network.CurrentSessionID, inputsCycle, data.Learn, outputsCycle);
            }
            else // unsupervised training
            {
                cycleOutput = Cycle.RunCycle(network, network.CurrentSessionID, inputsCycle, data.Learn);
            }

            if (cycleOutput != null)
            {
                retVal = new CycleOutputParams {
                    RlmType = cycleOutput.RlmType, CycleId = cycleOutput.CycleOutput.CycleID
                };
                var outputs = cycleOutput.CycleOutput.Outputs;
                for (int i = 0; i < outputs.Count(); i++)
                {
                    RlmIOWithValue output = outputs.ElementAt(i);
                    retVal.Outputs.Add(new RlmIOWithValuesParams()
                    {
                        IOName = output.Name, Value = output.Value
                    });
                }
            }

            return(retVal);
        }
        private RlmNetworkWebAPI LoadNetworkFromCache(RlmParams data)
        {
            RlmNetworkWebAPI retVal = null;

            if (RLM_NETWORKS.TryGetValue(data.RlmName, out retVal))
            {
                if (retVal.CurrentNetworkName != data.NetworkName)
                {
                    throw new ArgumentException($"Network '{data.NetworkName}' not found or has not been loaded yet. Please check the network name or make sure to call the CreateOrLoad API method first.");
                }
            }
            else
            {
                throw new ArgumentException($"RLM '{data.RlmName}' not found or has not been loaded yet. Please check the network name or make sure to call the CreateOrLoad API method first.");
            }

            retVal.ResetExpiry();

            return(retVal);
        }
        public void EndSession(SessionEndParams data)
        {
            RlmNetworkWebAPI network = LoadNetworkFromCache(data);

            network.SessionEnd(data.SessionScore);
        }
        public void ScoreCycle(ScoreCycleParams data)
        {
            RlmNetworkWebAPI network = LoadNetworkFromCache(data);

            network.ScoreCycle(data.CycleID, data.Score);
        }