コード例 #1
0
ファイル: DebugTool.cs プロジェクト: piggrief/Quoridor_Csharp
        private void TestAllSABTN_Click(object sender, EventArgs e)
        {
            ShowPoint.Clear();

            NowQueenSolve = Form1.ThisQueenSolve;
            NowQueenSolve.ChessLocationList = Form1.QueenChessLocation;

            NowQueenSolve.QueenLocationList = new List <Point>();
            for (int i = 0; i < 8; i++)
            {
                NowQueenSolve.QueenLocationList.Add(new Point(i, NowQueenSolve.EightQueenResult[0, i] - 1));
            }

            double InitTemp = 0, alpha = 0, SALenght = 0;

            try
            {
                InitTemp = Convert.ToDouble(InitTempTB.Text);
                alpha    = Convert.ToDouble(AlphaTB.Text);
                SALenght = Convert.ToDouble(SALenghtTB.Text);
            }
            catch (Exception)
            {
                throw;
            }

            Chart1.Series[0].ChartType                        = SeriesChartType.Point;
            Chart1.Series[0].IsValueShownAsLabel              = true;
            Chart1.Series[0].MarkerSize                       = 6;
            Chart1.Series[0].ToolTip                          = "第#VALX组八皇后的解\r\n寻优后的最短路径为:#VAL";
            Chart1.ChartAreas[0].AxisY.Maximum                = 55;
            Chart1.ChartAreas[0].AxisY.Minimum                = 30;
            Chart1.ChartAreas[0].AxisY.MajorGrid.Enabled      = true;
            Chart1.ChartAreas[0].AxisY.MinorGrid.Enabled      = false;
            Chart1.ChartAreas[0].AxisY.MajorGrid.Interval     = 100;
            Chart1.ChartAreas[0].AxisX.MajorGrid.Enabled      = true;
            Chart1.ChartAreas[0].AxisX.MajorGrid.Interval     = 1;
            Chart1.ChartAreas[0].AxisX.MinorGrid.Enabled      = false;
            Chart1.ChartAreas[0].AxisX.MajorTickMark.Interval = 5;
            Chart1.ChartAreas[0].AxisX.MinorTickMark.Interval = 1;


            //NowQueenSolve.InitSA(InitTemp, alpha, SALenght, 0, SimulateAnneal.Annealing.SAMode.SA);
            NowQueenSolve.InitSA(1000, 0.9, 90, 0.1, SimulateAnneal.Annealing.SAMode.FastSA);
            //NowQueenSolve.InitSA(1000, 0.9, 90, 0, SimulateAnneal.Annealing.SAMode.SA);

            List <Point> BestResult_QueenLocation = new List <Point>();
            List <int>   MoveSequence             = new List <int>();
            double       disall                   = 0;

            MoveSequence = NowQueenSolve.SearchResult_ForOverall(ref disall, ref BestResult_QueenLocation, ShowPoint);

            #region 92组解评估
            List <double> ResultEve = new List <double>();
            ResultEve = NowQueenSolve.QueenResultEvaluation();

            ShowPoint2.Clear();
            for (int i = 0; i < 92; i++)
            {
                ShowPoint2.Add(new DataPoint(i, ResultEve[i]));
            }
            #endregion

            InfoPrintTB.Text  = "模拟退火参数:" + System.Environment.NewLine;
            InfoPrintTB.Text += "T0 = " + InitTemp.ToString() + System.Environment.NewLine;
            InfoPrintTB.Text += "a = " + alpha.ToString() + System.Environment.NewLine;
            InfoPrintTB.Text += "L = " + SALenght.ToString() + System.Environment.NewLine;
            InfoPrintTB.Text += "本次最优距离为:" + System.Environment.NewLine;
            InfoPrintTB.Text += disall.ToString() + System.Environment.NewLine;
        }
コード例 #2
0
ファイル: DebugTool.cs プロジェクト: piggrief/Quoridor_Csharp
        DataPointCollection ShowPoint2; ///用来显示的点集2

        private void SATest1BTN_Click(object sender, EventArgs e)
        {
            NowQueenSolve = Form1.ThisQueenSolve;
            NowQueenSolve.ChessLocationList = Form1.QueenChessLocation;

            NowQueenSolve.QueenLocationList = new List <Point>();
            for (int i = 0; i < 8; i++)
            {
                NowQueenSolve.QueenLocationList.Add(new Point(i, NowQueenSolve.EightQueenResult[0, i] - 1));
            }

            SimulateAnneal.Annealing.SAMode UsedSAMode = SimulateAnneal.Annealing.SAMode.SA;
            double InitTemp = 0, alpha = 0, SALenght = 0, FSAh = 0;
            int    TestNum = 0;

            try
            {
                InitTemp = Convert.ToDouble(InitTempTB.Text);
                alpha    = Convert.ToDouble(AlphaTB.Text);
                SALenght = Convert.ToDouble(SALenghtTB.Text);
                FSAh     = Convert.ToDouble(FSAhTB.Text);
                TestNum  = Convert.ToInt32(TestNumSetTB.Text);

                if (SAModeSetTB.SelectedIndex == 0)//SA
                {
                    UsedSAMode = SimulateAnneal.Annealing.SAMode.SA;
                }
                else
                {
                    UsedSAMode = SimulateAnneal.Annealing.SAMode.FastSA;
                }
            }
            catch (Exception)
            {
                throw;
            }

            Chart1.Series[0].ChartType           = SeriesChartType.Line;
            Chart1.Series[0].MarkerSize          = 0;
            Chart1.Series[0].IsValueShownAsLabel = false;
            Chart1.Series[0].ToolTip             = "第#VALX次模拟退火中\r\n局部最短路径为:#VAL";
            //Chart1.ChartAreas[0].AxisY.Maximum = 1;
            //Chart1.ChartAreas[0].AxisY.Minimum = 30;
            Chart1.ChartAreas[0].AxisY.MajorGrid.Enabled      = false;
            Chart1.ChartAreas[0].AxisY.MinorGrid.Enabled      = false;
            Chart1.ChartAreas[0].AxisX.MajorGrid.Enabled      = false;
            Chart1.ChartAreas[0].AxisX.MinorGrid.Enabled      = false;
            Chart1.ChartAreas[0].AxisX.MajorTickMark.Interval = 5;
            Chart1.ChartAreas[0].AxisX.MinorTickMark.Interval = 1;

            Chart1.Series[1].ChartType           = SeriesChartType.Line;
            Chart1.Series[1].MarkerSize          = 0;
            Chart1.Series[1].IsValueShownAsLabel = false;
            Chart1.Series[1].ToolTip             = "第#VALX次模拟退火中\r\n局部最短路径为:#VAL";

            string TestStr = NowQueenSolve.Test_SAParameter(
                InitTemp, alpha, SALenght, FSAh, UsedSAMode, TestNum);

            ShowPoint.Clear();

            List <double> DisList = NowQueenSolve.TestDisList.ToList();
            List <double> UsedTimeList = NowQueenSolve.TestUsedTime.ToList();

            for (int i = 0; i < NowQueenSolve.TestDisList.Count; i++)
            {
                ShowPoint.Add(new DataPoint(i, DisList[i]));
            }
            ShowPoint2.Clear();
            for (int i = 0; i < NowQueenSolve.TestUsedTime.Count; i++)
            {
                //ShowPoint2.Add(new DataPoint(i, UsedTimeList[i]));
            }

            InfoPrintTB.Text = TestStr;
        }