📄 form1.cs
字号:
{
calculateNodeValue(messionNum);
this.currentCity = messionNum;
messionNum = GetNextMissionNum();
}
for (int i = 0; i < array.Length; i++)//检查是不是所有的任务点都送完货了
{
FinishFlag=true;
if (((Classcity)array.GetValue(i)).needWeight != 0.0)
{
FinishFlag = false;
break;
}
}
if (FinishFlag == true)
{
calculateNodeValue(messionNum);
}
}
}
private void button1_Click_1(object sender, EventArgs e)//显示最佳路径
{
generateResult result= selectAntigen();
ArrayList resultList = result.list;
Array arrayResult = resultList.ToArray();
float x1=0.0f, y1=0.0f, x2=0.0f, y2=0.0f;
for (int i = 0; i < arrayResult.Length-1; i++)
{
x1 = ((Node)arrayResult.GetValue(i)).x;
y1 = ((Node)arrayResult.GetValue(i)).y;
x2 = ((Node)arrayResult.GetValue(i+1)).x;
y2 = ((Node)arrayResult.GetValue(i+1)).y;
g.DrawLine(Pens.White, x1 * 5 + 10, y1 * 5 + 10, x2 * 5 + 10, y2 * 5 + 10);
}
}
private void button2_Click(object sender, EventArgs e)//下一代迭代之后的最佳路径显示
{
this.button2.Enabled=false;
this.btnShowMap.Enabled = false;
int C_S = Convert.ToInt32(this.projectCmb.Text.ToString().Trim());
ltbShowPath.Items.Clear();
ltbShowPath.Update();
ltbOptimize.Items.Clear();
ltbOptimize.Update();
for (int generateNum = 0; generateNum < C_S; generateNum++)//进行多次迭代
{
this.label5.Text = "【正在进行迭代计算,请稍候... 迭代次数:" + Convert.ToString(generateNum) + "】";
this.label5.Update();
this.nextGenerateList = new ArrayList();//存储变异后的下一代抗体*(100)
generateResult resultNoUse = selectAntigen();//对generateList按照length进行一次排序
Array arrayGenerate = generateList.ToArray();//存储一代抗体*(100)
ArrayList nextGenerate = new ArrayList();//用来存取克隆后的值,选取前20个来克隆,克隆方法为第一个克隆数不变,
ltbShowPath.Update();
for (int i = 0; i < 20; i++)
{
generateResult result = (generateResult)arrayGenerate.GetValue(i);
if (i < 3)
{
for (int j = 0; j < 2; j++)
{
generateResult GenerateResult1to6 = new generateResult();
GenerateResult1to6.list = (ArrayList)result.list.Clone();
GenerateResult1to6.length = result.length;
nextGenerate.Add(GenerateResult1to6);
}
}
else if (i < 6)
{
for (int j = 0; j < 3; j++)
{
generateResult GenerateResult1to6 = new generateResult();
GenerateResult1to6.list = (ArrayList)result.list.Clone();
GenerateResult1to6.length = result.length;
nextGenerate.Add(GenerateResult1to6);
}
}
else if (i < 9)
{
for (int j = 0; j < 4; j++)
{
generateResult GenerateResult1to6 = new generateResult();
GenerateResult1to6.list = (ArrayList)result.list.Clone();
GenerateResult1to6.length = result.length;
nextGenerate.Add(GenerateResult1to6);
}
}
else if (i < 12)
{
for (int j = 0; j < 5; j++)
{
generateResult GenerateResult1to6 = new generateResult();
GenerateResult1to6.list = (ArrayList)result.list.Clone();
GenerateResult1to6.length = result.length;
nextGenerate.Add(GenerateResult1to6);
}
}
else if (i < 15)
{
for (int j = 0; j < 6; j++)
{
generateResult GenerateResult1to6 = new generateResult();
GenerateResult1to6.list = (ArrayList)result.list.Clone();
GenerateResult1to6.length = result.length;
nextGenerate.Add(GenerateResult1to6);
}
}
else
{
for (int j = 0; j < 7; j++)
{
generateResult GenerateResult1to6 = new generateResult();
GenerateResult1to6.list = (ArrayList)result.list.Clone();
GenerateResult1to6.length = result.length;
nextGenerate.Add(GenerateResult1to6);
}
}
}
//克隆完成//////////////////////////////////////////////////////////////
Array nextGenerateArray = nextGenerate.ToArray();//取得克隆后的值
generateResult resultNode0 = (generateResult)nextGenerateArray.GetValue(0);
nextGenerateList.Add(resultNode0);//为了保持克隆后的最优解,第一个克隆后的值直接存入下一代抗体
//nextGenerateList用来存储变异后的抗体;
for (int i = 1; i < nextGenerateArray.Length; i++) //由克隆后的抗体生成下一代抗体集合
{
generateResult result1 = (generateResult)nextGenerateArray.GetValue(i);
this.pathList = result1.list;
int vNum = 0;
if (i < 10)
{
vNum = (i + 1);//vnum的值是变异的概率大小,越靠后越变化大
}
else if (i < 20)
{
vNum = (i / 2 + 10);
}
else if (i < 50)
{
vNum = (i / 3 + 20);
}
else
{
vNum = i;
}
GetVariationCycle(this.pathList, vNum);//进行一次变异,产生新的抗体放在pathlist中
result1.length = this.pathlength;
result1.list = this.pathList;
nextGenerateList.Add(result1);
}
arrayGenerate = this.generateList.ToArray();
this.generateList = nextGenerateList;
this.shortestResult = selectAntigen();//对generateList按照length进行一次排序
string pathLengthlink="";
ArrayList resultListjj = shortestResult.list;
if (generateNum < 100)
{
if (generateNum % 10 == 0)//每隔十次显示一次路径结果
{
pathLengthlink = pathLengthlink + "第" + (generateNum + 1) + "次迭代: 总代价为:" + shortestResult.length + "\n";
for (int i = 0; i < resultListjj.Count - 1; i++)
{
pathLengthlink += ((ClassPathNode)resultListjj[i]).city.cityName.Trim() + "--->";
}
pathLengthlink += ((ClassPathNode)resultListjj[resultListjj.Count - 1]).city.cityName;
this.ltbShowPath.Items.Add(pathLengthlink);
}
}
else if (generateNum < 1000)
{
if (generateNum % 100 == 0)//显示最后一次路径结果
{
pathLengthlink = pathLengthlink + "第" + (generateNum + 1) + "次迭代: 总代价为:" + shortestResult.length + "\n";
for (int i = 0; i < resultListjj.Count - 1; i++)
{
pathLengthlink += ((ClassPathNode)resultListjj[i]).city.cityName + "--->";
if (i % 3 == 0)
{
pathLengthlink += "\n";
}
}
pathLengthlink += ((ClassPathNode)resultListjj[resultListjj.Count - 1]).city.cityName;
this.ltbShowPath.Items.Add(pathLengthlink);
}
}
else
{
if ((generateNum+1) % 1000 == 0)//显示最后一次路径结果
{
pathLengthlink = pathLengthlink + "第" + (generateNum + 1) + "次迭代: 总代价为:" + shortestResult.length + "\n";
for (int i = 0; i < resultListjj.Count - 1; i++)
{
pathLengthlink += ((ClassPathNode)resultListjj[i]).city.cityName + "--->";
if (i % 3 == 0)
{
pathLengthlink += "\n";
}
}
pathLengthlink += ((ClassPathNode)resultListjj[resultListjj.Count - 1]).city.cityName;
this.ltbShowPath.Items.Add(pathLengthlink);
}
}
}
int cycleNum = 0;//查看车辆使用的情况数;
this.ltbOptimize.Items.Add("车辆行驶路径在下面显示:");
string pathLink = "";
int isCycleEnd= -1;
for (int i = 0; i < this.shortestResult.list.Count - 1; i++)
{
ClassPathNode pathNode = (ClassPathNode)(shortestResult.list[i]);
if (pathNode.city.flag == 0)
{
cycleNum += 1;
}
}
for (int i = 0; i < this.shortestResult.list.Count; i++)
{
ClassPathNode pathNode =(ClassPathNode)(shortestResult.list[i]);
if (pathNode.city.flag == 0)
{
pathLink += ((ClassPathNode)(shortestResult.list[i])).city.cityName;
if (isCycleEnd==1)
{
i--;
this.ltbOptimize.Items.Add(pathLink);
pathLink = "";
}
isCycleEnd = -isCycleEnd;
}
else
{
pathLink += ((ClassPathNode)(shortestResult.list[i])).city.cityName.Trim()+" \n";
pathLink += "卸载量:"+((ClassPathNode)(shortestResult.list[i])).loadValue+" ";
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -