资源简介
资源包括详细的代码和注释,代码由VS2005 编写,附有可执行文件和源代码。附有说明文档可供参考。
代码片段和文件信息
#include “StdAfx.h“
#include “.\ant.h“
CAnt::CAnt(void)
{
m_pMapAry=Create2DArray(N_MAX_MAP_WIDTHN_MAX_MAP_HEIGHT);
}
CAnt::~CAnt(void)
{
Free2DArray(m_pMapAryN_MAX_MAP_WIDTH);
}
void CAnt::Init()
{
//清空蚂蚁走的路径
m_tabuAry.RemoveAll();
//设置蚂蚁走过的地方为地图初始状态
for (int i=0;i {
for (int j=0;j {
m_pMapAry[i][j]=g_pMapAry[i][j];
}
}
//加入起始点,并设置起始点为去过了
m_ptCurrent=g_ptStart;
m_tabuAry.Add(m_ptCurrent);
m_pMapAry[m_ptCurrent.x][m_ptCurrent.y]=1;
//设置完成搜索标志为false
m_blComplete=false;
//蚂蚁走过的路径长度设置为0
m_dbPathLength=0.0;
}
//检查从(x0y0)到(xy)是否允许
bool CAnt::CheckXY(int x0int y0int xint y)
{
//越界
if ((x<0) || (x>=N_MAP_WIDTH))
{
return false;
}
//越界
if ((y<0) || (y>=N_MAP_HEIGHT))
{
return false;
}
//该位置是障碍或者去过了
if ((m_pMapAry[x][y] == BARRIER) || (m_pMapAry[x][y] == MOVED))
{
return false;
}
//如果没有越界且位置为空,要检查如果是斜穿,斜穿点的两边是否有障碍
if ((x-x0 == -1) && (y-y0 ==-1)) //新位置在左上角
{
if ((m_pMapAry[x+1][y] == BARRIER) && (m_pMapAry[x][y+1] == BARRIER))
{
return false;
}
}
if ((x-x0 == 1) && (y-y0 ==-1)) //新位置在右上角
{
if ((m_pMapAry[x-1][y] == BARRIER) && (m_pMapAry[x][y+1] == BARRIER))
{
return false;
}
}
if ((x-x0 == -1) && (y-y0 ==1)) //新位置在左下角
{
if ((m_pMapAry[x][y-1] == BARRIER) && (m_pMapAry[x+1][y] == BARRIER))
{
return false;
}
}
if ((x-x0 == 1) && (y-y0 ==1)) //新位置在右下角
{
if ((m_pMapAry[x-1][y] == BARRIER) && (m_pMapAry[x][y-1] == BARRIER))
{
return false;
}
}
//上面都不返回,则可以到达
return true;
}
//选择下一个点
//返回值 为点的坐标位置
CPoint CAnt::ChooseNextCity()
{
CPoint pt(-1-1); //返回结果,先暂时把其设置为-1-1
//==============================================================================
//计算当前点和周围8个点的信息素总和
//为了用循环进行处理,编码方便,当前所在点也计算一下
double dbTotal=0.0;
double prob[9]={-1-1-1-1-1-1-1-1-1}; // 保存城市被选中的概率
int nIndex=-1;
int nCount=0; //周围有几个点可以去
for (int x=m_ptCurrent.x-1;x<=m_ptCurrent.x+1;x++)
{
for (int y=m_ptCurrent.y-1;y<=m_ptCurrent.y+1;y++)
{
nIndex++;
if (CheckXY(m_ptCurrent.xm_ptCurrent.yxy) == true)
{
prob[nIndex]=g_pMapTrail[x][y]/(g_pMapLen[x][y]*g_pMapLen[x][y]);
dbTotal=dbTotal+prob[nIndex];
nCount++;
}
}
}
//周围没有点可以去,则直接返回
if (nCount ==0)
{
return pt;
}
////==============================================================================
//对周围点进行轮盘选择
nIndex=-1; //记录周围那个点被选择
int nIndexFirst=-1; //记录第一个可以去的点
double dbTemp=rnd(0.0dbTotal); //取一个随机数
for (int i=0;i<9;i++)
{
if (prob[i]>=0) //点可以去
{
dbTemp=dbTemp-prob[i]; //这个操作相当于转动轮盘
if (dbTemp <= 0.0) //轮盘停止转动,记下点位置,直接跳出循环
{
nIndex=i;
break;
}
//保存第一个可以去的点
//如果没有点选中就用这个点作为结果返回
if (nIndexFirst == -1)
{
nIndexFirst=i;
}
}
}
//如果经过上面操作没有点被选中
//就把第一个可去的点作为结果返回
if (nIndex == -1)
{
nInd
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1105920 2010-04-12 11:53 机器人路径规划\可执行文件\mfc80.dll
文件 632656 2010-04-12 11:53 机器人路径规划\可执行文件\msvcr80.dll
文件 77824 2011-06-28 14:59 机器人路径规划\可执行文件\Robot.exe
文件 11127 2011-06-23 14:47 机器人路径规划\源代码\Robot\Ant.cpp
文件 1343 2011-06-28 14:59 机器人路径规划\源代码\Robot\Ant.h
文件 1516 2011-06-28 08:40 机器人路径规划\源代码\Robot\Common.cpp
文件 2835 2011-06-28 14:59 机器人路径规划\源代码\Robot\Common.h
文件 1426 2011-06-21 19:44 机器人路径规划\源代码\Robot\DlgNewMap.cpp
文件 615 2011-06-21 19:30 机器人路径规划\源代码\Robot\DlgNewMap.h
文件 13416 2011-06-23 18:45 机器人路径规划\源代码\Robot\MapView.cpp
文件 1136 2011-06-23 18:39 机器人路径规划\源代码\Robot\MapView.h
文件 7955 2011-01-19 20:07 机器人路径规划\源代码\Robot\MyButton.cpp
文件 1250 2011-01-12 13:30 机器人路径规划\源代码\Robot\MyButton.h
文件 2855 2011-06-16 21:05 机器人路径规划\源代码\Robot\ReadMe.txt
文件 7734 2011-06-21 19:33 机器人路径规划\源代码\Robot\res\btnbmp.bmp
文件 3126 2011-06-21 13:12 机器人路径规划\源代码\Robot\res\rbt.bmp
文件 5430 2011-06-21 18:24 机器人路径规划\源代码\Robot\res\robot.ico
文件 361 2011-06-16 21:05 机器人路径规划\源代码\Robot\res\Robot.rc2
文件 1592 2011-06-23 16:26 机器人路径规划\源代码\Robot\resource.h
文件 1636 2011-06-16 21:05 机器人路径规划\源代码\Robot\Robot.cpp
文件 435 2011-06-16 21:05 机器人路径规划\源代码\Robot\Robot.h
文件 6561 2011-06-23 16:28 机器人路径规划\源代码\Robot\Robot.rc
文件 6628 2011-06-21 19:03 机器人路径规划\源代码\Robot\Robot.vcproj
文件 13427 2011-06-23 16:28 机器人路径规划\源代码\Robot\RobotDlg.cpp
文件 1623 2011-06-23 16:26 机器人路径规划\源代码\Robot\RobotDlg.h
文件 136 2011-06-16 21:05 机器人路径规划\源代码\Robot\stdafx.cpp
文件 2508 2011-06-16 21:13 机器人路径规划\源代码\Robot\stdafx.h
文件 4867 2011-06-28 13:45 机器人路径规划\源代码\Robot\Tsp.cpp
文件 811 2011-06-28 14:59 机器人路径规划\源代码\Robot\Tsp.h
文件 880 2011-06-16 21:05 机器人路径规划\源代码\Robot.sln
............此处省略10个文件信息
相关资源
- 基于Qt的图形显示蚁群算法求解TSP问题
- 蚁群算法源代码 C++版
- C++程序设计 机器人
- 移动机器人基本运动控制的源代码
- ROBOOP --机器人正逆解C++版本开源开源
- 计算机图形学OpenGL画机器人
- 机器人灭火比赛源程序C语言版本
- C++AGV 路径规划与运行仿真程序
- 人工势场法路径规划c语言程序
- 基本蚁群算法C语言,比较详细!
- 机器人C语言代码的一个详细
- 基于蚁群算法的机器人路径规划C语言
- 灭火机器人c语言代码国赛一等奖
- 灭火机器人代码
- 计算机图形学考试内容-Opengl-会移动的
- 灭火机器人
- A*算法 机器人路径规划
- 机器人手臂
- 并行蚁群算法解决旅行商问题
-
ros move_ba
se中多个导航点的c++实现 - 机器人学强化训练,适用动态避障,
- 基于蚁群算法的TSP问题实现C语言
- ABB机器人的socket通信UDPRapid代码
- 蚁群算法C++版
- C++ AGV 路径规划仿真程序
- 蚂蚁算法MFC实现执行文件
- 图灵机器人支持v1和v2版本代码
- TSP问题蚁群算法C++实现
- MFC的六轴机器人正逆解程序
- 巡线机器人小车c源码
评论
共有 条评论