private List <AbstractRobot> GenerateOffsprings(List <AbstractRobot> oldPopulation) { List <AbstractRobot> newPopulation = new List <AbstractRobot>(); AbstractRobot prototype = oldPopulation[0]; for (int ii = 0; ii < oldPopulation.Count; ii++) { if (newPopulation.Count >= MAX_CHILD_COUNT) { break; } for (int jj = 1; jj < oldPopulation.Count; jj++) { if (newPopulation.Count >= MAX_CHILD_COUNT) { break; } AbstractRobot child = prototype.Clone(); child.Genotype = MakeCrossover(oldPopulation[ii], oldPopulation[jj]); Mutation.Mutate(child); newPopulation.Add(child); } } return(newPopulation); }
private AbstractRobot RobotModelPodleDodoavatele(long SupplierId) { AbstractRobot vysledek = null; switch (SupplierId) { case 1: vysledek = new LynxModel(); break; default: throw new ArgumentException(nameof(SupplierId)); } return(vysledek); }
private Genome MakeCrossover(AbstractRobot robot1, AbstractRobot robot2) { float[] genome1 = robot1.Genotype.GetWeights(); float[] genome2 = robot2.Genotype.GetWeights(); float[] newGenome = new float[genome1.Length]; for (int ii = 0; ii < genome1.Length; ii++) { newGenome[ii] = ((Random.NextDouble() > 0.5) ? genome1[ii] : genome2[ii]); } Genome result = new Genome(newGenome); return(result); }
public RobotKolekce FlotilaDatabaze(bool IsActive = true) { List <AbstractRobot> vyslednaFlotila = new List <AbstractRobot>(); using (AlitaDatabase db = VytvorInstanci()) { SetOnline(db); var obsah = db.Agv.Include(x => x.Device).Include(x => x.Platform).Where(x => x.Device.IsActive == IsActive); List <Agv> agvs = obsah.ToList(); agvs.ForEach(delegate(Agv agv) { Device zarizeni = agv.Device; long supplierId = zarizeni.Supplier_FK ?? 0; AbstractRobot robot = RobotModelPodleDodoavatele(supplierId); AbstractZarizeni.DeviceToZarizeni(robot, zarizeni); robot.Platform = AbstractRobot.GetPlatformType(agv.Platform); robot.Hostname = agv.NameOnServer; vyslednaFlotila.Add(robot); }); SetOffline(db); } return(new RobotKolekce(vyslednaFlotila)); }
public override void Mutate(AbstractRobot robot) { Genome genes = robot.Genotype; PerformBitFlip(genes); }
public abstract void Mutate(AbstractRobot robot);