📄 traveling salesman problem.cs
字号:
//}
private void txtB_TextChanged(object sender, System.EventArgs e) {
try { network.B = double.Parse(txtB.Text); } catch (Exception ex) {}
}
private void txtD_TextChanged(object sender, System.EventArgs e) {
try { network.D = double.Parse(txtD.Text); } catch (Exception ex) {}
}
private void btnAnalyzeFull_Click(object sender, System.EventArgs e) {
if (thread == null) { // fire up thread
thread = new Thread(new ThreadStart(AnalyzeFullThread));
thread.Start();
btnAnalyzeFull.Text = "Abort";
btnAnalyzeFull.Refresh();
}
else { // abort thread
thread.Abort();
thread = null;
txtStatus.Text = "Aborted. Total distance = " + network.TotalDistance();
txtStatus.Refresh();
btnAnalyzeFull.Text = "Analyze (Full)";
btnAnalyzeFull.Refresh();
SetNetworkLists();
}
}
private void btnResetSolution_Click(object sender, System.EventArgs e) {
network.Reset();
SetNetworkLists();
}
private void btnHFlip_Click(object sender, System.EventArgs e) {
foreach (City c in network.cities)
c.x = picMap.Width - c.x;
picMap.Refresh();
SetNetworkLists();
}
private void btnVFlip_Click(object sender, System.EventArgs e) {
foreach (City c in network.cities)
c.y = picMap.Height - c.y;
picMap.Refresh();
SetNetworkLists();
}
private void btnCWRotate_Click(object sender, System.EventArgs e) {
foreach (City c in network.cities) {
double newX = picMap.Width * ((float) (picMap.Height - c.y) / (float) picMap.Height);
double newY = picMap.Height * ((float) c.x / (float) picMap.Width);
c.y = newY;
c.x = newX;
}
picMap.Refresh();
SetDistanceList();
SetNetworkLists();
}
private void btnCCWRotate_Click(object sender, System.EventArgs e) {
foreach (City c in network.cities) {
double newX = picMap.Width * ((float) c.y / (float) picMap.Height);
double newY = picMap.Height * ((float) (picMap.Width - c.x) / (float) picMap.Width);
c.y = newY;
c.x = newX;
}
picMap.Refresh();
SetDistanceList();
SetNetworkLists();
}
#endregion
#region XML read/write functions and event handlers
private void btnSaveNetwork_Click(object sender, System.EventArgs e) {
SaveFileDialog s = new SaveFileDialog();
s.Filter = "Network Files (*.net)|*.net";
s.OverwritePrompt = true;
if (s.ShowDialog() == DialogResult.OK) {
XmlTextWriter save = new XmlTextWriter(s.FileName, System.Text.Encoding.UTF8);
save.Formatting = Formatting.Indented;
save.IndentChar = ' ';
save.WriteStartDocument();
save.WriteStartElement("HopfieldTankNetwork");
save.Indentation++;
// write parameters
save.WriteStartElement("Parameters");
save.Indentation++;
save.WriteElementString("NetworkName", network.name);
//save.WriteElementString("A", network.A.ToString());
save.WriteElementString("B", network.B.ToString());
save.WriteElementString("C", network.C.ToString());
save.WriteElementString("D", network.D.ToString());
save.WriteElementString("du0", network.u0variation.ToString());
save.WriteElementString("dt", network.dTimeInterval.ToString());
save.Indentation--;
save.WriteEndElement();
// write neuron data
save.WriteStartElement("Cities");
save.Indentation++;
foreach (object cityobject in network.cities) {
City city = (City) cityobject;
save.WriteStartElement("City");
save.Indentation++;
save.WriteElementString("Name", city.name);
save.WriteElementString("X", city.x.ToString());
save.WriteElementString("Y", city.y.ToString());
save.Indentation--;
save.WriteEndElement();
}
save.Indentation--;
save.WriteEndElement();
// close XML file
save.Indentation--;
save.WriteEndElement();
save.WriteEndDocument();
save.Close();
}
}
private void btnLoadNetwork_Click(object sender, System.EventArgs e) {
City city;
network = new HopfieldTankNetwork();
network.cities = new ArrayList();
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Network files (*.net)|*.net";
if (open.ShowDialog() == DialogResult.OK) { // selected an XML file
try {
XmlTextReader xtr = new XmlTextReader(open.FileName);
XmlValidatingReader xvr = new XmlValidatingReader(xtr);
xvr.ValidationType = ValidationType.Schema;
xvr.ValidationEventHandler += new ValidationEventHandler(ValidationErrors);
XmlSchemaCollection xsc = new XmlSchemaCollection();
xsc.Add("", System.Reflection.Assembly.GetExecutingAssembly().Location.Substring(0, System.Reflection.Assembly.GetExecutingAssembly().Location.Length - 61) + @"Schema Files\Network.xsd");
xvr.Schemas.Add(xsc);
XmlDocument xd = new XmlDocument();
XmlLoadErrors = "";
xd.Load(xvr);
if (XmlLoadErrors.Length > 0)
MessageBox.Show("Errors loading network document. This does not appear to be a valid network file.", "Errors Loading Network Document", MessageBoxButtons.OK, MessageBoxIcon.Error);
else {
foreach (XmlNode x1 in xd.ChildNodes) {
if (x1.Name == "HopfieldTankNetwork") {
foreach (XmlNode x2 in x1.ChildNodes) {
if (x2.Name == "Parameters") {
foreach (XmlNode x3 in x2.ChildNodes) {
if (x3.Name == "NetworkName")
network.name = x3.InnerText;
//else if (x3.Name == "A")
// network.A = double.Parse(x3.InnerText);
else if (x3.Name == "B")
network.B = double.Parse(x3.InnerText);
else if (x3.Name == "C")
network.C = double.Parse(x3.InnerText);
else if (x3.Name == "D")
network.D = double.Parse(x3.InnerText);
else if (x3.Name == "du0")
network.u0variation = double.Parse(x3.InnerText);
else if (x3.Name == "dt")
network.dTimeInterval = double.Parse(x3.InnerText);
}
}
else if (x2.Name == "Cities") {
foreach (XmlNode x3 in x2.ChildNodes) {
if (x3.Name == "City") {
city = new City(100, 100);
foreach (XmlNode x4 in x3.ChildNodes) {
if (x4.Name == "Name")
city.name = x4.InnerText;
else if (x4.Name == "X")
city.x = Double.Parse(x4.InnerText);
else if (x4.Name == "Y")
city.y = Double.Parse(x4.InnerText);
}
network.cities.Add(city);
}
}
}
}
}
}
xtr.Close();
txtName.Text = network.name;
//txtA.Text = network.A.ToString();
txtB.Text = network.B.ToString();
txtD.Text = network.D.ToString();
txtdu0.Text = network.u0variation.ToString();
txtTimeInterval.Text = network.dTimeInterval.ToString();
network.Initialize((new Random()).Next(99999));
SetDistanceList();
SetNetworkLists();
picMap.Refresh();
}
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
}
public void ValidationErrors(object sender, ValidationEventArgs e) {
XmlLoadErrors += e.Message + "\r\n";
}
#endregion
#region Other event handlers
private void picMap_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) {
iMouseX = e.X;
iMouseY = e.Y;
if (movingCity != null) {
movingCity.x = iMouseX;
movingCity.y = iMouseY;
picMap.Refresh();
network.SetDistances();
SetDistanceList();
SetNetworkLists();
}
}
private void picMap_MouseLeave(object sender, System.EventArgs e) {
movingCity = null;
}
private void picMap_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) {
City clickedCity = null;
// check location first
foreach (object cityobject in network.cities) {
City city = (City) cityobject;
if (Math.Abs(city.x - iMouseX) + Math.Abs(city.y - iMouseY) < 15) { // close enough - delete city.
clickedCity = city;
break;
}
}
if (e.Button == MouseButtons.Left) { // deleting or placing city
if (clickedCity != null)
network.cities.Remove(clickedCity);
else { // placing new city
int x = iMouseX;
int y = iMouseY; // preserve coordinates
City city = new City(x, y);
int i = (new Random()).Next(139);
switch (i) {
case 1: city.name = "Baltimore"; break;
case 2: city.name = "Chicago"; break;
case 3: city.name = "Cincinnati"; break;
case 4: city.name = "New York City"; break;
case 5: city.name = "Kansas City"; break;
case 6: city.name = "San Diego"; break;
case 7: city.name = "San Francisco"; break;
case 8: city.name = "Paris"; break;
case 9: city.name = "Berlin"; break;
case 10: city.name = "Washington D.C."; break;
case 11: city.name = "Cincinnati"; break;
case 12: city.name = "Columbus"; break;
case 13: city.name = "Philadelphia"; break;
case 14: city.name = "New Orleans"; break;
case 15: city.name = "Dallas"; break;
case 16: city.name = "Salt Lake City"; break;
case 17: city.name = "Houston"; break;
case 18: city.name = "Los Angeles"; break;
case 19: city.name = "Boston"; break;
case 20: city.name = "Detroit"; break;
case 21: city.name = "Toronto"; break;
case 22: city.name = "Albany"; break;
case 23: city.name = "Orlando"; break;
case 24: city.name = "Anchorage"; break;
case 25: city.name = "Brussels"; break;
case 26: city.name = "London"; break;
case 27: city.name = "Denver"; break;
case 28: city.name = "San Antonio"; break;
case 29: city.name = "Tampa"; break;
case 30: city.name = "Miami"; break;
case 31: city.name = "Atlanta"; break;
case 32: city.name = "Providence"; break;
case 33: city.name = "Tallahassee"; break;
case 34: city.name = "Nashville"; break;
case 35: city.name = "Las Vegas"; break;
case 36: city.name = "Santa Fe"; break;
case 37: city.name = "Boise"; break;
case 38: city.name = "Seattle"; break;
case 39: city.name = "Portland"; break;
case 40: city.name = "Bismarck"; break;
case 41: city.name = "Minneapolis"; break;
case 42: city.name = "Milwaukee"; break;
case 43: city.name = "Montreal"; break;
case 44: city.name = "Winnipeg"; break;
case 45: city.name = "Calgary"; break;
case 46: city.name = "Birmingham"; break;
case 47: city.name = "St. Louis"; break;
case 48: city.name = "Little Rock"; break;
case 49: city.name = "Oklahoma City"; break;
case 50: city.name = "Indianapolis"; break;
case 51: city.name = "Pittsburgh"; break;
case 52: city.name = "Phoenix"; break;
case 53: city.name = "Omaha"; break;
case 54: city.name = "Wichita"; break;
case 55: city.name = "Lexington"; break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -