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; } } }
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(); }
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()); } }
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; } } } } }