Ⅰ 要写论文了!有没有不要编程的算法!就纯粹是函数的。 就是拣货路径优化涉及到得算法!例如蚁群算法啊
法国人特特热热热饭热热
Ⅱ 基于遗传算法路径优化C++编程
[cpp]
bool CAStar::Search(int X, int Y, std::list<POINT> &lResult, double dbGapBreak)
{
if(X < 0 || Y < 0
|| X > m_dwMapWidth || Y > m_dwMapWidth ||
m_dwDestinationX < 0 || m_dwDestinationX < 0 ||
m_dwDestinationX > m_dwMapWidth || m_dwDestinationY > m_dwMapHeight)
{
//_outf("坐标或地图参数错误!");
return false;
}
LPAPOINT p = new APOINT;
p->x = X;
p->y = Y;
p->parent = NULL;
p->dbGap = _p2g(X, Y, m_dwDestinationX, m_dwDestinationY);
m_lOpen.push_front(p);//起始节点加入到开启列表
m_lSafe.push_back(p);//加入到公共容器,任何新分配的节点,都要加入到这里,便于算法执行完后清理
std::list<LPAPOINT>::iterator it;
DWORD dwTime = clock();
while(!m_lOpen.empty())
{
//这里就是反复遍历开启列表选择距离最小的节点
it = GetMingapNode();
if((*it)->dbGap <= dbGapBreak)
break;
p = *it;
GenerateSuccessors(it);
}
if(!m_lOpen.empty())
{
//如果列表不为空,从最后一个节点开始拷贝路径到返回值中
//_outf("最终寻路到:%X, %X", p->x, p->y);
POINT point;
while(p)
{
point.x = p->x;
point.y = p->y;
lResult.push_front(point);
p = p->parent;
}
}
for(it = m_lSafe.begin(); it != m_lSafe.end(); ++it)
{
//清理内存
if(*it != NULL)
{
m_pMap[(*it)->y][(*it)->x] = 1;//会被添加到m_lSafe的节点,一定是最初为1的节点,所以可以在这里恢复地图数据
delete (*it);
*it = NULL;
}
}
m_lSafe.clear();//清空容器
//_outf("耗时:%d 毫秒", clock() - dwTime);
if(m_lOpen.empty())
{
//_outf("寻路失败");
return false;
}
m_lOpen.clear();//清空开启列表
//_outf("寻路成功,节点数:%d", lResult.size());
return true;
}
bool CAStar::Search(int X, int Y, std::list<POINT> &lResult, double dbGapBreak)
{
if(X < 0 || Y < 0
|| X > m_dwMapWidth || Y > m_dwMapWidth ||
m_dwDestinationX < 0 || m_dwDestinationX < 0 ||
m_dwDestinationX > m_dwMapWidth || m_dwDestinationY > m_dwMapHeight)
{
//_outf("坐标或地图参数错误!");
return false;
}
LPAPOINT p = new APOINT;
p->x = X;
p->y = Y;
p->parent = NULL;
p->dbGap = _p2g(X, Y, m_dwDestinationX, m_dwDestinationY);
m_lOpen.push_front(p);//起始节点加入到开启列表
m_lSafe.push_back(p);//加入到公共容器,任何新分配的节点,都要加入到这里,便于算法执行完后清理
std::list<LPAPOINT>::iterator it;
DWORD dwTime = clock();
while(!m_lOpen.empty())
{
//这里就是反复遍历开启列表选择距离最小的节点
it = GetMingapNode();
if((*it)->dbGap <= dbGapBreak)
break;
p = *it;
GenerateSuccessors(it);
}
if(!m_lOpen.empty())
{
//如果列表不为空,从最后一个节点开始拷贝路径到返回值中
//_outf("最终寻路到:%X, %X", p->x, p->y);
POINT point;
while(p)
{
point.x = p->x;
point.y = p->y;
lResult.push_front(point);
p = p->parent;
}
}
for(it = m_lSafe.begin(); it != m_lSafe.end(); ++it)
{
//清理内存
if(*it != NULL)
{
m_pMap[(*it)->y][(*it)->x] = 1;//会被添加到m_lSafe的节点,一定是最初为1的节点,所以可以在这里恢复地图数据
delete (*it);
*it = NULL;
}
}
m_lSafe.clear();//清空容器
//_outf("耗时:%d 毫秒", clock() - dwTime);
if(m_lOpen.empty())
{
//_outf("寻路失败");
return false;
}
m_lOpen.clear();//清空开启列表
//_outf("寻路成功,节点数:%d", lResult.size());
return true;
}
新增的SearchEx源代码如下:
nBeginSift 参数为循环初始值,nEndSift为循环结束值,其实就是一个for循环的起始值与结束值。
这个循环的引用计数,最终会被 乘于 10 来作为距离分段选择路径进行路线优化
nBeginSift 与 nEndSift的间距越大,并不表示最终路径就越好,最终优化出来的路径,还是会和地形有关。
其实最好路径优化算法是按照角度的变化来选择路径优化,但是预计开销会比较大,有了这个优化方式作为基础,你可以自己去写根据角度变化来优化的算法。
[cpp]
bool CAStar::SearchEx(int X, int Y, std::list<POINT> &lResult, double dbGapBreak, int nBeginSift, int nEndSift)
{
DWORD dwTime = clock();
if(!Search(X, Y, lResult, dbGapBreak))
return false;
std::list<POINT>::iterator it = lResult.begin();
std::list<POINT>::iterator it2 = it;
std::list<POINT> l2;
for(int i = nBeginSift; i < nEndSift; i++)
{
it = lResult.begin();
it2 = it;
for(;it != lResult.end(); ++it)
{
if(_p2g(it2->x, it2->y, it->x, it->y) > (double)(i * 10))
{
SetDestinationPos(it->x, it->y);
l2.clear();
if(Search(it2->x, it2->y, l2, 0.0))
{
it = lResult.erase(it2, it);
lResult.insert(it, (l2.begin()), (l2.end()));
}
it2 = it;
}
}
}
_outf("耗时:%d 毫秒", clock() - dwTime);
return true;
}
bool CAStar::SearchEx(int X, int Y, std::list<POINT> &lResult, double dbGapBreak, int nBeginSift, int nEndSift)
{
DWORD dwTime = clock();
if(!Search(X, Y, lResult, dbGapBreak))
return false;
std::list<POINT>::iterator it = lResult.begin();
std::list<POINT>::iterator it2 = it;
std::list<POINT> l2;
for(int i = nBeginSift; i < nEndSift; i++)
{
it = lResult.begin();
it2 = it;
for(;it != lResult.end(); ++it)
{
if(_p2g(it2->x, it2->y, it->x, it->y) > (double)(i * 10))
{
SetDestinationPos(it->x, it->y);
l2.clear();
if(Search(it2->x, it2->y, l2, 0.0))
{
it = lResult.erase(it2, it);
lResult.insert(it, (l2.begin()), (l2.end()));
}
it2 = it;
}
}
}
_outf("耗时:%d 毫秒", clock() - dwTime);
return true;
}
Ⅲ 节约里程法,遗传算法,神经网络这几种算法哪个简单易懂在路径优化问题中哪种算法最简单易懂
路径优化的话我认为遗传算法最好用,也比较简单。
Ⅳ 基于遗传算法的路径优化
有木有诚意啊,加你的QQ的验证问题竟然是你的真名叫什么……
Ⅳ 路径优化方法
在配送路线选择中.主要采取模型化方法进行路线确定。常见的模型有Tabu Search算法、SOM方法、遗传算法、节约里程法等。节约里程法,又称车辆运行计划法(VSP—VehiclesSchedIlling Program),适用于实际工作中要求得较优解或最优的近似解。而不一定需要求得最优解的情况。它的基本原理是三角形的一边之长必定小于另外两边之和。当配送中心与用户里三角形关系时.由配送中心P单独向两个用户A和B往返配货的车辆运行距离必须大于以配送中心P巡回向两用户发货的距离。那么,所计算的结果:2Lpa 2Lpb-(Lp^Lpb Lab)=Lpa Lpb—hb为巡回发货比往返发货的节约里程。
Ⅵ 蚁群算法相对其他配送路径优化算法有什么优点
可能知识有限,实在没有看出什么相同点。对于粒子群而言,每个粒子以及系统都存在一定的规律,具体一点说就是薛定谔方程的范畴下。而对于蚁群来说,我想,应该涉及到生物学的范畴吧,涉及到蚁群的生活方式,交流方式,或许还要涉及到博弈论、统筹学方面的知识,这方面完全不懂了。
Ⅶ 有什么算法可以同时解决车辆路径优化的VRPTW和SDVRP,数学模型怎么达到
智能优化算法,比如粒子群算法、蚁群算法、禁忌搜索算法。优点是对问题和模型要求低,搜索速度快;缺点是容易陷入局部最优解。
Ⅷ 删除路径算法与剪枝算法一样吗
路径如果指的是隐式图上的路径的话,它们是一样的.
如果指的是狭义的图上的路径的话,删除路径算法只是剪枝算法在图论题目上的应用.
剪枝算法是在穷举的基础上进行优化的算法.
它的传统思路便是可行性剪枝和最优性剪枝.它们都是通过判断一些方向不可能有解或是不可能是最优解来减少枚举的范围.如果你将题目看做一张隐式图,那么这样的操作确实可以叫做删除路径算法.
但是如果所说的删除路径算法说得只是标准的图上的路径的话其实是不完全等同于剪枝算法的.可以说它包含于剪枝算法.
一般的算法需要删除路径的话,也是考虑到这条路径的不可行或是不可能为最优才可以删除路径达到优化复杂度的作用的.
Ⅸ 什么是 路径重连 优化 算法 path relinking
想在Matlab里画三维曲面图,数据为12*12的矩阵,每个数据都是类似8.4307e 函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化