亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mainfrm.cpp

?? 雙蟻群算法實(shí)現(xiàn)機(jī)器人路徑規(guī)劃
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "AntColony.h"
#include "SetParDialog.h"
#include "MainFrm.h"
/////////********////////////////////
#include "stdafx.h"
#include "operation.h"
#include "ANT.h"
#include "MAP.h"
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
/////////********////////////////////
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
////////////////////////////////////////////////////////////////////////////
///////////////////@@@@@@@@@數(shù)據(jù)采集程序段////////////////////////////////
struct DATA{
	unsigned int path[AntNumber][StepLimit];
	double Value[AntNumber];
}	data[500];
/////////////////////////////////////////////////////////////////////////////

double BestValue=1000,Q=1000;//Q是信息素總量
int	GenerLimit=50;	//蟻群繁殖代數(shù)極限
unsigned int StartPoint=340,TarGetG=1300;	 
//unsigned int StartPoint=41,TarGetG=1558;	
unsigned int	BestTrail[StepLimit];//,BestAntGern=0;

MAP map;//生成并初始化地圖對(duì)象和蟻群對(duì)象
ANT ant[AntNumber],ant2[AntNumber2];
SetParDialog	SetPD;
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
void MapIn(void)
{ FILE *fp1; 
  int i,j;
  fp1=fopen("map.dat", "r");
  for(i=0;i<mapH;i++)
		for(j=0;j<mapV;j++)
         fscanf(fp1,"%5d",&map.point[i][j].PointType);
  fclose(fp1) ;
	map.point[0][0].PointType=1;//第一點(diǎn)一定要為不可通過的點(diǎn)

}
void PathOut(void)
{ FILE *fp2;
  int i,j;
  fp2=fopen("path.dat", "w");
  for(i=0;i<AntNumber;i++)
    {for(j=0;j<StepLimit;j++)
        {
          fprintf(fp2, "%5d",ant[i].path[j]);
          fprintf(fp2, " ");
        }
      fprintf(fp2,"\n");
     }
  fclose(fp2) ;
}
/////////////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_COMMAND(ID_SETPAR, OnSetpar)
	ON_COMMAND(ID_STARTSIMU, OnStartsimu)
	ON_COMMAND(ID_SHOWSHANGE, OnShowshange)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	
}

CMainFrame::~CMainFrame()
{
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
 

void CMainFrame::OnSetpar() 
{

	// TODO: Add your command handler code here
	static int flag=0;
	if(!flag)
	{
		SetPD.m_gener=500;
		SetPD.m_beta=2.3;
		SetPD.m_alpha=2.2;
	}
	flag++;
	SetPD.DoModal();
}

void CMainFrame::OnStartsimu() //開始仿真
{

	int i,j,step;
	int BestAntNum;
	int mm,nn;
	double BetValue;
//	MessageBox("start sim");
	GenerLimit=SetPD.m_gener;
	map.Target=TarGetG;/////////////******************??????????////////////
	for(j=0;j<AntNumber;j++)//對(duì)螞蟻和地圖初始化其變量 Target
		{
			ant[j].Target=TarGetG;////////////******************??????????////////////
			ant2[j].Target=StartPoint;////////////******************??????????////////////
		}
	MapIn();

	for(i=0;i<GenerLimit;i++)
	{	
		for(j=0;j<AntNumber;j++)//生成新一代螞蟻 對(duì)螞蟻進(jìn)行初始化
		{
			ant[j].init();
			ant[j].beta=SetPD.m_beta;		//引力系數(shù)加強(qiáng)為1.0
			ant[j].alpha=SetPD.m_alpha;		//XXX

			ant2[j].init();
			ant2[j].beta=SetPD.m_beta;		//引力系數(shù)加強(qiáng)為1.0
			ant2[j].alpha=SetPD.m_alpha;		//XXX
		}
		
		for(j=0;j<AntNumber;j++)//init every ant
		{
			ant[j].path[0]=StartPoint; //init ant j with start point
			ant2[j].path[0]=TarGetG; //init ant j with start point
		}

		for(step=1;step<StepLimit;step++)
		{	
			srand( (unsigned)time( NULL )*(step+1)*rand());
			for(j=0;j<AntNumber;j++)
			{
				if(ant[j].WorkDone==1||ant[j].PathValue==-1)
//					continue; //如果某螞蟻已經(jīng)達(dá)到目標(biāo)點(diǎn) 或者作廢了 則轉(zhuǎn)為處理下一只
					goto pp;
				CreatArea9(ant[j].path[step-1],j,step);
				//生成鄰域 9點(diǎn) 放到鄰域數(shù)組里 以坐標(biāo)點(diǎn)的形式存儲(chǔ)
				ant[j].CalculateDr();
				//計(jì)算每個(gè)點(diǎn)的引力概率 放到鄰域數(shù)組
				ant[j].CalculatePr();
				//計(jì)算每個(gè)點(diǎn)的轉(zhuǎn)移概率 放到鄰域數(shù)組
			///////////////////////////////////////////////
				BetValue=rand()/(double)RAND_MAX;
				//printf("BetValue=  %f\n",BetValue);
			///////////////////////////////////////////////
				if(ant[j].PathValue!=-1)
					ant[j].bet(j,step,BetValue);
				//根據(jù)賭盤算法選取轉(zhuǎn)移點(diǎn) 放到path[step]中

pp:				if(ant2[j].WorkDone==1||ant2[j].PathValue==-1)
					continue; //如果某螞蟻已經(jīng)達(dá)到目標(biāo)點(diǎn) 或者作廢了 則轉(zhuǎn)為處理下一只
				CreatArea9_ant2(ant2[j].path[step-1],j,step);
				//生成鄰域 9點(diǎn) 放到鄰域數(shù)組里 以坐標(biāo)點(diǎn)的形式存儲(chǔ)
				ant2[j].CalculateDr();
				//計(jì)算每個(gè)點(diǎn)的引力概率 放到鄰域數(shù)組
				ant2[j].CalculatePr();
				//計(jì)算每個(gè)點(diǎn)的轉(zhuǎn)移概率 放到鄰域數(shù)組
			///////////////////////////////////////////////
				BetValue=rand()/(double)RAND_MAX;
				//printf("BetValue=  %f\n",BetValue);
			///////////////////////////////////////////////
				if(ant2[j].PathValue!=-1)
					ant2[j].bet(j,step,BetValue);
				//根據(jù)賭盤算法選取轉(zhuǎn)移點(diǎn) 放到path[step]中

			}
			 
		}

		map.UpdateMap();	// 消散信息素;
	
		for(j=0;j<AntNumber;j++)
		{
		ant2[j].TurnPath();
		}
///**********************************************************///
//在此對(duì)所得兩個(gè)種群的螞蟻進(jìn)行全面相交,把優(yōu)化的結(jié)果寫到第一種群中

		//	Cross();
			for(nn=0;nn<AntNumber;nn++)
			for(mm=0;mm<StepLimit;mm++)
			data[i].path[nn][mm]=ant[nn].path[mm];//把數(shù)據(jù)寫入data中

///**********************************************************///
		for(j=0;j<AntNumber;j++)
		{
			ant[j].AnalyzePath();//對(duì)路徑進(jìn)行處理
		}
		BestAntNum=GetBestAnt();//得到各代中具有最優(yōu)值的螞蟻號(hào)碼
	//	PathOut();	
	if(BestValue>ant[BestAntNum].PathValue&&ant[BestAntNum].PathValue>1)
	{
		for(j=0;j<StepLimit;j++)
		BestTrail[j]=ant[BestAntNum].path[j];
		BestValue=ant[BestAntNum].PathValue;

	}

		for(j=0;j<AntNumber;j++)
		{
			if(ant[j].PathValue>0) //只更新可行解
			map.UpdateInfo(Q/ant[j].PathValue, ant[j].path);
		}//加入新一代的信息素

	}
////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////

	DrawPath(BestTrail);
//	MessageBox("end sim");
//	for(i=0;i<20;i++)
//	{
//		DrawPath(ant[i].path);
//		MessageBox("i");
//	}

	for(mm=0;mm<GenerLimit;mm++)
	for(nn=0;nn<AntNumber;nn++)
		AnalyzePathG(mm,nn);

	//////////處理以后需要輸出//////////
	DataOut();
}

int CMainFrame::GetBestAnt()//返回具有最佳路徑的螞蟻編號(hào)
{
	int i,BestAnt=0;
	double TValue[AntNumber];
	for(i=0;i<AntNumber;i++)
		if(ant[i].PathValue>1)
		{
			TValue[i]=100000/ant[i].PathValue;
		}
		else
		TValue[i]=0;

	for(i=0;i<AntNumber;i++)
	if(TValue[i]>TValue[BestAnt])//
		BestAnt=i;
	return BestAnt;
}

void CMainFrame::CreatArea9(unsigned int core, unsigned int AntNum, int step2)
{
	unsigned int i,j,point;
 	ant[AntNum].area9[1][1].x=core%mapH;                                                                                                                                                                             
 	ant[AntNum].area9[1][1].y=core/mapH;//設(shè)置中心點(diǎn)-核-現(xiàn)在時(shí)刻所在點(diǎn)
	for(i=0;i<3;i++)
 	for(j=0;j<3;j++)
 	{
		ant[AntNum].area9[i][j].x=ant[AntNum].area9[1][1].x-1+j;
 		ant[AntNum].area9[i][j].y=ant[AntNum].area9[1][1].y-1+i; 
		//填充其他八點(diǎn) 用坐標(biāo)點(diǎn)的方式
 		if(ant[AntNum].area9[i][j].x>=mapH||ant[AntNum].area9[i][j].y>=mapV
			||ant[AntNum].area9[i][j].x<0||ant[AntNum].area9[i][j].y<0)
		{	ant[AntNum].area9[i][j].state=1; 
			ant[AntNum].area9[i][j].pr=0;
			continue;  }
		//查看各點(diǎn)是否超過地圖范圍
		if(map.point[ant[AntNum].area9[i][j].y][ant[AntNum].area9[i][j].x].PointType)
		{	ant[AntNum].area9[i][j].state=1;
			ant[AntNum].area9[i][j].pr=0; 
			continue;
		}
		//查看各點(diǎn)的狀態(tài)

		point=ant[AntNum].area9[i][j].y*mapH+ant[AntNum].area9[i][j].x;// 對(duì)點(diǎn)編碼
		if(ant[AntNum].FindInPath(point,step2)) //
		{ant[AntNum].area9[i][j].state=2; 
			ant[AntNum].area9[i][j].pr=0;
			continue;}	
		//還要查詢禁忌表 把已經(jīng)走過的點(diǎn)標(biāo)記為不可通過  ×××
ant[AntNum].area9[i][j].state=0;
ant[AntNum].area9[i][j].pr=map.point[ant[AntNum].area9[i][j].y][ant[AntNum].area9[i][j].x].tau;
		//初始信息素 pr 單元

 	}
	
		if(ant[AntNum].area9[0][1].state==1)
		{
			ant[AntNum].area9[0][0].state=1; 
			ant[AntNum].area9[0][0].pr=0;
			ant[AntNum].area9[0][2].state=1; 
			ant[AntNum].area9[0][2].pr=0;
		}
		if(ant[AntNum].area9[1][0].state==1)
		{
			ant[AntNum].area9[0][0].state=1; 
			ant[AntNum].area9[0][0].pr=0;
			ant[AntNum].area9[2][0].state=1; 
			ant[AntNum].area9[2][0].pr=0;
		}
		if(ant[AntNum].area9[2][1].state==1)
		{
			ant[AntNum].area9[2][2].state=1; 
			ant[AntNum].area9[2][2].pr=0;
			ant[AntNum].area9[2][0].state=1; 
			ant[AntNum].area9[2][0].pr=0;
		}
		if(ant[AntNum].area9[1][2].state==1)
		{
			ant[AntNum].area9[2][2].state=1; 
			ant[AntNum].area9[2][2].pr=0;
			ant[AntNum].area9[0][2].state=1; 
			ant[AntNum].area9[0][2].pr=0;
		}

}

void CMainFrame::DrawPath(unsigned int *p)
{
	int i;
	unsigned int x,y,gys,gys2;
	gys=400/mapH;
	gys2=200/mapH;
	CClientDC dc(this);
 	CPen newpen;
 	CPen *oldpen;
 	newpen.CreatePen(PS_SOLID,3,RGB(0,0,0));
 	oldpen=dc.SelectObject(&newpen);
	for(i=0;i<StepLimit;i++)
	{
		if(*p==ant[0].Target)
			break;
		x=(*p%mapH)*gys+gys2;
		y=(*p/mapV)*gys+gys2;
		dc.MoveTo(x,y);
		if(*(p+1)==0)
		if(*(p+2)==0||i==StepLimit-1)
			break;
		p++;
		x=(*p%mapH)*gys+gys2;
		y=(*p/mapV)*gys+gys2;
 		dc.LineTo(x,y);

	}
 	dc.SelectObject(oldpen);
 	newpen.DeleteObject();
}

void CMainFrame::OnShowshange() 
{
	// TODO: Add your command handler code here
		int x,y,i;
//	StartPoint=41,TarGetG=1598;
///////////////////////////////////////////////////////////////
		int x0,y0,x1,y1,a,b,gys;
		CClientDC dc(this);
 		CBrush newbrush;
 		CBrush *oldbrush;

		a=StartPoint%mapH;
		b=StartPoint/mapH;
		newbrush.CreateSolidBrush(RGB(0,0,255)); 
		gys=400/mapH;
		x0=gys*a;
		y0=gys*b;
		x1=gys*a+gys;
		y1=gys*b+gys;
		oldbrush=dc.SelectObject(&newbrush);
		dc.Rectangle(x0,y0,x1,y1);
		dc.SelectObject(oldbrush);
		newbrush.DeleteObject();

		a=TarGetG%mapH;
		b=TarGetG/mapH;
		newbrush.CreateSolidBrush(RGB(0,255,0));
		x0=gys*a;
		y0=gys*b;
		x1=gys*a+gys;
		y1=gys*b+gys;
		oldbrush=dc.SelectObject(&newbrush);
		dc.Rectangle(x0,y0,x1,y1);

	dc.SelectObject(oldbrush);
	newbrush.DeleteObject();
/////////////////////////////////////////////////////////////////
//	CClientDC dc(this);
 	CPen newpen;
 	CPen *oldpen;
 	newpen.CreatePen(PS_DOT,1,RGB(0,0,0));
 	oldpen=dc.SelectObject(&newpen);
	x=400/mapH;
	y=400/mapH;
	for(i=0;i<mapH;i++)
	{
		dc.MoveTo(x*i,0);
		dc.LineTo(x*i,400);	
	}
	for(i=0;i<mapH;i++)
	{
		dc.MoveTo(0,i*y);
		dc.LineTo(400,i*y);	
	}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩美女天天操| 亚洲激情校园春色| 欧美一区二区久久| 欧美老女人在线| 欧美日韩国产首页| 欧美精品在线观看播放| 制服丝袜av成人在线看| 欧美亚洲日本国产| 欧美日韩中文字幕一区二区| 在线观看视频一区二区| 日本高清视频一区二区| 色欧美88888久久久久久影院| 91在线视频在线| 色综合久久综合| 在线观看日韩电影| 欧美日韩精品免费| 欧美一卡二卡三卡四卡| 日韩免费看网站| www国产成人免费观看视频 深夜成人网| 欧美刺激脚交jootjob| 久久尤物电影视频在线观看| 久久久久国产精品麻豆| 国产精品第四页| 亚洲免费av观看| 天堂va蜜桃一区二区三区 | 婷婷久久综合九色综合伊人色| 亚洲伊人伊色伊影伊综合网| 亚洲午夜一区二区| 免费在线观看日韩欧美| 国产裸体歌舞团一区二区| 丁香六月综合激情| 色偷偷88欧美精品久久久| 欧美日韩一区二区电影| 欧美成人a视频| 国产精品国产精品国产专区不片 | jlzzjlzz亚洲日本少妇| 色天使久久综合网天天| 日韩一区二区视频| 国产亚洲欧洲997久久综合| 综合久久国产九一剧情麻豆| 午夜精品福利一区二区蜜股av | 国产一区二区精品久久91| 国产99精品国产| 欧美在线观看视频一区二区| 日韩欧美一级特黄在线播放| 日本一区二区不卡视频| 亚洲高清视频在线| 国产经典欧美精品| 色香蕉成人二区免费| 精品欧美乱码久久久久久| 中文字幕一区二区三区在线播放| 亚洲风情在线资源站| 极品销魂美女一区二区三区| 色综合久久久网| 精品国产3级a| 亚洲一区二区在线播放相泽| 国产一区二区导航在线播放| 91官网在线观看| 久久久电影一区二区三区| 亚洲激情男女视频| 国产精品自拍网站| 欧美精品1区2区| 中文字幕色av一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎| 成人黄页毛片网站| 日韩一区二区电影网| 成年人网站91| 色婷婷国产精品| 国产亚洲一本大道中文在线| 日韩电影免费一区| 色综合天天天天做夜夜夜夜做| 日韩欧美在线影院| 亚洲一区二区av在线| 成人精品国产一区二区4080| 日韩一区二区在线观看| 一区二区久久久久| 成人午夜在线播放| 欧美mv日韩mv国产网站app| 亚洲电影第三页| 91免费在线视频观看| 国产色产综合色产在线视频| 蜜桃视频第一区免费观看| 欧美伊人久久大香线蕉综合69| 国产精品人成在线观看免费| 久久99精品久久只有精品| 欧美高清视频一二三区 | 精品国产凹凸成av人网站| 香港成人在线视频| 在线观看91视频| 亚洲人成精品久久久久| 成人a区在线观看| 国产偷国产偷亚洲高清人白洁| 日日嗨av一区二区三区四区| 欧美影院午夜播放| 曰韩精品一区二区| 91小视频在线| 《视频一区视频二区| 99久久婷婷国产综合精品电影| 国产日韩精品一区| 国产精华液一区二区三区| 久久久久久夜精品精品免费| 激情成人综合网| 精品国产乱码久久久久久浪潮| 蜜臀av一区二区在线免费观看 | 777奇米成人网| 视频一区在线播放| 欧美精品tushy高清| 天天色综合天天| 91麻豆精品国产91久久久久久 | 欧洲一区在线观看| 亚洲综合一区二区三区| 欧美亚洲国产bt| 亚洲图片一区二区| 欧美日韩国产一二三| 七七婷婷婷婷精品国产| 精品国产亚洲一区二区三区在线观看| 久久国产精品99久久久久久老狼 | 亚洲视频免费看| 一本一本大道香蕉久在线精品| 亚洲欧美一区二区不卡| 一本大道av一区二区在线播放| 亚洲午夜久久久久久久久久久 | 日韩精品一区二区三区四区| 久久精品理论片| 久久久久久黄色| 97精品国产露脸对白| 亚洲国产精品一区二区久久恐怖片| 欧美年轻男男videosbes| 久久精品免费观看| 国产精品嫩草影院av蜜臀| 99re这里都是精品| 午夜激情综合网| 2022国产精品视频| 97精品久久久午夜一区二区三区| 亚洲制服丝袜av| 日韩欧美二区三区| 国产ts人妖一区二区| 亚洲免费伊人电影| 日韩欧美不卡一区| 成人夜色视频网站在线观看| 亚洲伊人伊色伊影伊综合网| 欧美电影免费观看高清完整版在| 国产a区久久久| 亚洲图片欧美综合| 久久久精品天堂| 在线看不卡av| 欧美国产精品一区二区| 在线播放91灌醉迷j高跟美女 | 久久蜜桃一区二区| 91麻豆免费在线观看| 日本最新不卡在线| 欧美极品aⅴ影院| 欧美系列在线观看| 国产一本一道久久香蕉| 中文字幕在线不卡一区二区三区| 制服丝袜成人动漫| www.一区二区| 蜜臀va亚洲va欧美va天堂| 中文字幕一区二区5566日韩| 91精品国产色综合久久久蜜香臀| 成人性生交大合| 日本不卡视频一二三区| 亚洲伦理在线精品| 久久综合色婷婷| 欧美色综合久久| 丁香婷婷综合五月| 九九九久久久精品| 亚洲国产乱码最新视频| 国产精品看片你懂得| 日韩一区和二区| 欧美三级蜜桃2在线观看| 粉嫩av一区二区三区| 美女网站一区二区| 亚洲一区免费在线观看| 国产日韩欧美在线一区| 日韩一级欧美一级| 在线免费观看视频一区| 成人动漫在线一区| 国产一区二区女| 久久99精品久久久| 日本亚洲三级在线| 亚洲午夜三级在线| 亚洲精品国产视频| 中文字幕在线不卡一区二区三区| 久久影音资源网| 精品国产电影一区二区| 欧美日韩精品专区| 欧美中文字幕久久| 91天堂素人约啪| 成年人午夜久久久| 丁香六月久久综合狠狠色| 国产精品一区二区在线看| 免费成人小视频| 日韩不卡一区二区三区| 亚洲国产精品精华液网站| 亚洲日穴在线视频| 国产精品久久久久久久久免费丝袜| www成人在线观看| 久久久久久久久久久久久女国产乱| 欧美一区二区三区在线观看|