void SaveDgvSpToDB() { //DB.SeasonPlannerDecisions.ClearDB(); int nRows = dgvSp.Rows.Count; for (int line = 17 - nRows; line < 17; line++) { SeasonPlannerDecision spDecisions = ReadSpDecisionFromDgv(line); DB.SeasonPlannerTab.UpdateSpDecision(spDecisions); } }
static internal SeasonPlannerDecision GenerateRandomDecisionValues(Random r) { SeasonPlannerDecision spDecision = new SeasonPlannerDecision(); spDecision.Training = (DriverTrainning)(r.Next(7)); spDecision.Testing = Convert.ToBoolean(r.Next(2)); spDecision.TargetCarLevelEngBra = r.Next(7) + 2; spDecision.TargetCarLevelOthers = r.Next(7) + 2; spDecision.CT = r.Next(100); return(spDecision); }
SeasonPlannerDecision[] ReadSpDecisionsFromDgv() { int dgvSize = dgvSp.Rows.Count; SeasonPlannerDecision[] spDecisions = new SeasonPlannerDecision[dgvSize]; for (int line = 0; line < dgvSize; line++) { spDecisions[line] = ReadSpDecisionFromDgv(line); } return(spDecisions); }
void dgvSp_CellValueChanged(object sender, DataGridViewCellEventArgs e) { if (finishedLoading && !isProcessing) { isProcessing = true; int nRaces = dgvSp.Rows.Count; SeasonPlannerDecision[] spDecisions = new SeasonPlannerDecision[nRaces]; for (int line = 0; line < nRaces; line++) { spDecisions[line] = ReadSpDecisionFromDgv(line); } ProcessDecisionsIntoDgv(spDecisions, 17 - nRaces, GetInitialSpFull()); isProcessing = false; } }
SeasonPlannerDecision ReadSpDecisionFromDgv(int line) { int nRows = dgvSp.Rows.Count; SeasonPlannerDecision spDecisions = new SeasonPlannerDecision(); if (line < nRows) { string trainning = dgvSp.Rows[line].Cells["Train"].Value.ToString();//Should be #4. It appears on 33 string testing = dgvSp.Rows[line].Cells["Test"].Value.ToString(); string targetCarLevelEngBra = dgvSp.Rows[line].Cells["TargetCarLvl EngBra"].Value.ToString(); string targetCarLevelOthers = dgvSp.Rows[line].Cells["TargetCarLvl Others"].Value.ToString(); string ct = dgvSp.Rows[line].Cells["CT"].Value.ToString(); spDecisions.Training = (Classes.DriverTrainning)Enum.Parse(typeof(Classes.DriverTrainning), trainning); spDecisions.Testing = bool.Parse(testing); spDecisions.TargetCarLevelEngBra = int.Parse(targetCarLevelEngBra); spDecisions.TargetCarLevelOthers = int.Parse(targetCarLevelOthers); spDecisions.CT = int.Parse(ct); spDecisions.SeasonRace = int.Parse(dgvSp.Rows[line].Cells[0].Value.ToString()); } return(spDecisions); }
SeasonPlannerResult GetBestDecisionThread3(int initialRaceId, SeasonPlannerFullLine spFull, Random random) { SeasonPlannerDecision[] spDecisions = new SeasonPlannerDecision[17]; SeasonPlannerDecision[] bestSpDecisions = new SeasonPlannerDecision[17]; //Generate and test spDecision for (int j = initialRaceId; j < 17; j++) { spDecisions[j - initialRaceId] = SpHelper.GenerateRandomDecisionValues(random); spFull.spDecisions = spDecisions[j - initialRaceId]; spFull.spTable.SeasonRaceNumber = j; spFull = SpHelper.ProcessSeasonPlanner(spFull); } SeasonPlannerResult spDecBal = new SeasonPlannerResult(); spDecBal.spDecisions = (SeasonPlannerDecision[])spDecisions.Clone(); spDecBal.random = random; spDecBal.finalPoints = spFull.spTab.CurrentPoints; spDecBal.finalBalanceM = spFull.spTable.BalanceAfterRaceM; return(spDecBal); }
static internal SeasonPlannerFullLine ProcessSeasonPlanner(SeasonPlannerFullLine spFull) { #region Initial Values Classes.RaceTab rt = spFull.spOptimizer.raceTab; Classes.SeasonPlannerForDataTable spForDataTable = spFull.spTable; //null. Filled later Classes.TechnicalDirector td = spFull.spOptimizer.technicalDirector; Classes.Car car = (Classes.Car)spFull.spOptimizer.car.Clone(); Classes.Car carAfterRace = (Classes.Car)car.Clone(); Classes.Driver driver = spFull.spOptimizer.driver; int trackId = DB.SeasonTrack.GetTrackId(spFull.spTable.SeasonRaceNumber); Classes.Track track = DB.Track.ReadTrackFromDB(trackId); Classes.StaffFacilities sf = spFull.spOptimizer.staffFacilities; Classes.TyresSupplier tyre = DB.Tyres.ReadActiveTyreSupplierFromDB(); int seasonRaceNumber = rt.SeasonTrackIndex; //float balanceM = spFull.spTab.StartingBalanceM; float balanceM = spFull.spTable.BalanceAfterRaceM; int[] carPartsBought = new int[11]; Divisions division = (Divisions)spFull.spTab.Division; int trainning = (int)spFull.spDecisions.Training; bool testing = spFull.spDecisions.Testing; int targetCarLevel = spFull.spDecisions.TargetCarLevelEngBra; int targetCarLevel2 = spFull.spDecisions.TargetCarLevelOthers; int ct = spFull.spDecisions.CT; #endregion #region Process carAfterRace.UpdateCarWearAfterRace(track, driver, ct); if (testing) { carAfterRace.DoTesting(td, track, sf); } carPartsBought = GetWhichCarPartsChange(car, carAfterRace, targetCarLevel, targetCarLevel2); carAfterRace = (Classes.Car)car.Clone(); carAfterRace = GetCarAfterPartsChangeAndWear(car, testing, track, driver, td, sf, ct, carPartsBought); int qualPosition = SpHelper.GetQualPosition(driver, car, division); int racePosition = SpHelper.GetRacePosition(driver, car, division, ct); int racePoints = SpHelper.GetPoints(racePosition); //Expenses processing float balanceAfterRaceM = ((balanceM * 1000000) + GetAfterRaceBalance(driver, td, sf, testing, tyre, car, division, qualPosition, racePosition, trainning, carPartsBought)) / 1000000f; #endregion #region Output SeasonPlannerDecision spDecisionsNext = new SeasonPlannerDecision(); spDecisionsNext = (Classes.SeasonPlannerDecision)spFull.spDecisions.Clone(); SeasonPlannerForDataTable spTableNext = new SeasonPlannerForDataTable(); spTableNext.SeasonRaceNumber = spFull.spTable.SeasonRaceNumber + 1; spTableNext.BalanceAfterRaceM = balanceAfterRaceM; spTableNext.CarPartsChanged = carPartsBought; spTableNext.CarWearAfterRace = carAfterRace.GetWears(); spTableNext.QualPosition = qualPosition; spTableNext.RacePosition = racePosition; SeasonPlannerForOptimizer spOptimizerNext = new SeasonPlannerForOptimizer(); spOptimizerNext.car = (Classes.Car)carAfterRace.Clone(); driver.DoTrainning((DriverTrainning)trainning); driver.DriverUpdateAfterRace(racePosition); spOptimizerNext.driver = driver; spOptimizerNext.Id = spFull.spOptimizer.Id + 1; spOptimizerNext.raceTab = rt; //How to update trackId? spOptimizerNext.staffFacilities = sf; //To Do: Update sf after races (convert levels to float type) spOptimizerNext.technicalDirector = td; SeasonPlannerTab spTabNext = new SeasonPlannerTab(); spTabNext.CurrentPoints = spFull.spTab.CurrentPoints + racePoints; spTabNext.Division = spFull.spTab.Division; spTabNext.StartingBalanceM = balanceAfterRaceM; spTabNext.TargetPoints = spFull.spTab.TargetPoints; SeasonPlannerFullLine spFullNext = new SeasonPlannerFullLine(spDecisionsNext, spTableNext, spOptimizerNext, spTabNext); return(spFullNext); #endregion }
static internal object[] ConvertSpTableToRow(Classes.SeasonPlannerForDataTable spTable, SeasonPlannerDecision spDecisions) { object[] row = new object[32]; row[0] = spTable.SeasonRaceNumber; int trackId = DB.SeasonTrack.GetTrackId(spTable.SeasonRaceNumber); row[1] = DB.Track.ReadTrackFromDB(trackId).Name; row[2] = spTable.QualPosition; row[3] = spTable.RacePosition; row[4] = spDecisions.Training; row[5] = spDecisions.Testing; row[6] = spDecisions.TargetCarLevelEngBra; row[7] = spDecisions.TargetCarLevelOthers; row[8] = spDecisions.CT; row[9] = Math.Round(spTable.BalanceAfterRaceM, 2); //Car Parts Change row[10] = spTable.CarPartsChanged[0]; row[11] = spTable.CarPartsChanged[1]; row[12] = spTable.CarPartsChanged[2]; row[13] = spTable.CarPartsChanged[3]; row[14] = spTable.CarPartsChanged[4]; row[15] = spTable.CarPartsChanged[5]; row[16] = spTable.CarPartsChanged[6]; row[17] = spTable.CarPartsChanged[7]; row[18] = spTable.CarPartsChanged[8]; row[19] = spTable.CarPartsChanged[9]; row[20] = spTable.CarPartsChanged[10]; //Car Parts Wear row[21] = spTable.CarWearAfterRace[0]; row[22] = spTable.CarWearAfterRace[1]; row[23] = spTable.CarWearAfterRace[2]; row[24] = spTable.CarWearAfterRace[3]; row[25] = spTable.CarWearAfterRace[4]; row[26] = spTable.CarWearAfterRace[5]; row[27] = spTable.CarWearAfterRace[6]; row[28] = spTable.CarWearAfterRace[7]; row[29] = spTable.CarWearAfterRace[8]; row[30] = spTable.CarWearAfterRace[9]; row[31] = spTable.CarWearAfterRace[10]; return(row); }