Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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;
            }
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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
        }
Exemplo n.º 8
0
        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);
        }