Esempio n. 1
0
        /// <summary>
        /// example target distribution function
        /// </summary>
        /// <returns></returns>
        public static double ExampleDensityFunction(LineSegmentConfiguration x)
        {
            // calculate hp
            x.FreeEndsFreeSegments();
            x.JoinSegments();
            x.CalculatePC();
            x.CalculateSumPC();
            x.CalculateTotalL();
            x.CalculateAverageL();

            // explicitly calculate sum(pL(s)), sum(pG(s)), and sum(pI(s)) for the efficiency sake
            int count = x.Configure.Count;
            double sumPL = 0.0;
            double sumPG = 0.0;
            double sumPI = 0.0;
            for (int s = 0; s < count; s++)
            {
                // calculate sum(pL(s))
                x.Configure[s].CalculatePL(x.TotalLength, x.AverageLength);
                // try different weight
                double pL = x.Configure[s].PL;
                if (pL < 0.0)
                    sumPL += pL * 100;
                else
                    sumPL += pL;
                x.SumPL = sumPL;

                // calculate sum(pG(s))
                x.Configure[s].CalculatePG(x.Gt);
                double pG = x.Configure[s].PG;
                if (pG < 0.0)
                    sumPG += pG * 100;
                else
                    sumPG += pG;
                x.SumPG = sumPG;

                // calculate sum(pI(s))
                x.Configure[s].CalculatePI(x.It, x.KI);
                double pI = x.Configure[s].PI;
                if (pI < 0.0)
                    sumPI += pI * 10000;
                else
                    sumPI += pI;
                x.SumPI = sumPI;
            }

            double up = x.W1 * x.N + x.W2 * x.NF + x.W3 * x.NFE +
                x.WC * x.SumPC + x.WL * x.SumPL;

            // calculate hd
            double ud = x.WG * x.SumPG + x.WI * x.SumPI;

            // h = hp + hd;
            double u = up + ud;
            //return 1 / h;
            // density function U = exp(-h);
            double h = System.Math.Exp(-1.0 * u);
            return h;
        }