Example #1
0
        /// <summary>
        /// Crea el corral
        /// </summary>
        private void CreatePlaypen()
        {
            //Crear el corral que tenga una casilla para cada niño.
            playpen = new Point[ChildrenCount];

            //Las casillas deben ser adyacentes
            //Generar aleatoriamente la primera casilla del corral
            Point pos = RandomPos();

            var i = 0;

            playpen[i] = pos;
            this[pos].CurrentStatus = CellStatus.Empty;
            this[pos].PlaypenIndex  = i++; //Guarda la posición de la casilla en el corral

            //Generar el resto de las casillas del corral
            while (i < ChildrenCount)
            {
                //Obtener los lados libre de la casilla
                var adjacents = AdjacentCells(pos, p => !this[p].IsPlaypen());
                //Decidir aleatoriamentes hacia cuál de los lados libres se va a crear la nueva casilla del corral
                if (adjacents.Count > 0)
                {
                    var n = randomMov.Next() % adjacents.Count;
                    pos = adjacents.ToArray <Tuple <MovementDirection, Point> >()[n].Item2;
                }
                else
                {
                    var j = i - 2;

                    while (adjacents.Count == 0 && j >= 0)
                    {
                        pos       = playpen[j--];
                        adjacents = AdjacentCells(pos, p => !this[p].IsPlaypen());
                    }

                    if (adjacents.Count > 0)
                    {
                        var n = randomMov.Next() % adjacents.Count;
                        pos = adjacents.ToArray <Tuple <MovementDirection, Point> >()[n].Item2;
                    }
                }

                //Adicionar la casilla al corral
                playpen[i] = pos;              //La próxima casilla se genera a partir de ésta
                this[pos].CurrentStatus = CellStatus.Empty;
                this[pos].PlaypenIndex  = i++; //Guarda la posición de la casilla en el corral
            }
        }
Example #2
0
        public static int DiscreteUniformZeroOrOne()
        {
            int value = zeroOrOne.Next();

            Debug.Assert(value == 0 || value == 1);
            return(value);
        }
        static MatrixValue Generate(Int32 n, Int32 m)
        {
            var distribution = new DiscreteUniformDistribution(Rng);
            var l            = n * m;
            var M            = new MatrixValue(n, m);
            var numbers      = new List <Int32>();

            distribution.Alpha = 0;

            for (var i = 1; i <= l; i++)
            {
                numbers.Add(i);
            }

            for (var j = 1; j <= n; j++)
            {
                for (var i = 1; i <= m; i++)
                {
                    distribution.Beta = numbers.Count - 1;
                    var index = distribution.Next();
                    index   = Math.Max(Math.Min(0, index), numbers.Count - 1);
                    M[j, i] = new ScalarValue(numbers[index]);
                    numbers.RemoveAt(index);
                }
            }

            return(M);
        }
Example #4
0
 protected virtual bool RandomMove(HashSet <Tuple <MovementDirection, Point> > adjacents, Func <Point, bool> precondition = null)
 {
     if (adjacents.Count > 0)
     {
         //Utilizar un generador para cada tipo de objeto
         var n    = randomMov.Next() % adjacents.Count;
         var oper = adjacents.ToArray <Tuple <MovementDirection, Point> >()[n];
         return(MoveTo(oper.Item2, precondition));
     }
     else
     {
         return(false);
     }
 }
Example #5
0
        /// <summary>
        /// Genera entre 0 y maxCount casillas sucias en la cuadrícula
        /// </summary>
        /// <param name="maxCount"> Máximo número de casillas sucias a generar </param>
        /// <param name="grid"> Cuadrícula donde se va a generar la suciedad </param>
        /// <returns> Número de casillas sucias generadas </returns>
        public int GenDirt(int maxCount, List <Point> grid)
        {
            if ((maxCount == 0) || (grid.Count == 0))
            {
                return(0);
            }
            var result = 0;
            var count  = randomDirt.Next() % (maxCount + 1);

            while (result < count)
            {
                var p = grid[randomGrid.Next() % grid.Count];
                this[p].Dirty();
                dirtyCells.Add(p);
                grid.Remove(p);
                result++;
            }
            DirtCount += result;
            return(result);
        }
        public MatrixValue Function(MatrixValue cfgs, ScalarValue n, FunctionValue f, ArgumentsValue P)
        {
            var numberOfBootstrapSamples = n.GetIntegerOrThrowException("n", Name);
            var nConfigs     = cfgs.DimensionY;
            var nData        = cfgs.DimensionX;
            var distribution = new DiscreteUniformDistribution(Rng)
            {
                Beta  = nConfigs,
                Alpha = 1
            };

            if (numberOfBootstrapSamples <= 1)
            {
                throw new YAMPException("Bootstrap: The number of bootstrap samples n is smaller or equal to 1!");
            }

            var parameters = new ArgumentsValue(cfgs);

            foreach (var m in P.Values)
            {
                parameters.Insert(m);
            }

            var temp    = f.Perform(Context, parameters);
            var nResult = 0;//dimension of the result

            if (temp is ScalarValue)
            {
                nResult = 1;
            }
            else if (temp is MatrixValue)
            {
                nResult = ((MatrixValue)temp).Length;
            }
            else
            {
                throw new YAMPException("Bootstrap: The observable f has to return either a scalar or a matrix!");
            }

            var BootstrapObservable = new MatrixValue(numberOfBootstrapSamples, nResult);

            for (var i = 1; i <= numberOfBootstrapSamples; i++)
            {
                var BootstrapConfigs = new MatrixValue(nConfigs, nData);

                for (var j = 1; j <= nConfigs; j++)
                {
                    var idx = distribution.Next();

                    for (var k = 1; k <= nData; k++)
                    {
                        BootstrapConfigs[j, k] = cfgs[idx, k];
                    }
                }

                parameters = new ArgumentsValue(BootstrapConfigs);

                foreach (var m in P.Values)
                {
                    parameters.Insert(m);
                }

                temp = f.Perform(Context, parameters);

                if (temp is ScalarValue)
                {
                    BootstrapObservable[i] = (ScalarValue)temp;
                }
                else
                {
                    var m = (MatrixValue)temp;

                    for (var k = 1; k <= nResult; k++)
                    {
                        BootstrapObservable[i, k] = m[k];
                    }
                }
            }

            temp = YMath.Average(BootstrapObservable);

            for (var i = 1; i <= numberOfBootstrapSamples; i++)
            {
                if (temp is ScalarValue)
                {
                    BootstrapObservable[i] -= temp as ScalarValue;
                    BootstrapObservable[i] *= BootstrapObservable[i];
                }
                else
                {
                    var T = temp as MatrixValue;

                    for (var k = 1; k <= nResult; k++)
                    {
                        BootstrapObservable[i, k] -= T[k];
                        BootstrapObservable[i, k] *= BootstrapObservable[i, k];
                    }
                }
            }

            var error = YMath.Average(BootstrapObservable);
            var sqrt  = new SqrtFunction();

            error = sqrt.Perform(error);
            var result = new MatrixValue(2, nResult);

            if (temp is ScalarValue)
            {
                result[1] = (ScalarValue)temp;
                result[2] = (ScalarValue)error;
            }
            else
            {
                var T = (MatrixValue)temp;
                var E = (MatrixValue)error;

                for (var k = 1; k <= nResult; k++)
                {
                    result[1, k] = T[k];
                    result[2, k] = E[k];
                }
            }

            return(result);
        }
Example #7
0
 public ScalarValue Function(ScalarValue min, ScalarValue max)
 {
     ran.Alpha = min.GetIntegerOrThrowException("min", Name);
     ran.Beta  = max.GetIntegerOrThrowException("max", Name);
     return(new ScalarValue(ran.Next()));
 }
Example #8
0
 //Genera aleatoriamente una casilla para situar algún elemento del ambiente
 private Point RandomPos()
 {
     return(new Point(randomXPos.Next(), randomYPos.Next()));
     //return new Point(n / Dimensions.Y, n % Dimensions.Y);
     //return new Point(randomObj.RandomNumber(0, Dimensions.X), randomObj.RandomNumber(0, Dimensions.Y));
 }
Example #9
0
        public MatrixValue Function(MatrixValue cfgs, ScalarValue n, FunctionValue f, ArgumentsValue P)
        {
            var numberOfBootstrapSamples = n.GetIntegerOrThrowException("n", Name);
            var nConfigs = cfgs.DimensionY;
            var nData = cfgs.DimensionX;
            var distribution = new DiscreteUniformDistribution(Rng)
            {
                Beta = nConfigs,
                Alpha = 1
            };

            if (numberOfBootstrapSamples <= 1)
                throw new YAMPException("Bootstrap: The number of bootstrap samples n is smaller or equal to 1!");

            var parameters = new ArgumentsValue(cfgs);

            foreach (var m in P.Values)
            {
                parameters.Insert(m);
            }

            var temp = f.Perform(Context, parameters);
            var nResult = 0;//dimension of the result

            if (temp is ScalarValue)
            {
                nResult = 1;
            }
            else if (temp is MatrixValue)
            {
                nResult = ((MatrixValue)temp).Length;
            }
            else
            {
                throw new YAMPException("Bootstrap: The observable f has to return either a scalar or a matrix!");
            }

            var BootstrapObservable = new MatrixValue(numberOfBootstrapSamples, nResult);

            for (var i = 1; i <= numberOfBootstrapSamples; i++)
            {
                var BootstrapConfigs = new MatrixValue(nConfigs, nData);

                for (var j = 1; j <= nConfigs; j++)
                {
                    var idx = distribution.Next();

                    for (var k = 1; k <= nData; k++)
                    {
                        BootstrapConfigs[j, k] = cfgs[idx, k];
                    }
                }

                parameters = new ArgumentsValue(BootstrapConfigs);

                foreach (var m in P.Values)
                {
                    parameters.Insert(m);
                }

                temp = f.Perform(Context, parameters);

                if (temp is ScalarValue)
                {
                    BootstrapObservable[i] = (ScalarValue)temp;
                }
                else
                {
                    var m = (MatrixValue)temp;

                    for (var k = 1; k <= nResult; k++)
                    {
                        BootstrapObservable[i, k] = m[k];
                    }
                }
            }

            temp = YMath.Average(BootstrapObservable);

            for (var i = 1; i <= numberOfBootstrapSamples; i++)
            {
                if (temp is ScalarValue)
                {
                    BootstrapObservable[i] -= temp as ScalarValue;
                    BootstrapObservable[i] *= BootstrapObservable[i];
                }
                else
                {
                    var T = temp as MatrixValue;

                    for (var k = 1; k <= nResult; k++)
                    {
                        BootstrapObservable[i, k] -= T[k];
                        BootstrapObservable[i, k] *= BootstrapObservable[i, k];
                    }
                }
            }

            var error = YMath.Average(BootstrapObservable);
            var sqrt = new SqrtFunction();
            error = sqrt.Perform(error);
            var result = new MatrixValue(2, nResult);

            if (temp is ScalarValue)
            {
                result[1] = (ScalarValue)temp;
                result[2] = (ScalarValue)error;
            }
            else
            {
                var T = (MatrixValue)temp;
                var E = (MatrixValue)error;

                for (var k = 1; k <= nResult; k++)
                {
                    result[1, k] = T[k];
                    result[2, k] = E[k];
                }
            }

            return result;
        }