Пример #1
0
        public void TestSendMQMessageToJson()
        {
            List <int> headList = new List <int>()
            {
                1, 3
            };
            List <int> bodyList1 = new List <int>()
            {
                1, 2, 3
            };
            List <int> bodyList2 = new List <int>()
            {
                2, 3
            };
            List <int> bodyList3 = new List <int>()
            {
                3
            };
            List <List <int> > bodyList = new List <List <int> > {
                bodyList1, bodyList2, bodyList3
            };

            SendMQMessage message = new SendMQMessage()
            {
                ID = 1, SupportThreshold = 0.2m, ConfidenceThreshold = 0.3m, Head = headList, Body = bodyList
            };

            string strMessage = JsonConvert.SerializeObject(message);
            string strJson    = "{\"ID\":1,\"SupportThreshold\":0.2,\"ConfidenceThreshold\":0.3,\"Head\":[1,3],\"Body\":[[1,2,3],[2,3],[3]]}";

            Assert.AreEqual(strMessage, strJson);
        }
Пример #2
0
        public override void OnGetMessageFromGenerator(string strMessage)
        {
            string queueToMQGeneratorName    = ConfigurationManager.AppSettings["QueueToMQGeneratorName"];
            RabbitProducer <string> producer = new RabbitProducer <string>(queueToMQGeneratorName);

            SendMQMessage message   = JsonConvert.DeserializeObject <SendMQMessage>(strMessage);
            Metaquery     metaquery = new Metaquery(message);

            ResultMQ resultMQ = ResultMQ.HasAnswers;

            // Random the probability of the result
            Random rnd        = new Random();
            int    rndSupport = rnd.Next(100);

            //Probability of  support failure
            if (rndSupport < SupportProbability)
            {
                resultMQ = ResultMQ.SupportFailure;
            }
            else
            {
                //Probability of  confidence failure
                int rndConfidence = rnd.Next(100);
                if (rndConfidence < ConfidenceProbability)
                {
                    resultMQ = ResultMQ.ConfidenceFailure;
                }
            }
            MQResultMessage resultMessage = new MQResultMessage()
            {
                ID = message.ID, Result = resultMQ
            };

            if (resultMQ == ResultMQ.HasAnswers)
            {
                MQAssignmentResultMessage assignmentResultMessage = new MQAssignmentResultMessage()
                {
                    ID              = message.ID,
                    Assignment      = "TEST - Assignment",
                    ConfidenceValue = 0,
                    SupportValue    = 0
                };

                SendMQMessageToSolver(producer, assignmentResultMessage);
            }
            SendMQMessageToSolver(producer, resultMessage);
        }
Пример #3
0
        //public static void SendMQAssignmentResultMessage(RabbitProducer<string> producer, MQAssignmentResultMessage resultMessage)
        //{
        //	string strMessage = resultMessage.ToJson();
        //	producer.SendMessage(strMessage);
        //}

        public virtual void OnGetMessageFromGenerator(string strMessage)
        {
            string queueToMQGeneratorName    = ConfigurationManager.AppSettings["QueueToMQGeneratorName"];
            RabbitProducer <string> producer = new RabbitProducer <string>(queueToMQGeneratorName);

            SendMQMessage message   = JsonConvert.DeserializeObject <SendMQMessage>(strMessage);
            Metaquery     metaquery = new Metaquery(message);

            List <ResultDemoMq> resultMQList = MetaquerySolverDemoDS.GetResultDemoMq(metaquery.ToString());

            bool     hasResult = resultMQList.Count > 0;
            ResultMQ resultMQ  = ResultMQ.HasAnswers;

            if (!hasResult)
            {
                Random rnd    = new Random();
                int    rndNum = rnd.Next(2);
                if (rndNum == 0)
                {
                    resultMQ = ResultMQ.ConfidenceFailure;
                }
                else
                {
                    resultMQ = ResultMQ.SupportFailure;
                }
            }
            MQResultMessage resultMessage = new MQResultMessage()
            {
                ID = message.ID, Result = resultMQ
            };

            if (hasResult)
            {
                foreach (ResultDemoMq resultDemoMQ in resultMQList)
                {
                    MQAssignmentResultMessage assignmentResultMessage = new MQAssignmentResultMessage()
                    {
                        ID              = message.ID,
                        Assignment      = resultDemoMQ.Assignment,
                        ConfidenceValue = resultDemoMQ.ConfidenceValue.Value,
                        SupportValue    = resultDemoMQ.SupportValue.Value
                    };

                    SendMQMessageToSolver(producer, assignmentResultMessage);

                    //System.Threading.Thread.Sleep(3000);
                }
            }
            SendMQMessageToSolver(producer, resultMessage);

            //System.Threading.Thread.Sleep(3000);

            /*
             * MQResultMessage resultMessage = new MQResultMessage() { ID = 1, Result = true};
             *
             * string strMessage = JsonConvert.SerializeObject(resultMessage);
             * string strResultMessageJson = "{\"ID\":1,\"Result\":true}";
             * Assert.AreEqual(strMessage, strResultMessageJson);
             *
             * MQAssignmentResultMessage assignmentResultMessage = new MQAssignmentResultMessage() { ID = 1,Assignment="Any assignment",ConfidenceValue=0.3f,SupportValue=0.1f };
             * strMessage = JsonConvert.SerializeObject(assignmentResultMessage);
             * strResultMessageJson = "{\"ID\":1,\"SupportValue\":0.1,\"ConfidenceValue\":0.3,\"Assignment\":\"Any assignment\"}";
             */
            //MessageBox.Show("TestEvent, string: " + result.Metaquery);
        }
Пример #4
0
        public static int StartSendMQToSolver()
        {
            List <TblMetaquery> lstMQ = MetaqueryDS.GetMQForSendToSolver();

            int  count = 0;
            bool doStartExpandMQProcess = false, doStartIncreaseDBArity = false;

            while (lstMQ.Count > 0)
            {
                RabbitProducer <string> producer = null;
                foreach (TblMetaquery tblMetaquery in lstMQ)
                {
                    TblDatabaseManagement curDB = tblMetaquery.TblDatabaseManagement;
                    if (!curDB.ForExperiment)
                    {
                        if (producer == null)
                        {
                            string queueToMQSolverName = ConfigurationManager.AppSettings["QueueToMQSolverName"];
                            producer = new RabbitProducer <string>(queueToMQSolverName);
                        }
                        Metaquery metaquery = new Metaquery(tblMetaquery.Metaquery);
                        //שליחה לסולבר
                        SendMQMessage message = new SendMQMessage()
                        {
                            ID = tblMetaquery.Id,
                            SupportThreshold    = curDB.SupportThreshold,
                            ConfidenceThreshold = curDB.ConfidenceThreshold,
                            Head = metaquery.Head.Variables,
                            Body = metaquery.Body.GetVariables()
                        };

                        string strMessage = message.ToJson();                          //JsonConvert.SerializeObject(message);
                        producer.SendMessage(strMessage);

                        MetaqueryDS.UpdateStatus(tblMetaquery, StatusMQ.WaitingToSolver);
                    }
                    else
                    {
                        RandomMQProbability randomMQProbability = new RandomMQProbability(curDB.SupportProbability.Value, curDB.ConfidenceProbability.Value, curDB.ProbabilityIncreaseByArity ?? 0, tblMetaquery.Arity);
                        tblMetaquery.FkResult = (int)randomMQProbability.GetRandomResultMQ();

                        StatusMQ statusMQ = (tblMetaquery.IsExpanded || tblMetaquery.Arity == tblMetaquery.TblDatabaseManagement.MaxArity ? StatusMQ.Done : StatusMQ.WaitingToExpand);
                        MetaqueryDS.UpdateStatus(tblMetaquery, statusMQ);

                        if (statusMQ == StatusMQ.WaitingToExpand)
                        {
                            doStartExpandMQProcess = true;
                        }
                        else if (statusMQ == StatusMQ.Done)
                        {
                            doStartIncreaseDBArity = true;
                        }
                    }
                    count++;
                }
                lstMQ = MetaqueryDS.GetMQForSendToSolver();
            }
            if (MQGenerator.IsAutoRunJobs)
            {
                if (doStartExpandMQProcess)
                {
                    MQGenerator.StartExpandMQProcess();
                }
                else if (doStartIncreaseDBArity)
                {
                    MQGenerator.StartIncreaseDBArity();
                }
            }
            return(count);
        }