- Timestamp:
- 10/01/13 16:39:35 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/Robocode.TrunkInt/HeuristicLab.Problems.Robocode/3.3/Grammar.cs
r10011 r10014 20 20 #endregion 21 21 22 using System.Linq; 22 23 using HeuristicLab.Common; 23 24 using HeuristicLab.Core; … … 29 30 [Item("Robocode Grammar", "The grammar for the Robocode GP problem.")] 30 31 public class Grammar : SymbolicExpressionGrammar { 32 private const string EventsName = "Events"; 33 private const string ExpressionsName = "Expressions"; 34 private const string ControlStatementsName = "Control Statements"; 35 private const string RobocodeFunctionsName = "Robocode Functions"; 36 private const string RelationalOperatorsName = "Relational Operators"; 37 private const string LogicalOperators = "Logical Operators"; 38 private const string NumericalOperatorsName = "Numerical Operators"; 39 31 40 [StorableConstructor] 32 41 protected Grammar(bool deserializing) : base(deserializing) { } … … 113 122 114 123 #region Symbol Collections 115 var eventSymbols = new ISymbol[] { onScannedRobot, onBulletHit, onBulletMissed, onHitByBullet, onHitRobot, onHitWall };116 124 var controlSymbols = new ISymbol[] { ifStat, whileStat }; 117 var functionSymbols = new ISymbol[] {125 var actionSymbols = new ISymbol[] { 118 126 ahead, back, fire, turnGunLeft, turnGunRight, turnLeft, turnRadarLeft, turnRadarRight, turnRight 119 127 //setAdjustGunForRobotTurn, setAdjustRadarForGunTurn, setAdjustRadarForRobotTurn, 120 128 }; 121 var relationalOperators = new ISymbol[] { equal, lessThan, lessThanOrEqual, greaterThan, greaterThanOrEqual }; 122 var logicalOperators = new ISymbol[] { conjunction, disjunction, negation }; 123 var numericalExpressions = new ISymbol[] { number, getEnergy, getGunHeading, getHeading, getRadarHeading, getX, getY }; 124 var numericalOperators = new ISymbol[] { addition, subtraction, multiplication, division, modulus }; 129 var functionSymbols = new ISymbol[] { 130 getEnergy, getGunHeading, getHeading, getRadarHeading, getX, getY 131 }; 132 133 var events = new GroupSymbol(EventsName, new ISymbol[] { onScannedRobot, onBulletHit, onBulletMissed, onHitByBullet, onHitRobot, onHitWall }); 134 var controlStatements = new GroupSymbol(ControlStatementsName, controlSymbols.Concat(new[] { elseStat })); 135 var expressions = new GroupSymbol(ExpressionsName, new ISymbol[] { logicalExpr, numericalExpr }); 136 var robocodeFunctions = new GroupSymbol(RobocodeFunctionsName, actionSymbols.Concat(functionSymbols)); 137 var relationalOperators = new GroupSymbol(RelationalOperatorsName, new ISymbol[] { equal, lessThan, lessThanOrEqual, greaterThan, greaterThanOrEqual }); 138 var logicalOperators = new GroupSymbol(LogicalOperators, new ISymbol[] { conjunction, disjunction, negation }); 139 var numericalOperators = new GroupSymbol(NumericalOperatorsName, new ISymbol[] { addition, subtraction, multiplication, division, modulus }); 125 140 #endregion 126 141 127 142 #region Adding Symbols 128 foreach (var s in eventSymbols) 129 AddSymbol(s); 130 foreach (var s in controlSymbols) 131 AddSymbol(s); 132 foreach (var s in functionSymbols) 133 AddSymbol(s); 134 foreach (var s in relationalOperators) 135 AddSymbol(s); 136 foreach (var s in logicalOperators) 137 AddSymbol(s); 138 foreach (var s in numericalExpressions) 139 AddSymbol(s); 140 foreach (var s in numericalOperators) 141 AddSymbol(s); 142 143 AddSymbol(tank); 144 AddSymbol(run); 145 AddSymbol(stat); 143 146 AddSymbol(block); 144 AddSymbol(stat);145 AddSymbol(elseStat);146 147 AddSymbol(shotPower); 148 AddSymbol(number); 147 149 AddSymbol(logicalVal); 148 AddSymbol(logicalExpr); 149 AddSymbol(numericalExpr); 150 AddSymbol(run); 151 AddSymbol(tank); 150 AddSymbol(events); 151 AddSymbol(expressions); 152 AddSymbol(controlStatements); 153 AddSymbol(robocodeFunctions); 154 AddSymbol(relationalOperators); 155 AddSymbol(logicalOperators); 156 AddSymbol(numericalOperators); 152 157 AddSymbol(emptyEvent); 153 158 AddSymbol(doNothing); … … 171 176 172 177 // Event 173 foreach (var s in event Symbols)178 foreach (var s in events.Symbols) 174 179 AddAllowedChildSymbol(s, stat); 175 180 … … 182 187 foreach (var s in controlSymbols) 183 188 AddAllowedChildSymbol(stat, s); 184 foreach (var s in functionSymbols)189 foreach (var s in robocodeFunctions.Symbols) 185 190 AddAllowedChildSymbol(stat, s); 186 191 AddAllowedChildSymbol(stat, emptyEvent); … … 208 213 209 214 // Numerical Expressions 210 foreach (var s in numericalExpressions)215 foreach (var s in functionSymbols.Concat(new[] { number })) 211 216 AddAllowedChildSymbol(numericalExpr, s); 212 foreach (var s in numericalOperators ) {217 foreach (var s in numericalOperators.Symbols) { 213 218 AddAllowedChildSymbol(numericalExpr, s); 214 foreach (var ne in numericalExpressions)219 foreach (var ne in functionSymbols.Concat(new[] { number })) 215 220 AddAllowedChildSymbol(s, ne); 216 foreach (var no in numericalOperators ) {221 foreach (var no in numericalOperators.Symbols) { 217 222 AddAllowedChildSymbol(s, no); 218 223 } … … 221 226 // Logical Expressions 222 227 AddAllowedChildSymbol(logicalExpr, logicalVal); 223 foreach (var s in logicalOperators ) {228 foreach (var s in logicalOperators.Symbols) { 224 229 AddAllowedChildSymbol(logicalExpr, s); 225 230 AddAllowedChildSymbol(s, logicalVal); 226 foreach (var lo in logicalOperators )231 foreach (var lo in logicalOperators.Symbols) 227 232 AddAllowedChildSymbol(s, lo); 228 foreach (var ro in relationalOperators )233 foreach (var ro in relationalOperators.Symbols) 229 234 AddAllowedChildSymbol(s, ro); 230 235 } 231 foreach (var s in relationalOperators )236 foreach (var s in relationalOperators.Symbols) 232 237 AddAllowedChildSymbol(s, numericalExpr); 233 238 234 239 // Functions 235 foreach (var f in functionSymbols) { 236 if (f is Fire) 237 AddAllowedChildSymbol(f, shotPower); 238 else 239 AddAllowedChildSymbol(f, numericalExpr); 240 foreach (var f in robocodeFunctions.Symbols) { 241 if (f is Fire) AddAllowedChildSymbol(f, shotPower); 242 else AddAllowedChildSymbol(f, numericalExpr); 240 243 } 241 244 #endregion
Note: See TracChangeset
for help on using the changeset viewer.