public static void Run()
        {
            UpdateExperimentResultsAndClear();
            int experimentCount = 0;

            int.TryParse(ConfigurationManager.AppSettings["ExperimentCount"], out experimentCount);
            bool flag = false;
            List <TblProbabilityExperiment> lst = ProbabilityExperimentDS.GetForExperiment(experimentCount);

            foreach (TblProbabilityExperiment tblExp in lst)
            {
                DatabaseManagement    dbManagement = new DatabaseManagement();
                TblDatabaseManagement newDB        = dbManagement.CreateForExperiment(
                    "exp_" + tblExp.SupportProbability + "_" + tblExp.ConfidenceProbability
                    , tblExp.MaxArity
                    , tblExp.MaxVariablesInRelation
                    , tblExp.SupportProbability
                    , tblExp.ConfidenceProbability
                    , tblExp.ProbabilityIncreaseByArity
                    );
                if (newDB != null)
                {
                    flag = true;
                    tblExp.FkDatabaseId = newDB.Id;
                    ProbabilityExperimentDS.Update(tblExp);
                }
            }
            if (flag && MQGenerator.IsAutoRunJobs)
            {
                MQGenerator.StartDBProcess();
            }
        }
        public static void SendDBFinishedMail(TblDatabaseManagement tblDatabaseManagement)
        {
            string subject = string.Format("Database {0} done successfuly", tblDatabaseManagement.DbName);
            string body    = "";

            MailHelper.SendTextMailAsync(subject, body);
        }
        public TblDatabaseManagement CreateForExperiment(string dbName,
                                                         int maxArity,
                                                         int maxVariableInRelation,
                                                         int supportProbability,
                                                         int confidenceProbability,
                                                         int?probabilityIncreaseByArity
                                                         )
        {
            TblDatabaseManagement tblDatabaseManagement = new TblDatabaseManagement()
            {
                DbName                     = dbName,
                ConnectionString           = "FOR_Experiment",
                SupportThreshold           = 0,
                ConfidenceThreshold        = 0,
                MaxArity                   = maxArity,
                FkStatusId                 = (int)StatusMQ.Received,
                MaxVariablesInRelation     = maxVariableInRelation,
                ForExperiment              = true,
                SupportProbability         = supportProbability,
                ConfidenceProbability      = confidenceProbability,
                ProbabilityIncreaseByArity = probabilityIncreaseByArity
            };

            return(Create(tblDatabaseManagement));
        }
        private TblDatabaseManagement Create(TblDatabaseManagement tblDatabaseManagement)
        {
            DatabaseManagementsDS.Create(tblDatabaseManagement);

            MQGeneratorMail.SendDBInitializedMail(tblDatabaseManagement);

            return(tblDatabaseManagement);
        }
示例#5
0
 public static void Update(TblDatabaseManagement tblDatabaseManagement)
 {
     using (MetaqueriesContext context = new MetaqueriesContext())
     {
         context.TblDatabaseManagements.Attach(tblDatabaseManagement);
         context.MarkAsModified(tblDatabaseManagement);
         context.SaveChanges();
     }
 }
示例#6
0
 public static void Create(TblDatabaseManagement tblDatabaseManagement)
 {
     using (MetaqueriesContext context = new MetaqueriesContext())
     {
         context.TblDatabaseManagements.Add(tblDatabaseManagement);
         context.MarkAsCreated(tblDatabaseManagement);
         context.SaveChanges();
     }
 }
示例#7
0
        public static void StartExpandMQProcess()
        {
            List <TblMetaquery> lstMQ = MetaqueryDS.GetMQForExpand();

            while (lstMQ.Count > 0)
            {
                foreach (TblMetaquery tblMetaquery in lstMQ)
                {
                    TblDatabaseManagement curDB             = tblMetaquery.TblDatabaseManagement;
                    Metaquery             metaqueryToExpand = new Metaquery(tblMetaquery.Metaquery);

                    //create first level
                    //int MaxVariablesInRelation = ProcessMQDetails.MaxVariablesInRelation;
                    int        maxVariables = curDB.MaxVariablesInRelation;
                    ExpandType expandType   = ExpandType.All;
                    if (tblMetaquery.FkResult == (int)ResultMQ.SupportFailure)
                    {
                        expandType = ExpandType.NewRelationOnly;
                    }
                    if (tblMetaquery.FkResult == (int)ResultMQ.ConfidenceFailure)
                    {
                        expandType = ExpandType.InBodyOnly;
                    }

                    List <Metaquery> list = metaqueryToExpand.Expand(maxVariables, expandType);
                    foreach (Metaquery mq in list)
                    {
                        TblMetaquery newTblMetaquery = new TblMetaquery()
                        {
                            Arity        = mq.Arity,
                            FkDatabaseId = curDB.Id,
                            FkStatusId   = (int)StatusDB.Received,
                            Metaquery    = mq.ToString()
                        };
                        MetaqueryDS.Create(newTblMetaquery);
                    }

                    if (curDB.ForExperiment || tblMetaquery.FkResult != (int)ResultMQ.HasAnswers)
                    {
                        MetaqueryDS.UpdateStatus(tblMetaquery, StatusMQ.ExpandedAndDone);
                    }
                    else
                    {
                        MetaqueryDS.UpdateStatus(tblMetaquery, StatusMQ.Expanded);
                    }
                }
                lstMQ = MetaqueryDS.GetMQForExpand();
            }

            if (IsAutoRunJobs)
            {
                StartIncreaseDBArity();
            }
        }
示例#8
0
        public static void UpdateStatus(TblDatabaseManagement tblDatabaseManagement, StatusDB newStatus)
        {
            tblDatabaseManagement.FkStatusId = (int)newStatus;
            if (newStatus == StatusDB.InProcess)
            {
                tblDatabaseManagement.StartTime    = DateTime.Now;
                tblDatabaseManagement.CurrentArity = 2;
            }
            if (newStatus == StatusDB.Done)
            {
                tblDatabaseManagement.FinishTime = DateTime.Now;
            }

            Update(tblDatabaseManagement);
        }
        public void ShowDBProperties(int dbID)
        {
            TblDatabaseManagement tblDatabaseManagement = DatabaseManagementsDS.Get(dbID);

            if (dbID > 0)
            {
                pnlDBProperties.Visible = true;
                pnlFilter.Visible       = true;

                propMaxArity.ValueLabel            = tblDatabaseManagement.MaxArity.ToString();
                propCurrentArity.ValueLabel        = tblDatabaseManagement.CurrentArity.ToString();
                propSupportThreshold.ValueLabel    = tblDatabaseManagement.SupportThreshold.ToString();
                propConfidenceThreshold.ValueLabel = tblDatabaseManagement.ConfidenceThreshold.ToString();
                propStatus.ValueLabel = tblDatabaseManagement.TblStatus.Description;

                if (tblDatabaseManagement.StartTime.HasValue)
                {
                    propStartTime.ValueLabel = tblDatabaseManagement.StartTime.Value.ToString(Consts.DateTimeFormat);
                }
                else
                {
                    propStartTime.ValueLabel = "";
                }

                if (tblDatabaseManagement.FinishTime.HasValue)
                {
                    propFinishTime.ValueLabel = tblDatabaseManagement.FinishTime.Value.ToString(Consts.DateTimeFormat);
                }
                else
                {
                    propFinishTime.ValueLabel = "";
                }

                propMaxColumn.ValueLabel = tblDatabaseManagement.MaxVariablesInRelation.ToString();
            }
            else
            {
                pnlDBProperties.Visible = false;
                pnlFilter.Visible       = false;
            }
        }
        public bool Create(string dbName,
                           string connectionString,
                           decimal supportThreshold,
                           decimal confidenceThreshold,
                           int maxArity
                           )
        {
            int maxVariableInRelation = 0;
            ProcessingModelDS modelDS = new ProcessingModelDS(connectionString);
            int demoDbMaxCol          = 0;

            int.TryParse(ConfigurationManager.AppSettings["DemoDbMaxCol"], out demoDbMaxCol);

            if (demoDbMaxCol > 0)
            {
                maxVariableInRelation = demoDbMaxCol;
            }
            else
            {
                maxVariableInRelation = modelDS.GetMaxVariablesInRelation();
            }

            TblDatabaseManagement tblDatabaseManagement = new TblDatabaseManagement()
            {
                DbName                 = dbName,
                ConnectionString       = connectionString,
                SupportThreshold       = supportThreshold,
                ConfidenceThreshold    = confidenceThreshold,
                MaxArity               = maxArity,
                FkStatusId             = (int)StatusMQ.Received,
                MaxVariablesInRelation = maxVariableInRelation,
                ForExperiment          = false
            };

            Create(tblDatabaseManagement);
            return(true);
        }
示例#11
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);
        }