예제 #1
0
        public double DifParamSimplex(ParamObjPH param)
        {
            double[] llk;
            double   outProc        = 0;
            int      countIteration = 0;

            if (param.paramSimplex.Length > paramSimplex.Length)
            {
                countIteration = paramSimplex.Length;
                llk            = param.procentParamSimplex;
            }
            else
            {
                countIteration = param.paramSimplex.Length;
                llk            = procentParamSimplex;
            }

            for (int i = 0; i < countIteration; i++)
            {
                outProc += Otnoshenie(paramSimplex[i], param.paramSimplex[i]) * llk[i];
            }



            return(outProc * 25);
        }
예제 #2
0
        public double DifParamHoleEps(ParamObjPH param)
        {
            double outProc        = 0;
            int    countIteration = 0;

            if (param.paramHole.Length > paramHole.Length)
            {
                countIteration = paramHole.Length;
            }
            else
            {
                countIteration = param.paramHole.Length;
            }


            for (int i = 0; i < countIteration; i++)
            {
                outProc += Math.Pow(Math.Abs(paramHole[i] - param.paramHole[i]), 3);
            }

            outProc = Math.Pow(outProc, 1.0 / 3.0);



            return(outProc);
        }
예제 #3
0
        public double DifParamHole(ParamObjPH param)
        {
            double outProc = 0;

            double[] llk;
            double[] llk1;
            int      countIteration = 0;

            if (param.paramHole.Length > paramHole.Length)
            {
                countIteration = paramHole.Length;
                llk            = param.procentParamHole;
                llk1           = param.paramHole;
            }
            else
            {
                countIteration = param.paramHole.Length;
                llk            = procentParamHole;
                llk1           = paramHole;
            }
            if (llk1.Length == 1 && llk1[0] == 0)
            {
                return(0.5);
            }

            for (int i = 0; i < countIteration; i++)
            {
                outProc += Otnoshenie(paramHole[i], param.paramHole[i]) * llk[i];
            }



            return(outProc * 75);
        }
예제 #4
0
        /// <summary>
        /// Возвращает наилучший процент по схожести дыр
        /// </summary>
        /// <param name="param">Объект поступивший в систему</param>
        /// <returns></returns>
        public double ComparisonBetti(ParamObjPH param)
        {
            double outProcent = 0, tempOutProcent = 0;
            int    indexBest = 0;
            double prov      = 0;

            double[] outDebag = new double[paramHole.Length];
            for (int i = 0; i < param.paramHole2.Length; i++)
            {
                prov += param.paramHole2[i];
            }

            for (int i = 0; i < paramHole.Length; i++)
            {
                List <double> tempParamHole1 = new List <double>();
                List <double> tempParamHole2 = new List <double>();
                for (int y = 0; y < paramHole.Length; y++)
                {
                    tempParamHole1.Add((paramHole[y] - paramHole[i]) / paramHole2[i]);
                }
                for (int y = 0; y < paramHole2.Length; y++)
                {
                    tempParamHole2.Add(paramHole2[y] / paramHole2[i]);
                }

                //если хоть в одном дыра 1 а в другом от одной то 100%
                if ((param.paramHole.Length == 1 && tempParamHole2.Count >= 1))
                {
                    return(100);
                }

                if ((param.paramHole.Length >= 1 && tempParamHole2.Count == 0))
                {
                    return(0);
                }



                tempOutProcent = CalculetRecursion(tempParamHole1, tempParamHole2, param.paramHole, param.paramHole2);

                tempParamHole1.RemoveAt(i);
                tempParamHole2.RemoveAt(i);

                outDebag[i] = tempOutProcent;
                if (outProcent < tempOutProcent)
                {
                    outProcent = tempOutProcent;
                    indexBest  = i;
                }
            }

            return(outProcent / prov * 100);
        }
예제 #5
0
        public void Normalized(ParamObjPH param)
        {
            double a = param.paramHole[0] / paramHole[0];
            double b = param.paramSimplex[0] / paramSimplex[0];

            for (int i = 0; i < paramHole.Length; i++)
            {
                paramHole[i] *= a;
            }
            for (int i = 0; i < paramSimplex.Length; i++)
            {
                paramSimplex[i] *= b;
            }
        }
예제 #6
0
        /// <summary>Возвращает наилучший процент по схожести компонент (нужно было сделать универсальную функцию но я ленив)</summary>
        public double ComparisonBettiKomponenta(ParamObjPH param)
        {
            double outProcent = 0, tempOutProcent = 0;
            int    indexBest = 0;
            double prov      = 0;

            double[] outDebag = new double[paramSimplex.Length];
            for (int i = 1; i < param.paramSimplex2.Length; i++)
            {
                prov += param.paramSimplex2[i];
            }

            for (int i = 0; i < paramSimplex.Length; i++)
            {
                List <double> tempparamSimplex1 = new List <double>();
                List <double> tempparamSimplex2 = new List <double>();
                for (int y = 0; y < paramSimplex.Length; y++)
                {
                    tempparamSimplex1.Add((paramSimplex[y] - paramSimplex[i]) / paramSimplex2[i]);
                }
                for (int y = 0; y < paramSimplex2.Length; y++)
                {
                    tempparamSimplex2.Add(paramSimplex2[y] / paramSimplex2[i]);
                }

                //если хоть в одном дыра 1 а в другом от одной то 100%
                //if ((param.paramSimplex.Length == 1 && tempparamSimplex2.Count >= 1))
                //    return 100;

                tempparamSimplex1.RemoveAt(i);
                tempparamSimplex2.RemoveAt(i);

                tempOutProcent = CalculetRecursion(tempparamSimplex1, tempparamSimplex2, param.paramSimplex, param.paramSimplex2);
                outDebag[i]    = tempOutProcent;
                if (outProcent < tempOutProcent)
                {
                    outProcent = tempOutProcent;
                    indexBest  = i;
                }
            }

            return(outProcent / prov * 100);
        }