<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>蚁群算法js版</title>
<style>
.ant{
position:absolute;
background-color:#000000;
overflow:hidden;
width:2px;
height:2px;
}
.food{
position:absolute;
background-color:#0000ff;
overflow:hidden;
width:4px;
height:4px;
}
.nest{
position:absolute;
background-color:#ff0000;
overflow:hidden;
width:2px;
height:2px;
}
</style>
<script type="text/JavaScript">
//============================
//系统参数初始化
//----------------------------
//生命体数量与轨迹长度
Unit=40;Path=5;
//生命体速度上下限
v0=2;vM=4;
//生命体加速度变化范围
Kr=0.1;Kv=0.1*(vM-v0);
//生命体运动范围
x0=0;xM=document.documentElement.clientWidth;
y0=0;yM=document.documentElement.clientHeight;
//生命体出生地(巢穴)
xi0=x0+(xM-x0)*Math.random();
yi0=y0+(yM-y0)*Math.random();
str0='<div class="ant" style="left:'+xi0+';top:'+yi0+';"></div>';
//食物所在地
xf=x0+(xM-x0)*Math.random();
yf=y0+(yM-y0)*Math.random();
//气味感知范围
R_2=5*5;
//============================
var r=new Array();
var v=new Array();
var dr=new Array();
var dv=new Array();
var x=new Array();
var y=new Array();
var life=new Array();
//单击暂停
var xi0,yi0,xf,yf;
var Time0,str0;
window.status='pause';
function document.onclick(){
if(window.status=='pause'){
window.status=0;
nest.style.left=xi0;
nest.style.top=yi0;
food.style.left=xf;
food.style.top=yf;
//测试初始化时间用
Time0=(new Date()).getTime();
init(0);
}else{
window.status='pause';
}
}
//窗口大小调整后刷新页面以调整系统参数
function window.onresize(){
// window.location.href=document.location;
}
//初始化函数
function init(i){
if(window.status!='pause'&&i<Unit){
if(!life[i]){
document.body.appendChild(life[i]=document.createElement(str0));
x[i]=xi0;
y[i]=yi0;
r[i]=Math.random();
v[i]=1/Math.random();
dr[i]=Kr*Math.random();
dv[i]=Kv*Math.random();
}
Move(i);
window.status=i+1;
setTimeout('init('+(i+1)+')',i);
// }else{
// alert('生成耗时:'+((new Date()).getTime()-Time0)+'ms');
}
}
//运动函数
Total=Unit*Path;
P2=2*Math.PI;
function Move(i){
if(window.status!='pause'){
k=i%Unit;
X=x[k];
Y=y[k];
R=r[k];
V=v[k];
if(!life[i]){
str='<div class="ant" style="left:'+X+';top:'+Y+';"></div>';
document.body.appendChild(life[i]=document.createElement(str));
}
obj=life[i];
R+=dr[k]*(2*Math.random()-1);
V+=dv[k]*(2*Math.random()-1);
X+=Math.sin(P2*R)*V;
Y+=Math.cos(P2*R)*V;
//遇到食物原路返回并减小角度变化
distance=(X-xf)*(X-xf)+(Y-yf)*(Y-yf);
if(distance<R_2){
R+=0.5;
r[i]/=2;
v[i]*=2;
}
distance=(X-xi0)*(X-xi0)+(Y-yi0)*(Y-yi0);
if(distance<R_2){
R+=0.5;
r[i]/=2;
v[i]*=2;
}
/*----------------------------------
/*================================*/
//碰撞边界反弹
R=(X<x0||X>xM)?-R:R;
R=(Y<y0||Y>yM)?0.5-R:R;
X=x[k]+Math.sin(P2*R)*V;
Y=y[k]+Math.cos(P2*R)*V;
/*================================*/
//溢出边界重生(类似流星效果)
if(X<x0||X>xM||Y<y0||Y>yM){
X=xi0;
Y=yi0;
}
/*----------------------------------
/*================================*/
//边界限制
x[k]=X=(X<x0)?x0:(X>xM)?xM-2:X;
y[k]=Y=(Y<y0)?y0:(Y>yM)?yM-2:Y;
r[k]=R>1?R-1:R<0?R+1:R;
v[k]=V=(V<v0)?v0:((V<vM)?V:vM);
/*================================*/
obj.style.left=x[k]=X;
obj.style.top=y[k]=Y;
setTimeout('Move('+(i+Unit)%Total+')',Unit);
}
}
//根据浏览器自动加载动画
switch(navigator.appName.toLowerCase()){
case "netscape":
window.addEventListener("load",document.onclick,false);
break;
case "microsoft internet explorer":
default:
window.attachEvent("onload",document.onclick);
break;
}
</script>
</head>
<body scroll="no">
<div id="food" class="food"></div>
<div id="nest" class="nest"></div>
</body>
</html>
分享到:
相关推荐
蚁群算法就是模拟蚂蚁寻找食物的过程,它能够求出从原点出发,经过若干个给定的需求点,最终返回原点的最短路径。这也就是著名的旅行商问题(Traveling Saleman Problem,TSP)。 本文使用蚁群算法来解决分布式环境下...
蚁群算法(Ant Colony Optimization, ACO)是一种启发式优化...通过这个JS实现,我们可以学习到如何将生物启发式算法应用于实际问题,理解并掌握蚁群算法的基本原理和实现细节,同时加深对JavaScript编程技巧的运用。
蚁群算法js版,可以直接运行.在屏幕模拟蚁群觅食。 <script type="text/JavaScript"> //============================ //系统参数初始化 //---------------------------- //生命体数量与轨迹长度 Unit=10;Path=...
蚂蚁寻找食物的过程 仅仅只有一种,行为方式在唯一的一种,但唯一能在的群体中,却能有一种独特的行为方式——这些行为都具有它们所构成的素素。...本文使用群算法来解决问题环境下的平均负载率问题。
蚁群算法 蚁群算法由Marco Dorigo于1992年首次提出,并从蚁群找最短路径的现象中受到启发。该算法的特点包括并行性、自组织、鲁棒性、正反馈等,这些特点使得蚁群算法在解决组合优化问题时表现出色。 蚁群算法的...
《蚁群算法在旅行商问题中的应用——基于Java和JavaScript》 旅行商问题(Traveling Salesman Problem,TSP)是图论中的一个经典问题,它询问的是:给定一个包含多个城市的图,每个城市之间有距离,一个旅行商如何...
总结来说,基于JavaScript实现的蚁群算法结合了生物学的灵感与编程语言的灵活性,为解决复杂的优化问题提供了新的途径。通过理解和掌握这一算法,开发者能够扩展其在Web开发中的应用范围,解决各种实际问题。
基于python+tkinter+蚁群算法求解中国省会城市tsp问题及可视化系统源码(毕设作品).zip基于python+tkinter+蚁群算法求解中国省会城市tsp问题及可视化系统源码(毕设作品).zip基于python+tkinter+蚁群算法求解中国省会...
毕设项目多目标优化-基于Vue+Django开发的前后端配送路线优化系统源码(蚁群算法+遗传算法)+代码注释.zip 【资源介绍】 简介:配送路线优化系统,Web端项目 算法:遗传算法+蚁群算法+多目标优化 技术栈:前端采用Vue-...
在这个压缩包中,我们可以看到几个重要的主题:神经网络、遗传算法、模拟退火算法、粒子群算法以及蚁群算法。这些都属于智能计算和优化算法的范畴,它们在解决复杂问题、模式识别和决策优化等方面发挥着重要作用。 ...
该项目为基于TypeScript实现的蚁群算法函数测试,集成了Vue、HTML、CSS前端技术,包含277个文件,涵盖254个TypeScript源文件...该源码适用于需要蚁群算法应用场景的软件开发,提供了一种高效且易于集成的算法实现方案。
在计算机科学和运筹学领域,优化问题是一个重要的研究方向,而蚁群算法(Ant Colony Optimization, ACO)作为一种高效的全局优化方法,受到广泛关注。本项目名为"基于Web的Ant Colony - ACO 优化算法",旨在将ACO...
在这个项目中,主要采用了两种经典的优化算法——遗传算法和蚁群算法,并结合了多目标优化技术,以达成更优的配送策略。 遗传算法是一种模拟自然选择和遗传机制的全局优化方法,它通过模拟生物进化过程中的选择、...
【蚁群算法】是一种模拟自然界蚂蚁寻找路径的优化算法,常用于解决组合优化问题,如旅行商问题。在蚁群算法中,每只“蚂蚁”代表一条可能的解,通过在解空间中移动并留下“信息素”来探索最优路径。信息素的浓度会...
**蚂蚁群优化算法(Ant Colony Optimization, ACO)**是一种基于生物群体行为的全局优化方法,源于对蚂蚁寻找食物路径的行为观察。在这个过程中,蚂蚁通过在路径上释放信息素来沟通,形成了一种高效的寻路策略。ACO...
前端:Vue/JSP/React/HTML+JS+CSS/ASP 后台框架代码:java/c/c++/php/VB/lun/Andorid/Python 开发环境:idea 数据库:MySql(建议用 5.7,8.0 有时候会有坑) 部署环境:Tomcat(建议用 7.x 或者 8.x b版本),maven...
蚁群算法(Ant Colony Optimization, ACO)是一种模拟自然界中蚂蚁行为的优化算法,由Marco Dorigo在1992年提出。该算法主要应用于解决组合优化问题,如旅行商问题、网络路由问题等。在这些问题中,ACO通过模拟蚂蚁...
这个项目专注于利用蚁群算法和碰撞检测技术,以实现机械臂在遇到障碍时能够有效地规划出安全且平滑的运动路径。以下是对这些关键知识点的详细阐述: 1. **机械臂避障**:机械臂避障是指在复杂环境中,使机械臂能够...