Beispiel #1
0
        public Field(int rows, int columns, int startRow, int startColumn)
        {
            this.columns = columns;

            var mainDescriptionGenerator = new DimensionDescriptionGenerator
                                               {
                                                   Length = rows,
                                                   Assignment = DimensionAssignment.Row,
                                                   Breadth = 1,
                                                   Mode = TraverseMode.Serpentine
                                               };
            SetStartSimple(mainDescriptionGenerator, startRow, rows);

            var subDescriptionGenerator = new DimensionDescriptionGenerator
                                              {
                                                  Length = columns,
                                                  Assignment = DimensionAssignment.Column,
                                                  Breadth = 1,
                                                  Mode = TraverseMode.Serpentine
                                              };
            SetStartSimple(subDescriptionGenerator, startColumn, columns);

            main = mainDescriptionGenerator.Generate();
            sub = subDescriptionGenerator.Generate();
        }
Beispiel #2
0
        public override EnvironmentDescription <double, int> GetEnvironmentDescription()
        {
            SpaceDescription <int> actionDescription = new SpaceDescription <int>(new int[1] {
                0
            }, new int[1] {
                1
            }, null, null);

            double[] averageState = new double[6];
            double[] stddevState  = new double[6];
            averageState[0] = 0;
            stddevState[0]  = 0.8;
            averageState[1] = 0;
            stddevState[1]  = 0.8;
            averageState[2] = 0;
            stddevState[2]  = 5;
            averageState[3] = 0;
            stddevState[3]  = 0.8;
            averageState[4] = 0;
            stddevState[4]  = 0.8;
            averageState[5] = 0;
            stddevState[5]  = 5;
            SpaceDescription <double>     stateDescription  = new SpaceDescription <double>(null, null, averageState, stddevState);
            DimensionDescription <double> rewardDescription = new DimensionDescription <double>(-10, 10);

            return(new EnvironmentDescription <double, int>(stateDescription, actionDescription, rewardDescription, this.discountFactor));
        }
Beispiel #3
0
        public override EnvironmentDescription <double, double> GetEnvironmentDescription()
        {
            double[] averageState = Enumerable.Repeat(0.0, 12).ToArray();
            double[] stdDevState  = new double[12];

            averageState[0] = 10;
            stdDevState[0]  = 3;
            stdDevState[1]  = 1;
            stdDevState[2]  = 0.01;
            stdDevState[3]  = 0.01;
            int i = 0;

            for (i = 0; i < 3; i++)
            {
                stdDevState[i * 2 + 4] = 3; // r
                stdDevState[i * 2 + 5] = 1; // cos(alpha)
            }

            stdDevState[10] = stdDevState[11] = 1;

            double[] minAction = Enumerable.Repeat(0.0, this.Arm.Compartments.Length * 3).ToArray();
            double[] maxAction = Enumerable.Repeat(1.0, this.Arm.Compartments.Length * 3).ToArray();
            SpaceDescription <double>     actionsDescription = new SpaceDescription <double>(minAction, maxAction, null, null);
            SpaceDescription <double>     statesDescription  = new SpaceDescription <double>(null, null, averageState, stdDevState);
            DimensionDescription <double> rewardDescription  = new DimensionDescription <double>(-100, 100);

            return(new EnvironmentDescription <double, double>(statesDescription, actionsDescription, rewardDescription, 0.9));
        }
Beispiel #4
0
        public override EnvironmentDescription <int, int> GetEnvironmentDescription()
        {
            SpaceDescription <int>        stateSpaceDescription         = new SpaceDescription <int>(new[] { 0 }, new[] { (this.Height * this.Width) - 1 });
            SpaceDescription <int>        actionSpaceDescription        = new SpaceDescription <int>(new[] { 0 }, new[] { 3 });
            DimensionDescription <double> reinforcementSpaceDescription = new DimensionDescription <double>(-1, 10);

            return(new EnvironmentDescription <int, int>(stateSpaceDescription, actionSpaceDescription, reinforcementSpaceDescription, DiscountFactor));
        }
 public EnvironmentDescription(
     SpaceDescription <TStateType> stateSpaceDescription,
     SpaceDescription <TActionType> actionSpaceDescription,
     DimensionDescription <double> reinforcementSpaceDescription,
     double discountFactor)
 {
     this.ActionSpaceDescription        = actionSpaceDescription;
     this.StateSpaceDescription         = stateSpaceDescription;
     this.ReinforcementSpaceDescription = reinforcementSpaceDescription;
     this.DiscountFactor = discountFactor;
 }
Beispiel #6
0
        public override EnvironmentDescription <double, int> GetEnvironmentDescription()
        {
            double[] averageState = new double[2] {
                14, -55
            };
            double[] stddevState = new double[2] {
                19, 55
            };
            SpaceDescription <double>     stateDescription         = new SpaceDescription <double>(null, null, averageState, stddevState);
            SpaceDescription <int>        actionDescription        = new SpaceDescription <int>(new int[] { 0 }, new int[] { 4 }, null, null);
            DimensionDescription <double> reinforcementDescription = new DimensionDescription <double>(-10, 10);

            return(new EnvironmentDescription <double, int>(stateDescription, actionDescription, reinforcementDescription, discountFactor));
        }
Beispiel #7
0
        public Field(int rows, int columns, int startRow, int startColumn)
        {
            this.columns = columns;

            if (startRow == 1)
                main = DimensionDescription.CreateIncrementDescription(rows, DimensionAssignment.Row, TraverseMode.Serpentine);
            else if(startRow == rows)
                main = DimensionDescription.CreateDecrementDescription(rows, DimensionAssignment.Row, TraverseMode.Serpentine);
            else
                throw new ArgumentException();

            if (startColumn == 1)
                sub = DimensionDescription.CreateIncrementDescription(columns, DimensionAssignment.Column, TraverseMode.Serpentine);
            else if (startColumn == columns)
                sub = DimensionDescription.CreateDecrementDescription(columns, DimensionAssignment.Column, TraverseMode.Serpentine);
            else
                throw new ArgumentException();
        }
        public override EnvironmentDescription <double, double> GetEnvironmentDescription()
        {
            double[] standardDeviation = new double[6];
            double[] averageState      = Enumerable.Repeat <double>(0.0, 6).ToArray();

            standardDeviation[0] = 3;
            standardDeviation[1] = 2;
            standardDeviation[2] = 3;
            standardDeviation[3] = 2;
            standardDeviation[4] = 3;
            standardDeviation[5] = 2;

            SpaceDescription <double> stateDescription = new SpaceDescription <double>(null, null, averageState, standardDeviation);

            SpaceDescription <double> actionDescription
                = new SpaceDescription <double>(
                      Enumerable.Repeat <double>(-50, 3).ToArray(),
                      Enumerable.Repeat <double>(50, 3).ToArray());

            DimensionDescription <double> reinforcementDescription = new DimensionDescription <double>(-4, 4);

            return(new EnvironmentDescription <double, double>(stateDescription, actionDescription, reinforcementDescription, 0.9));
        }
Beispiel #9
0
        public override EnvironmentDescription <double, double> GetEnvironmentDescription()
        {
            double[] average = new double[]
            {
                0.1, 0, 0.5, 0.6, 1, 0, 0, 0.1, 0, 0.5,
                0, 0, 0,
                0, 0, 0,
                0, 0, 0,
                0, 0, 0,
                0, 0, 0,
                0, 0, 0,
                0, 0, 0
            };
            double[] standardDeviation = new double[]
            {
                0.1, 1, 0.5, 0.2, 2, 0.7, 0.7, 0.1, 1, 0.5,
                0.7, 0.7, 6,
                0.7, 0.7, 6,
                0.7, 0.7, 6,
                0.7, 0.7, 6,
                0.7, 0.7, 6,
                0.7, 0.7, 6,
                0.7, 0.7, 6,
            };

            SpaceDescription <double> stateSpaceDescription
                = new SpaceDescription <double>(null, null, average, standardDeviation);

            SpaceDescription <double> actionSpaceDescription
                = new SpaceDescription <double>(Enumerable.Repeat(-1.0, 6).ToArray(), Enumerable.Repeat(1.0, 6).ToArray());

            DimensionDescription <double> reinforcementSpaceDescription
                = new DimensionDescription <double>(-1, 1, 0, 1);

            return(new EnvironmentDescription <double, double>(stateSpaceDescription, actionSpaceDescription, reinforcementSpaceDescription, 0.9));
        }
Beispiel #10
0
        public Field(int rows, int columns, int startRow, int startColumn, char startDirection, char mode, int breadth)
        {
            this.columns = columns;

            TraverseMode mainMode;
            switch (mode)
            {
                case 'S':
                    mainMode = TraverseMode.Serpentine;
                    break;
                case 'Z':
                    mainMode = TraverseMode.Circular;
                    break;
                default:
                    throw new ArgumentException();
            }

            Order startSubOrder;
            switch (startDirection)
            {
                case 'N':
                    startSubOrder = Order.Upwards;
                    break;
                case 'S':
                    startSubOrder = Order.Downwards;
                    break;
                case 'O':
                    startSubOrder = Order.Upwards;
                    break;
                case 'W':
                    startSubOrder = Order.Downwards;
                    break;
                default:
                    throw new ArgumentException();
            }

            const TraverseMode subMode = TraverseMode.Serpentine;

            var rowDescriptionGenerator = new DimensionDescriptionGenerator {Length = rows, Start = startRow - 1, Assignment = DimensionAssignment.Row};
            var columnDescriptionGenerator = new DimensionDescriptionGenerator {Length = columns, Start = startColumn - 1, Assignment = DimensionAssignment.Column};

            DimensionDescriptionGenerator mainDescriptionGenerator, subDescriptionGenerator;
            if(startDirection == 'N' || startDirection == 'S')
            {
                mainDescriptionGenerator = columnDescriptionGenerator;
                subDescriptionGenerator = rowDescriptionGenerator;
            } else if(startDirection == 'O' || startDirection == 'W')
            {
                mainDescriptionGenerator = rowDescriptionGenerator;
                subDescriptionGenerator = columnDescriptionGenerator;
            } else
            {
                throw new ArgumentException();
            }

            mainDescriptionGenerator.Breadth = breadth;
            mainDescriptionGenerator.Mode = mainMode;
            mainDescriptionGenerator.StartSubOrder = startSubOrder;
            subDescriptionGenerator.Breadth = 1;
            subDescriptionGenerator.Mode = subMode;

            main = mainDescriptionGenerator.Generate();
            sub = subDescriptionGenerator.Generate();
        }
Beispiel #11
0
        public int[] GetSequence()
        {
            var result = new List<int>();

            do
            {
                int?[] iArray = main.Next();
                do
                {
                    int?[] jArray = sub.Next();
                    if(jArray.Length != 1 || !jArray[0].HasValue)
                        throw new Exception();
                    int j = jArray[0].Value;

                    foreach (var iOption in iArray)
                    {
                        int value = 0;
                        if (iOption.HasValue)
                        {
                            int i = iOption.Value;
                            int rowIndex = main.Assignment == DimensionAssignment.Row ? i : j;
                            int columnIndex = main.Assignment == DimensionAssignment.Column ? i : j;

                            value = rowIndex*columns + columnIndex + 1;
                        }
                        result.Add(value);
                    }

                } while (sub.HasNext);
                sub = sub.CreateInverseDescription();
            } while (main.HasNext);

            return result.ToArray();
        }
Beispiel #12
0
        public Field(int rows, int columns, int startRow, int startColumn, char startDirection, char mode, int breadth)
        {
            this.columns = columns;

            var mainMode = GetTraverseModeFromChar(mode);
            var startSubOrder = DetermineStartSubOrder(startDirection);
            const TraverseMode subMode = TraverseMode.Serpentine;

            var rowDescriptionGenerator = new DimensionDescriptionGenerator {Length = rows, Start = startRow - 1, Assignment = DimensionAssignment.Row};
            var columnDescriptionGenerator = new DimensionDescriptionGenerator {Length = columns, Start = startColumn - 1, Assignment = DimensionAssignment.Column};

            DimensionDescriptionGenerator mainDescriptionGenerator, subDescriptionGenerator;
            if(startDirection == 'N' || startDirection == 'S')
            {
                mainDescriptionGenerator = columnDescriptionGenerator;
                subDescriptionGenerator = rowDescriptionGenerator;
            } else if(startDirection == 'O' || startDirection == 'W')
            {
                mainDescriptionGenerator = rowDescriptionGenerator;
                subDescriptionGenerator = columnDescriptionGenerator;
            } else
            {
                throw new ArgumentException();
            }

            mainDescriptionGenerator.Breadth = breadth;
            mainDescriptionGenerator.Mode = mainMode;
            mainDescriptionGenerator.StartSubOrder = startSubOrder;

            subDescriptionGenerator.Breadth = 1;
            subDescriptionGenerator.Mode = subMode;

            main = mainDescriptionGenerator.Generate();
            sub = subDescriptionGenerator.Generate();
        }
Beispiel #13
0
        public int[] GetSequence()
        {
            var result = new int[main.Max * sub.Max];
            int index = 0;

            do
            {
                int[] iArray = main.Next();
                do
                {
                    int[] jArray = sub.Next();
                    if(jArray.Length != 1)
                        throw new InvalidOperationException();
                    int j = jArray[0];

                    foreach (var i in iArray)
                    {
                        int rowIndex = main.Assignment == DimensionAssignment.Row ? i : j;
                        int columnIndex = main.Assignment == DimensionAssignment.Column ? i : j;

                        int value = rowIndex*columns + columnIndex;
                        result[index] = value + 1;
                        index++;
                    }

                } while (sub.HasNext);
                sub = sub.CreateInverseDescription();
            } while (main.HasNext);

            return result;
        }
Beispiel #14
0
        public Field(int rows, int columns, int startRow, int startColumn, char startDirection, char mode)
        {
            this.columns = columns;

            TraverseMode mainMode;
            switch (mode)
            {
                case 'S':
                    mainMode = TraverseMode.Serpentine;
                    break;
                case 'Z':
                    mainMode = TraverseMode.Circular;
                    break;
                default:
                    throw new ArgumentException();
            }

            const TraverseMode subMode = TraverseMode.Serpentine;

            if(startRow == 1 && startColumn == 1)
            {
                switch (startDirection)
                {
                    case 'O':
                        main = DimensionDescription.CreateIncrementDescription(rows, DimensionAssignment.Row, mainMode);
                        sub = DimensionDescription.CreateIncrementDescription(columns, DimensionAssignment.Column, subMode);
                        return;
                    case 'S':
                        main = DimensionDescription.CreateIncrementDescription(columns, DimensionAssignment.Column, mainMode);
                        sub = DimensionDescription.CreateIncrementDescription(rows, DimensionAssignment.Row, subMode);
                        return;
                    default:
                        throw new ArgumentException();
                }
            } else if(startRow == 1 && startColumn == columns)
            {
                switch (startDirection)
                {
                    case 'W':
                        main = DimensionDescription.CreateIncrementDescription(rows, DimensionAssignment.Row, mainMode);
                        sub = DimensionDescription.CreateDecrementDescription(columns, DimensionAssignment.Column, subMode);
                        return;
                    case 'S':
                        main = DimensionDescription.CreateDecrementDescription(columns, DimensionAssignment.Column, mainMode);
                        sub = DimensionDescription.CreateIncrementDescription(rows, DimensionAssignment.Row, subMode);
                        return;
                    default:
                        throw new ArgumentException();
                }
            } else if(startRow == rows && startColumn == 1)
            {
                switch (startDirection)
                {
                    case 'O':
                        main = DimensionDescription.CreateDecrementDescription(rows, DimensionAssignment.Row, mainMode);
                        sub = DimensionDescription.CreateIncrementDescription(columns, DimensionAssignment.Column, subMode);
                        return;
                    case 'N':
                        main = DimensionDescription.CreateIncrementDescription(columns, DimensionAssignment.Column, mainMode);
                        sub = DimensionDescription.CreateDecrementDescription(rows, DimensionAssignment.Row, subMode);
                        return;
                    default:
                        throw new ArgumentException();
                }
            } else if(startRow == rows && startColumn == columns)
            {
                switch (startDirection)
                {
                    case 'W':
                        main = DimensionDescription.CreateDecrementDescription(rows, DimensionAssignment.Row, mainMode);
                        sub = DimensionDescription.CreateDecrementDescription(columns, DimensionAssignment.Column, subMode);
                        return;
                    case 'N':
                        main = DimensionDescription.CreateDecrementDescription(columns, DimensionAssignment.Column, mainMode);
                        sub = DimensionDescription.CreateDecrementDescription(rows, DimensionAssignment.Row, subMode);
                        return;
                    default:
                        throw new ArgumentException();
                }
            }
            else
            {
                throw new ArgumentException();
            }
        }
Beispiel #15
0
        public int[] GetSequence()
        {
            var result = new int[main.Max * sub.Max];
            int index = 0;

            do
            {
                int i = main.Next();
                do
                {
                    int j = sub.Next();

                    int rowIndex = main.Assignment == DimensionAssignment.Row ? i : j;
                    int columnIndex = main.Assignment == DimensionAssignment.Column ? i : j;

                    int value = rowIndex*columns + columnIndex;
                    result[index] = value + 1;
                    index++;

                } while (sub.HasNext);
                sub = sub.CreateSwapedDescription();
            } while (main.HasNext);

            return result;
        }