Changeset 14487 for branches/MemPRAlgorithm/HeuristicLab.Algorithms.MemPR/3.3/LinearLinkage/LinearLinkageMemPR.cs
- Timestamp:
- 12/14/16 10:16:50 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/MemPRAlgorithm/HeuristicLab.Algorithms.MemPR/3.3/LinearLinkage/LinearLinkageMemPR.cs
r14484 r14487 250 250 var p1 = p1Scope.Solution; 251 251 var p2 = p2Scope.Solution; 252 var transfered = new bool[p1.Length]; 253 var subspace = new bool[p1.Length]; 254 var lleeChild = new int[p1.Length]; 255 var lleep1 = p1.ToLLEe(); 256 var lleep2 = p2.ToLLEe(); 257 for (var i = p1.Length - 1; i >= 0; i--) { 258 // Step 1 259 subspace[i] = p1[i] != p2[i]; 260 var p1IsEnd = p1[i] == i; 261 var p2IsEnd = p2[i] == i; 262 if (p1IsEnd & p2IsEnd) { 263 transfered[i] = true; 264 } else if (p1IsEnd | p2IsEnd) { 265 transfered[i] = Context.Random.NextDouble() < 0.5; 266 } 267 lleeChild[i] = i; 268 269 // Step 2 270 if (transfered[i]) continue; 271 var end1 = lleep1[i]; 272 var end2 = lleep2[i]; 273 var containsEnd1 = transfered[end1]; 274 var containsEnd2 = transfered[end2]; 275 if (containsEnd1 & containsEnd2) { 276 if (Context.Random.NextDouble() < 0.5) { 277 lleeChild[i] = end1; 278 } else { 279 lleeChild[i] = end2; 280 } 281 } else if (containsEnd1) { 282 lleeChild[i] = end1; 283 } else if (containsEnd2) { 284 lleeChild[i] = end2; 285 } else { 286 if (Context.Random.NextDouble() < 0.5) { 287 lleeChild[i] = lleeChild[p1[i]]; 288 } else { 289 lleeChild[i] = lleeChild[p2[i]]; 290 } 291 } 292 } 293 var child = new Encodings.LinearLinkageEncoding.LinearLinkage(lleeChild.Length); 294 child.FromLLEe(lleeChild); 295 296 return ToScope(child); 252 return ToScope(GroupCrossover.Apply(Context.Random, p1, p2)); 297 253 } 298 254
Note: See TracChangeset
for help on using the changeset viewer.