⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 china45dlg.cpp

📁 遗传算法解中国旅行商问题
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// China45Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "stdlib.h"
#include "math.h"

#include "China45.h"
#include "China45Dlg.h"
#include "GASetDlg.h"
#include "ResultDlg.h"
#include "PopNode.h"
#include "China45Recordset.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//自定义全局变量

//用于绘制连线的颜色
COLORREF COLOR[16]={0x008080F0,0x0000D080,0x00800080,0x008080E0,  
                    0x0080E000,0x00E08000,0x0000E080,0x003020D0,
					0x0080F080,0x00F08080,0x008080F0,0x00F0F080,
					0x0080F020,0x00208080,0x008020F0,0x00A02080,};

static double m_distance[MAXCHROM*MAXCHROM]={
0,268,3526,587,1533,1217,1232,997,2145,1524,1683,1170,1147,1490,2665,1385,2536,1895,1608,2275,1925,1855,2011,1934,2970,2308,2091,4085,2103,2895,2447,2648,2358,3196,2636,3121,3624,2873,3223,3506,3247,3309,3617,3582,3725,
268,0,3460,320,1355,992,991,729,1964,1291,1461,901,879,1233,2487,1116,2345,1645,1340,2045,1656,1588,1743,1669,2743,2044,1824,3904,1840,2653,2178,2384,2093,2945,2369,2858,3381,2606,2955,3245,2978,3040,3353,3316,3458,
3526,3460,0,3355,2300,2777,2887,3307,1918,2691,2520,3356,3427,2998,1658,3339,1863,2814,3324,2433,3465,3655,3344,3766,2367,3184,3725,1806,3878,2655,3479,3273,3944,2964,3992,3347,2876,4037,3784,3463,3895,3885,3660,3774,3899,
587,320,3355,0,1144,725,700,410,1737,1006,1188,585,570,919,2256,799,2099,1337,1021,1757,1341,1284,1424,1372,2455,1724,1519,3664,1545,2351,1860,2064,1794,2633,2065,2539,3077,2298,2636,2926,2661,2722,3033,2996,3138,
1533,1355,2300,1144,0,478,587,1012,611,455,388,1057,1127,755,1133,1063,1006,804,1104,887,1345,1476,1288,1597,1523,1343,1621,2552,1746,1539,1621,1625,1899,1904,2061,2000,2240,2212,2280,2337,2352,2387,2498,2521,2675,
1217,992,2777,725,478,0,130,533,1025,310,468,587,654,423,1538,635,1375,720,741,1057,1043,1117,1040,1236,1753,1221,1303,2939,1402,1684,1446,1550,1596,2004,1805,1992,2412,1995,2186,2364,2237,2286,2498,2491,2642,
1232,991,2887,700,587,130,0,442,1096,307,496,470,539,316,1600,505,1425,668,616,1057,924,990,933,1108,1755,1140,1181,2986,1276,1663,1348,1474,1474,1967,1690,1928,2391,1886,2100,2305,2147,2198,2433,2418,2568,
997,729,3307,410,1012,533,442,0,1538,726,924,181,192,550,2037,389,1857,977,611,1439,932,891,1014,987,2127,1321,1122,3410,1163,1993,1449,1660,1405,2254,1668,2137,2712,1896,2226,2525,2251,2312,2627,2588,2729,
2145,1964,1918,1737,611,1025,1096,1538,0,829,636,1533,1608,1116,522,1467,406,897,1419,604,1548,1738,1431,1848,1028,1319,1810,1941,1961,1143,1623,1496,2042,1529,2124,1747,1767,2213,2115,2020,2208,2224,2203,2262,2412,
1524,1291,2691,1006,455,310,307,726,829,0,198,704,779,311,1314,649,1131,428,655,753,892,1023,845,1143,1451,957,1167,2685,1291,1374,1210,1272,1447,1694,1621,1699,2102,1787,1920,2065,1979,2023,2205,2206,2358,
1683,1461,2520,1188,388,468,496,924,636,198,0,901,975,482,1115,831,933,415,805,596,996,1154,919,1272,1288,954,1271,2490,1407,1240,1234,1241,1537,1582,1683,1634,1964,1826,1896,1985,1966,2002,2137,2151,2305,
1170,901,3356,585,1057,587,470,181,1533,704,901,0,74,462,2014,216,1824,877,441,1363,755,709,847,807,2037,1169,941,3359,984,1882,1279,1504,1224,2124,1486,1984,2592,1715,2056,2373,2077,2140,2468,2423,2563,
1147,879,3427,570,1127,654,539,192,1608,779,975,74,0,534,2089,258,1898,944,480,1434,781,713,883,804,2105,1216,948,3432,979,1945,1312,1548,1225,2180,1494,2029,2651,1728,2086,2418,2104,2168,2509,2460,2598,
1490,1233,2998,919,755,423,316,550,1116,311,482,462,534,0,1571,351,1374,426,349,901,623,724,617,844,1580,834,890,2898,1001,1443,1032,1173,1179,1714,1382,1636,2164,1572,1789,2019,1833,1885,2138,2116,2264,
2665,2487,1658,2256,1133,1538,1600,2037,522,1314,1115,2014,2089,1571,0,1920,216,1263,1834,805,1895,2107,1754,2207,796,1543,2132,1419,2291,1037,1831,1615,2322,1393,2344,1724,1483,2379,2146,1908,2254,2252,2103,2195,2334,
1385,1116,3339,799,1063,635,505,389,1467,649,831,216,258,351,1920,0,1720,717,225,1220,542,524,630,633,1872,957,745,3228,808,1699,1063,1290,1035,1924,1287,1771,2399,1510,1839,2160,1862,1924,2253,2207,2347,
2536,2345,1863,2099,1006,1375,1425,1857,406,1131,933,1824,1898,1374,216,1720,0,1050,1626,588,1679,1892,1537,1991,689,1329,1915,1564,2074,885,1620,1414,2106,1258,2132,1556,1415,2174,1967,1769,2072,2074,1962,2044,2187,
1895,1645,2814,1337,804,720,668,977,897,428,415,877,944,426,1263,717,1050,0,582,506,651,849,538,956,1160,541,913,2515,1064,1017,818,845,1157,1300,1277,1272,1740,1412,1496,1643,1560,1600,1779,1777,1929,
1608,1340,3324,1021,1104,741,616,611,1419,655,805,441,480,349,1834,225,1626,582,0,1087,330,378,405,498,1706,738,567,3092,661,1512,838,1068,860,1717,1093,1548,2199,1306,1615,1937,1640,1701,2028,1982,2122,
2275,2045,2433,1757,887,1057,1057,1439,604,753,596,1363,1434,901,805,1220,588,506,1087,0,1099,1317,952,1411,698,750,1328,2009,1488,654,1048,893,1519,1017,1560,1163,1369,1625,1512,1469,1605,1622,1641,1684,1837,
1925,1656,3465,1341,1345,1043,924,932,1548,892,996,755,781,623,1895,542,1679,651,330,1099,0,226,166,312,1621,529,276,3049,414,1382,537,817,557,1522,767,1291,2018,976,1306,1676,1323,1387,1748,1688,1823,
1855,1588,3655,1284,1476,1117,990,891,1738,1023,1154,709,713,724,2107,524,1892,849,378,1317,226,0,391,120,1848,746,236,3275,286,1605,697,1009,514,1730,781,1470,2229,1018,1432,1848,1432,1501,1904,1831,1957,
2011,1743,3344,1424,1288,1040,933,1014,1431,845,919,847,883,617,1754,630,1537,538,405,952,166,391,0,466,1456,368,381,2885,538,1216,436,675,621,1363,776,1154,1858,955,1212,1542,1241,1300,1626,1577,1716,
1934,1669,3766,1372,1597,1236,1108,987,1848,1143,1272,807,804,844,2207,633,1991,956,498,1411,312,120,466,0,1916,797,188,3349,176,1662,701,1031,423,1762,705,1476,2262,949,1401,1847,1392,1464,1890,1808,1929,
2970,2743,2367,2455,1523,1753,1755,2127,1028,1451,1288,2037,2105,1580,796,1872,689,1160,1706,698,1621,1848,1456,1916,0,1127,1783,1438,1941,312,1342,1036,1885,604,1817,986,738,1783,1429,1117,1543,1526,1314,1415,1548,
2308,2044,3184,1724,1343,1221,1140,1321,1319,957,954,1169,1216,834,1543,957,1329,541,738,750,529,746,368,797,1127,0,656,2565,814,864,303,340,786,995,810,815,1490,898,965,1204,1022,1066,1309,1281,1429,
2091,1824,3725,1519,1621,1303,1181,1122,1810,1167,1271,941,948,890,2132,745,1915,913,567,1328,276,236,381,188,1783,656,0,3222,160,1517,521,858,293,1593,546,1293,2093,782,1214,1661,1207,1278,1702,1620,1741,
4085,3904,1806,3664,2552,2939,2986,3410,1941,2685,2490,3359,3432,2898,1419,3228,1564,2515,3092,2009,3049,3275,2885,3349,1438,2565,3222,0,3379,1724,2774,2452,3319,1816,3226,2259,1466,3155,2686,2179,2801,2759,2347,2496,2573,
2103,1840,3878,1545,1746,1402,1276,1163,1961,1291,1407,984,979,1001,2291,808,2074,1064,661,1488,414,286,538,176,1941,814,160,3379,0,1670,653,995,258,1731,549,1411,2230,798,1288,1767,1267,1341,1794,1702,1814,
2895,2653,2655,2351,1539,1684,1663,1993,1143,1374,1240,1882,1945,1443,1037,1699,885,1017,1512,654,1382,1605,1216,1662,312,864,1517,1724,1670,0,1050,731,1595,385,1511,692,728,1471,1129,887,1241,1229,1078,1160,1302,
2447,2178,3479,1860,1621,1446,1348,1449,1623,1210,1234,1279,1312,1032,1831,1063,1620,818,838,1048,537,697,436,701,1342,303,521,2774,653,1050,0,343,544,1078,512,775,1577,598,776,1151,806,864,1213,1151,1286,
2648,2384,3273,2064,1625,1550,1474,1660,1496,1272,1241,1504,1548,1173,1615,1290,1414,845,1068,893,817,1009,675,1031,1036,340,858,2452,995,731,343,0,878,736,780,480,1236,768,655,869,730,762,968,943,1093,
2358,2093,3944,1794,1899,1596,1474,1405,2042,1447,1537,1224,1225,1179,2322,1035,2106,1157,860,1519,557,514,621,423,1885,786,293,3319,258,1595,544,878,0,1601,292,1240,2092,542,1062,1574,1030,1106,1583,1479,1584,
3196,2945,2964,2633,1904,2004,1967,2254,1529,1694,1582,2124,2180,1714,1393,1924,1258,1300,1717,1017,1522,1730,1363,1762,604,995,1593,1816,1731,385,1078,736,1601,0,1450,443,500,1347,881,515,997,966,711,812,944,
2636,2369,3992,2065,2061,1805,1690,1668,2124,1621,1683,1486,1494,1382,2344,1287,2132,1277,1093,1560,767,781,776,705,1817,810,546,3226,549,1511,512,780,292,1450,0,1048,1923,250,802,1347,756,833,1333,1218,1312,
3121,2858,3347,2539,2000,1992,1928,2137,1747,1699,1634,1984,2029,1636,1724,1771,1556,1272,1548,1163,1291,1470,1154,1476,986,815,1293,2259,1411,692,775,480,1240,443,1048,0,878,917,445,388,561,540,506,522,676,
3624,3381,2876,3077,2240,2412,2391,2712,1767,2102,1964,2592,2651,2164,1483,2399,1415,1740,2199,1369,2018,2229,1858,2262,738,1490,2093,1466,2230,728,1577,1236,2092,500,1923,878,0,1793,1257,715,1367,1316,880,1029,1109,
2873,2606,4037,2298,2212,1995,1886,1896,2213,1787,1826,1715,1728,1572,2379,1510,2174,1412,1306,1625,976,1018,955,949,1783,898,782,3155,798,1471,598,768,542,1347,250,917,1793,0,595,1167,530,607,1128,1001,1083,
3223,2955,3784,2636,2280,2186,2100,2226,2115,1920,1896,2056,2086,1789,2146,1839,1967,1496,1615,1512,1306,1432,1212,1401,1429,965,1214,2686,1288,1129,776,655,1062,881,802,445,1257,595,0,582,116,109,533,417,527,
3506,3245,3463,2926,2337,2364,2305,2525,2020,2065,1985,2373,2418,2019,1908,2160,1769,1643,1937,1469,1676,1848,1542,1847,1117,1204,1661,2179,1767,887,1151,869,1574,515,1347,388,715,1167,582,0,680,619,197,322,435,
3247,2978,3895,2661,2352,2237,2147,2251,2208,1979,1966,2077,2104,1833,2254,1862,2072,1560,1640,1605,1323,1432,1241,1392,1543,1022,1207,2801,1267,1241,806,730,1030,997,756,561,1367,530,116,680,0,77,606,472,556,
3309,3040,3885,2722,2387,2286,2198,2312,2224,2023,2002,2140,2168,1885,2252,1924,2074,1600,1701,1622,1387,1501,1300,1464,1526,1066,1278,2759,1341,1229,864,762,1106,966,833,540,1316,607,109,619,77,0,534,397,479,
3617,3353,3660,3033,2498,2498,2433,2627,2203,2205,2137,2468,2509,2138,2103,2253,1962,1779,2028,1641,1748,1904,1626,1890,1314,1309,1702,2347,1794,1078,1213,968,1583,711,1333,506,880,1128,533,197,606,534,0,156,239,
3582,3316,3774,2996,2521,2491,2418,2588,2262,2206,2151,2423,2460,2116,2195,2207,2044,1777,1982,1684,1688,1831,1577,1808,1415,1281,1620,2496,1702,1160,1151,943,1479,812,1218,522,1029,1001,417,322,472,397,156,0,154,
3725,3458,3899,3138,2675,2642,2568,2729,2412,2358,2305,2563,2598,2264,2334,2347,2187,1929,2122,1837,1823,1957,1716,1929,1548,1429,1741,2573,1814,1302,1286,1093,1584,944,1312,676,1109,1083,527,435,556,479,239,154,0};

static double position[MAXCHROM*2]={
24,1,23.8,2,5,1.5,22.8,4,21.5,1,18.8,5.2,19.5,6,22,5.8,13.3,5.8,17.8,6.8,16.8,6.8,22,7,22.2,7.1,
20,7.4,10.2,7.4,22,7.5,11.2,8,17,8.8,21,9,15,9,20.6,10,21.5,9.8,19.8,10.2,21.8,11,12,11,17.2,11.2,
21.5,11.4,7,11.2,22,11.6,13.2,11.5,18.8,12,16.8,13,22,13,13.2,13.2,21.2,14.4,15,14.6,11.5,15,
20,15.5,17,15.8,14.8,16,17.2,16.4,17.4,16,14.4,16.6,15.8,17,15.8,17.5};

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChina45Dlg dialog

CChina45Dlg::CChina45Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CChina45Dlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CChina45Dlg)
	m_GALen = 45;
	m_nGroupSize = 100;
	m_GACrossProb = 0.6;
	m_GAVariProb = 0.03;
	m_GANum = 100;
	m_CurGANum = 0;
	m_MiniCost = 0.0;
	m_CrossNum = 0;
	m_VariNum = 0;
	m_GAFitness = 0.0;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	
	m_bIsGA=false;

	for(int i=0;i<MAXCHROM;i++)
	{
		m_point[i].x=(int)(position[i*2]*9.25);
		m_point[i].y=(int)(250-position[i*2+1]*9.25);
	}
	
	//AfxMessageBox("成功");

	//m_recordset=new CChina45Recordset;

	//m_recordset.Move(1);

	  //以下代码专用于断点检查
  //char xn[20]; wsprintf(xn,"%d",(int)m_recordset.m_C12);
  //AfxMessageBox(xn);


	//m_distance=new double[MAXCHROM*MAXCHROM];

	// 计算城市之间距离
    //for(i=0;i<MAXCHROM;i++) for(int j=0;j<MAXCHROM;j++)   
	//{
		//int x1=m_point[i].x;
		//int y1=m_point[i].y;
		//int x2=m_point[j].x;
		//int y2=m_point[j].y;
		//m_distance[i*MAXCHROM+j]=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    //}

}

void CChina45Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CChina45Dlg)
	DDX_Text(pDX, IDC_EDIT1, m_GALen);
	DDX_Text(pDX, IDC_EDIT2, m_nGroupSize);
	DDX_Text(pDX, IDC_EDIT3, m_GACrossProb);
	DDX_Text(pDX, IDC_EDIT4, m_GAVariProb);
	DDX_Text(pDX, IDC_EDIT5, m_GANum);
	DDX_Text(pDX, IDC_EDIT6, m_CurGANum);
	DDX_Text(pDX, IDC_EDIT7, m_MiniCost);
	DDX_Text(pDX, IDC_EDIT8, m_CrossNum);
	DDX_Text(pDX, IDC_EDIT9, m_VariNum);
	DDX_Text(pDX, IDC_EDIT10, m_GAFitness);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CChina45Dlg, CDialog)
	//{{AFX_MSG_MAP(CChina45Dlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_COMMAND(ID_MENU_GASET, OnMenuGaset)
	ON_COMMAND(ID_MENU_SOFT, OnMenuSoft)
	ON_COMMAND(ID_MENU_EXIT, OnMenuExit)
	ON_BN_CLICKED(IDC_BUTTON_GA, OnButtonGa)
	ON_COMMAND(ID_MENU_RESULT, OnMenuResult)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChina45Dlg message handlers

BOOL CChina45Dlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CChina45Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CChina45Dlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		if(!m_bIsGA)
		{
	       CPen Pen;
	       CDC* pDC=GetDC();
		   CRect RectClient,Workarea;

           GetClientRect(RectClient);
           Workarea.left=RectClient.left+140;
           Workarea.bottom=RectClient.bottom-30;
		   Workarea.right=Workarea.left+290;
           Workarea.top=Workarea.bottom-270;
           pDC->Rectangle(Workarea);
           pDC->SetBkColor(0x00FFFFFF);

		   int px=Workarea.left;
			int py=Workarea.bottom+20;
			
		   pDC->SetTextColor(0x00F08080);
		   for(int i=0;i<MAXCHROM;i++)
		   {
			   CRect city;
			   city.left=px+m_point[i].x-2;
			   city.right=px+m_point[i].x+2;
			   city.top=py-m_point[i].y-2;
			   city.bottom=py-m_point[i].y+2;
			   pDC->Ellipse(city);
		   }
		
		}

		else DrawNetwork();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -