Example #1
0
        /*
         * Load dense matrix and transpose it.
         */
        public static DenseMatrix DenseMatrixTransposeLoader(string DenseMatrixFileName)
        {
            StreamReader DenseMatrixFile = new StreamReader(DenseMatrixFileName);

            // Scan the data file to determine the dimension of the matrix
            int    nCol = 0;
            int    nRow = 0;
            string StrLine;

            while ((StrLine = DenseMatrixFile.ReadLine()) != null)
            {
                if (nCol == 0)
                {
                    string[] StrLineSplit = StrLine.Split('\t');
                    nRow = StrLineSplit.Length;
                }
                ++nCol;
            }
            DenseMatrixFile.Close();

            // Load the data and store it into the matrix
            DenseMatrix Matrix = new DenseMatrix(nRow, nCol);

            DenseMatrixFile = new StreamReader(DenseMatrixFileName);
            int IdxCol = 0;

            while ((StrLine = DenseMatrixFile.ReadLine()) != null)
            {
                float[]  LoadedColumn = new float[nRow];
                string[] StrLineSplit = StrLine.Split('\t');
                for (int IdxRow = 0; IdxRow < nRow; ++IdxRow)
                {
                    LoadedColumn[IdxRow] = float.Parse(StrLineSplit[IdxRow]);
                }

                Matrix.FillColumn(LoadedColumn, IdxCol);

                ++IdxCol;
            }
            DenseMatrixFile.Close();
            return(Matrix);
        }
Example #2
0
        /// <summary>
        /// 读取文件
        /// </summary>
        /// <param name="FileName"></param>
        /// <returns></returns>
        private bool ReadFile(string FileName)
        {
            //参数定义
            FileStream   fs = null;
            StreamReader sr = null;
            //每行字符串
            string StrLine;
            //行数
            int LineCount = 0;
            //文本中一共多少个字符
            int StrCharCount = 0;
            int TrajIndex    = -1;
            int PointType    = 0;

            try
            {
                if (FileName == null || !File.Exists(FileName))
                {
                    MessageBox.Show("文件不存在!");
                    return(false);
                }


                fs = new FileStream(FileName, FileMode.Open, FileAccess.Read);
                sr = new StreamReader(fs);  //使用StreamReader类来读取文件
                sr.BaseStream.Seek(0, SeekOrigin.Begin);

                while ((StrLine = sr.ReadLine()) != null)
                {
                    LineCount++;
                    StrLine = StrLine.Trim();
                    if (StrLine == "" || StrLine.IndexOf("//") >= 0)
                    {
                        continue;
                    }
                    StrCharCount = StrLine.Length;
                    //读取productname
                    if (StrLine.IndexOf("PRODUCTID=") >= 0)
                    {
                        PublicData.ProductName = StrLine.Substring("PRODUCTID=".Length, StrCharCount - "PRODUCTID=".Length);
                    }


                    if (StrLine.IndexOf("PRESET=") >= 0)
                    {
                        PublicData.PresetName = StrLine.Substring("PRESET=".Length, StrCharCount - "PRESET=".Length);
                    }

                    if (StrLine.IndexOf("TOTALELEMENTS=") >= 0)
                    {
                        PublicData.TrajCount = int.Parse(StrLine.Substring("TOTALELEMENTS=".Length, StrCharCount - "TOTALELEMENTS=".Length));
                        TrajInform           = new Traj[PublicData.TrajCount];
                    }

                    if (StrLine.IndexOf("=BEGIN") >= 0)
                    {
                        TrajIndex++;
                        PointType             = 0;
                        TrajInform[TrajIndex] = new Traj();
                    }
                    //轨迹坐标系
                    if (StrLine.IndexOf("FRAME=") == 0)
                    {
                        string[] Data = (StrLine.Substring("FRAME=".Length, StrCharCount - "FRAME=".Length)).Split(',');


                        if (Data == null || Data.Length < 6)
                        {
                            return(false);
                        }
                        Str2double(Data, ref TrajInform[TrajIndex].TrajFrame);
                    }
                    //产品坐标系
                    if (StrLine.IndexOf("RECIPEFRAME=") == 0)
                    {
                        string[] Data = (StrLine.Substring("RECIPEFRAME=".Length, StrCharCount - "RECIPEFRAME=".Length)).Split(',');


                        if (Data == null || Data.Length < 6)
                        {
                            return(false);
                        }
                        Str2double(Data, ref PublicData.Frame);
                    }

                    if (StrLine.IndexOf("HOME=") >= 0)
                    {
                        string[] Data = (StrLine.Substring("HOME=".Length, StrCharCount - "HOME=".Length)).Split(',');


                        if (Data == null || Data.Length < 6)
                        {
                            return(false);
                        }
                        Str2double(Data, ref PublicData.Home);
                    }

                    if (StrLine.IndexOf("TOOL=") >= 0)
                    {
                        string[] Data = (StrLine.Substring("TOOL=".Length, StrCharCount - "TOOL=".Length)).Split(',');


                        if (Data == null || Data.Length < 6)
                        {
                            return(false);
                        }
                        Str2double(Data, ref PublicData.Tcp);
                    }

                    if (StrLine.IndexOf("LASER=OFF") >= 0)
                    {
                        PointType = 2;
                    }

                    if (StrLine.IndexOf("LASER=ON") >= 0)
                    {
                        PointType = 1;
                    }


                    if (StrLine.IndexOf("MOVEL=") >= 0)
                    {
                        string[] Data = (StrLine.Substring("MOVEL=".Length, StrCharCount - "MOVEL=".Length)).Split(new char[] { ',', '/' });
                        switch (PointType)
                        {
                        //趋近点
                        case 0:
                        {
                            TrajInform[TrajIndex].Beforepoint[TrajInform[TrajIndex].PointCount[PointType]] = new double[6];
                            TrajInform[TrajIndex].BeforePara[TrajInform[TrajIndex].PointCount[PointType]]  = new double[2];
                            Str2double(Data, ref TrajInform[TrajIndex].Beforepoint[TrajInform[TrajIndex].PointCount[PointType]]);
                            Str2double(Data, ref TrajInform[TrajIndex].BeforePara[TrajInform[TrajIndex].PointCount[PointType]], 6);
                            TrajInform[TrajIndex].Before[TrajInform[TrajIndex].PointCount[PointType]] = true;
                            break;
                        }

                        //切割点
                        case 1:
                        {
                            TrajInform[TrajIndex].Midpoint[TrajInform[TrajIndex].PointCount[PointType]] = new double[6];
                            TrajInform[TrajIndex].MidPara[TrajInform[TrajIndex].PointCount[PointType]]  = new double[4];
                            Str2double(Data, ref TrajInform[TrajIndex].Midpoint[TrajInform[TrajIndex].PointCount[PointType]]);
                            Str2double(Data, ref TrajInform[TrajIndex].MidPara[TrajInform[TrajIndex].PointCount[PointType]], 6);
                            TrajInform[TrajIndex].Mid[TrajInform[TrajIndex].PointCount[PointType]] = false;


                            break;
                        }

                        //切出点
                        case 2:
                        {
                            TrajInform[TrajIndex].Afterpoint[TrajInform[TrajIndex].PointCount[PointType]] = new double[6];
                            TrajInform[TrajIndex].AfterPara[TrajInform[TrajIndex].PointCount[PointType]]  = new double[2];
                            Str2double(Data, ref TrajInform[TrajIndex].Afterpoint[TrajInform[TrajIndex].PointCount[PointType]]);
                            Str2double(Data, ref TrajInform[TrajIndex].AfterPara[TrajInform[TrajIndex].PointCount[PointType]], 6);
                            TrajInform[TrajIndex].After[TrajInform[TrajIndex].PointCount[PointType]] = true;

                            break;
                        }
                        }
                        TrajInform[TrajIndex].PointCount[PointType]++;
                    }
                    //
                    if (StrLine.IndexOf("MOVEC=") >= 0)
                    {
                        string[] Data = (StrLine.Substring("MOVEC=".Length, StrCharCount - "MOVEC=".Length)).Split(new char[] { ',', '/' });
                        if (PointType == 0 || PointType == 2)
                        {
                            return(false);
                        }

                        TrajInform[TrajIndex].Midpoint[TrajInform[TrajIndex].PointCount[PointType]] = new double[6];
                        TrajInform[TrajIndex].MidMC[TrajInform[TrajIndex].PointCount[PointType]]    = new double[6];
                        TrajInform[TrajIndex].MidPara[TrajInform[TrajIndex].PointCount[PointType]]  = new double[4];

                        Str2double(Data, ref TrajInform[TrajIndex].Midpoint[TrajInform[TrajIndex].PointCount[PointType]]);
                        Str2double(Data, ref TrajInform[TrajIndex].MidMC[TrajInform[TrajIndex].PointCount[PointType]], 6);
                        Str2double(Data, ref TrajInform[TrajIndex].MidPara[TrajInform[TrajIndex].PointCount[PointType]], 12);
                        TrajInform[TrajIndex].Mid[TrajInform[TrajIndex].PointCount[PointType]] = true;



                        TrajInform[TrajIndex].PointCount[PointType]++;
                    }


                    //movej
                    if (StrLine.IndexOf("MOVEJ=") >= 0)
                    {
                        string[] Data = (StrLine.Substring("MOVEJ=".Length, StrCharCount - "MOVEJ=".Length)).Split(new char[] { ',', '/' });
                        if (PointType == 1)
                        {
                            return(false);
                        }
                        switch (PointType)
                        {
                        //趋近点
                        case 0:
                        {
                            TrajInform[TrajIndex].Beforepoint[TrajInform[TrajIndex].PointCount[PointType]] = new double[6];
                            TrajInform[TrajIndex].BeforePara[TrajInform[TrajIndex].PointCount[PointType]]  = new double[2];
                            Str2double(Data, ref TrajInform[TrajIndex].Beforepoint[TrajInform[TrajIndex].PointCount[PointType]]);
                            Str2double(Data, ref TrajInform[TrajIndex].BeforePara[TrajInform[TrajIndex].PointCount[PointType]], 6);
                            TrajInform[TrajIndex].Before[TrajInform[TrajIndex].PointCount[PointType]] = false;
                            break;
                        }


                        //切出点
                        case 2:
                        {
                            TrajInform[TrajIndex].Afterpoint[TrajInform[TrajIndex].PointCount[PointType]] = new double[6];
                            TrajInform[TrajIndex].AfterPara[TrajInform[TrajIndex].PointCount[PointType]]  = new double[2];
                            Str2double(Data, ref TrajInform[TrajIndex].Afterpoint[TrajInform[TrajIndex].PointCount[PointType]]);
                            Str2double(Data, ref TrajInform[TrajIndex].AfterPara[TrajInform[TrajIndex].PointCount[PointType]], 6);
                            TrajInform[TrajIndex].After[TrajInform[TrajIndex].PointCount[PointType]] = false;

                            break;
                        }
                        }
                        TrajInform[TrajIndex].PointCount[PointType]++;
                    }
                }


                return(true);
            }
            catch
            {
                // MessageBox.Show(ex.Message + LineCount.ToString());
                return(false);
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                }
                if (sr != null)
                {
                    sr.Close();
                }
            }
        }
 // sParseLine()
 // Simple parsing, does not check for quotes containing commas, nor trim quotes.
 // Converts StrLine to an array as ArrLine
 public void sParseLine()
 {
     ArrLine = StrLine.Split(commaDelim);
 }
Example #4
0
        /*
         * Load ParamModel from file
         */
        public static paramModel_t ParamModelHyperParamLoader(string ParamModelHyperParamFileName)
        {
            paramModel_t ParamModel = new paramModel_t();

            using (StreamReader ParamModelFile = new StreamReader(ParamModelHyperParamFileName))
            {
                string StrLine;
                while ((StrLine = ParamModelFile.ReadLine()) != null)
                {
                    string[] StrLineSplit = StrLine.Split('\t');
                    string   Key          = StrLineSplit[0];
                    string   Val          = StrLineSplit[1];
                    switch (Key)
                    {
                    case "nHid":
                        ParamModel.nHid = int.Parse(Val);
                        break;

                    case "nHidLayer":
                        ParamModel.nHidLayer = int.Parse(Val);
                        break;

                    case "To":
                        ParamModel.To = float.Parse(Val);
                        break;

                    case "nOutput":
                        ParamModel.nOutput = int.Parse(Val);
                        break;

                    case "nInput":
                        ParamModel.nInput = int.Parse(Val);
                        break;

                    case "eta":
                        ParamModel.eta = float.Parse(Val);
                        break;

                    case "alpha":
                        ParamModel.alpha = float.Parse(Val);
                        break;

                    case "beta":
                        ParamModel.beta = float.Parse(Val);
                        break;

                    case "T_value":
                        ParamModel.T_value = float.Parse(Val);
                        break;

                    case "OutputType":
                        ParamModel.OutputType = Val;
                        break;

                    default:
                        throw new Exception("Unknown type of Key in hyperparameter file.");
                    }
                }
                ParamModel.T = new float[ParamModel.nHidLayer];
                for (int Idx = 0; Idx < ParamModel.T.Length; ++Idx)
                {
                    ParamModel.T[Idx] = ParamModel.T_value;
                }
                ParamModel.b = new DenseColumnVector(ParamModel.nHid, ParamModel.alpha - 1.0f);
            }

            return(ParamModel);
        }