コード例 #1
0
 public static void Gethistoricaldata(double[] testpointsx, List <double[]> userfeedbacks, out double usery)
 {
     usery = -1;
     foreach (var fb in userfeedbacks)
     {
         var fbx = OnlineGPupdating.GetXfromTraining(OnlineGPupdating.RowtoMatrix(fb));
         if (EvaluationForBinaryTree.IsSameImputs(testpointsx, fbx))
         {
             usery = fb[fb.Length - 1];
             break;
         }
         else
         {
             usery = -1;
         }
     }
 }
コード例 #2
0
        public static void WriteUserFeedback(double[] newdata, string csvaddress)
        {
            var  fxnew        = OnlineGPupdating.GetXfromTraining(newdata);
            var  fynew        = newdata[newdata.Length - 1];
            var  olddata      = ReadUserFeedback(csvaddress);
            int  deletindex   = 0;
            bool needtodelete = false;

            for (int i = 0; i < olddata.Count; i++)
            {
                var f     = olddata[i];
                var fxold = OnlineGPupdating.GetXfromTraining(f);
                if (EvaluationForBinaryTree.IsSameImputs(fxold, OnlineGPupdating.RowtoMatrix(fxnew)))
                {
                    f[f.Length - 1] = fynew;
                    needtodelete    = true;
                    deletindex      = i;
                    break;
                }
            }
            if (needtodelete)
            {
                olddata.RemoveAt(deletindex);
            }
            olddata.Add(newdata);
            System.IO.File.Delete(csvaddress);
            var csv = new StringBuilder();

            foreach (var value in olddata)
            {
                var str = "";
                for (int i = 0; i < value.Length; ++i)
                {
                    str += value[i].ToString();
                    if (i < value.Length - 1)
                    {
                        str += ",";
                    }
                }
                csv.AppendLine(str);
            }
            //   csv.AppendLine("Name,age");
            File.AppendAllText(csvaddress, csv.ToString());
            csv.Clear();
        }
コード例 #3
0
        public static void Updatrainedtaclusters(double[] feedbackpointxy,
                                                 Dictionary <List <double[]>, List <double[, ]> > trainedclusters)
        {
            var existingpoint    = false;
            var deletindex       = 0;
            var mfeedbackpointx  = GetXfromTraining(feedbackpointxy);
            var mfeedbackpoint   = RowtoMatrix(mfeedbackpointx);
            var measures         = new List <double>();
            var preclosestcenter = Getpreclosestcenter(trainedclusters, mfeedbackpoint, out measures);
            var maxmeasure       = measures.Max();
            var threahold        = 1e-10;; //TBD
                                           // var threahold = double.NegativeInfinity;
            var closestclu = trainedclusters[trainedclusters.Keys.First(k => k[0].SequenceEqual(preclosestcenter))];

            foreach (var point in closestclu)
            {
                var xpointm   = GetXfromTraining(point);
                var xfeedback = MatrixtoRow(GetXfromTraining(RowtoMatrix(feedbackpointxy)));
                if (EvaluationForBinaryTree.IsSameImputs(xfeedback, xpointm))
                {
                    existingpoint = true;
                    break;
                }
                else
                {
                    deletindex++;
                }
            }
            if (existingpoint)
            {
                var counter       = 0;
                var newclosestclu = closestclu;

                for (int i = 0; i < feedbackpointxy.Length; i++)
                {
                    newclosestclu[deletindex][0, i] = feedbackpointxy[i];
                }
                var samekey = trainedclusters.Keys.First(k => k[0].SequenceEqual(preclosestcenter));
                trainedclusters.Remove(samekey);
                trainedclusters.Add(samekey, newclosestclu);
            }
            if (maxmeasure > threahold) // add point to cluster
            {
                var newvalues = new List <double[, ]>(closestclu);
                newvalues.Add(RowtoMatrix(feedbackpointxy));
                if (newvalues.Count > 100)//remove data point
                {
                    // var diaweight = GetdaigonalWeight(trainedclu.Keys.First()[2]);
                    //  var farestcenterpoint = GetClosetPoint(closestclu, RowtoMatrix(feedbackpointxy), diaweight);
                    var oldkey       = new List <double[]>(trainedclusters.Keys.First(k => k[0].SequenceEqual(preclosestcenter)));
                    var untrainedclu = new Dictionary <List <double[]>, List <double[, ]> >();
                    var removeindex  = Gen.Random.Numbers.Integers(0, closestclu.Count - 1)();
                    newvalues.RemoveAt(removeindex);
                    var newcenter = new double[1, feedbackpointxy.Length];
                    foreach (var p in newvalues)
                    {
                        newcenter = newcenter.add(p);
                    }
                    newcenter = newcenter.divide(newvalues.Count);
                    oldkey[0] = MatrixtoRow(newcenter);
                    untrainedclu.Add(oldkey, newvalues);
                    var trainedclu = UpdataRegAndGP(untrainedclu);
                    trainedclusters.Remove(trainedclusters.Keys.First(k => k[0].SequenceEqual(preclosestcenter)));
                    trainedclusters.Add(trainedclu.Keys.First(), newvalues);
                }
                else//add point and update
                {
                    var oldkey       = new List <double[]>(trainedclusters.Keys.First(k => k[0].SequenceEqual(preclosestcenter)));
                    var untrainedclu = new Dictionary <List <double[]>, List <double[, ]> >();
                    var newcenter    = new double[1, feedbackpointxy.Length];
                    foreach (var p in newvalues)
                    {
                        newcenter = newcenter.add(p);
                    }
                    newcenter = newcenter.divide(newvalues.Count);
                    oldkey[0] = MatrixtoRow(newcenter);
                    untrainedclu.Add(oldkey, newvalues);
                    var trainedclu = UpdataRegAndGP(untrainedclu);
                    trainedclusters.Remove(trainedclusters.Keys.First(k => k[0].SequenceEqual(preclosestcenter)));
                    trainedclusters.Add(trainedclu.Keys.First(), newvalues);
                }
            }
            else //generate new cluster
            {
                var newcluter = Generatenewcluter(feedbackpointxy);
                trainedclusters.Add(newcluter.Keys.First(), newcluter.Values.First());
            }
        }
コード例 #4
0
        public static void GetTimeAndSD(SubAssembly sub, double[] testpoints, string actionname, out double time,
                                        out double SD)
        {
            time = 0;
            SD   = 0;
            var inputdictionary = new Dictionary <List <double[]>, List <double[, ]> >();

            double[,] subinputs;
            double[] userx;
            double   usery, subtime, subsd;
            var      userfeedbacks = new List <double[]>();

            if (actionname.StartsWith("S") || actionname.StartsWith("s"))
            {
                userfeedbacks   = usersecuredata;
                inputdictionary = SecureDictionary;
                Gethistoricaldata(testpoints, userfeedbacks, out usery);
                //   usery = -1; // disable userfeedback
                if (usery != -1)
                {
                    time = usery;
                    SD   = 0;
                }
                else
                {
                    foreach (var otherf in sub.Secure.Fasteners)
                    {
                        if (otherf.SecureModelInputs != null)
                        {
                            if (EvaluationForBinaryTree.IsSameImputs(testpoints, otherf.SecureModelInputs) && otherf.Time > 0.001)
                            //if time is included in subassembly
                            {
                                time = otherf.Time;
                                SD   = 0;
                                break;
                            }
                            else
                            {
                                TimeAndSD(testpoints, inputdictionary, userfeedbacks, out time, out SD);
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                if (actionname.StartsWith("m") || actionname.StartsWith("M"))
                {
                    userfeedbacks   = usermovedata;
                    inputdictionary = MoveDictionary;
                    subinputs       = sub.MoveRoateModelInputs;
                    subtime         = sub.MoveRoate.Time;
                    subsd           = sub.MoveRoate.TimeSD;
                }
                else if (actionname.StartsWith("i") || actionname.StartsWith("I"))
                {
                    userfeedbacks   = userinstalldata;
                    inputdictionary = InstallDictionary;
                    subinputs       = sub.InstallModelInputs;
                    subtime         = sub.Install.Time;
                    subsd           = sub.Install.TimeSD;
                }
                else
                {
                    userfeedbacks   = userrotatedata;
                    inputdictionary = RotateDictionary;
                    subinputs       = sub.RotateModelInputs;
                    subtime         = sub.Rotate.Time;
                    subsd           = sub.Rotate.TimeSD;
                }
                Gethistoricaldata(testpoints, userfeedbacks, out usery);
                //  usery = -1; // disable userfeedback
                if (usery != -1)
                {
                    time = usery;
                    SD   = 0;
                    if (actionname.StartsWith("i") && time > 2.9 && time < 3.01)
                    {
                        var sss = 1;
                    }
                }
                else
                {
                    if (EvaluationForBinaryTree.IsSameImputs(testpoints, subinputs) && subtime != 0)
                    //if time is included in subassembly
                    {
                        time = subtime;
                        SD   = subsd;
                        if (actionname.StartsWith("i") && time > 2.9 && time < 3.01)
                        {
                            var sss = 1;
                        }
                    }
                    else
                    {
                        TimeAndSD(testpoints, inputdictionary, userfeedbacks, out time, out SD);
                        if (actionname.StartsWith("i") && time > 2.9 && time < 3.01)
                        {
                            var sss = 1;
                        }
                    }
                }
            }
        }