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(); }
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)); }
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)); }
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; }
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)); }
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)); }
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)); }
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(); }
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(); }
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(); }
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; }
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(); } }
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; }