第一范文网 - 专业文章范例文档资料分享平台

公共自行车调度问题-数学建模论文

来源:用户分享 时间:2025/6/8 23:24:10 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

s=0; for j=1:1:53 if z(i,j)~=0

s=s+1/z(i,j);%输出概率的K end end s=1/s; K=[K s]; end

3分块距离矩阵计算: ○

distanceMb=zeros(20); for i=1:1:20 k=1; for j=1:1:20 if i~=j

distanceMb(i,k)=abs(x1(Mb(i),1)-x1(Mb(j),1))+abs(x1(Mb(i),2)-x1(Mb(j),2)); end k=k+1; end end

4启发式算法代码: ○

#include #include #include #include

#define ZD 20//定义站点数 ZD = Zhan Dian #define DE 3//搜索深度 using namespace std;

int num[ZD];//各个站点相应的多余、缺少的车辆的数目

- 31 -

int route[10*ZD]; //车行走的路径

bool IsEnd(int num[]){//判断是否所有的车都已经调度完毕 }

int Pathfinding(int first,int vol,int depth){//寻路 找到下一个路径最优的站点

int i;

for(i=0; i

if(num[i]!=0) return false; else return true;}

double distance[ZD][ZD]; //各个站点之间的距离 if(depth <=0)

return -1;

int temp_distance[ZD]; int i,j,k;

for(i=0;i

temp_distance[i] = i;//存储站点号码

for(i=0;i

for(j=i;j

if(distance[first][temp_distance[i]]>distance[first][temp_distance[j]]){ }

k = temp_distance[i];

temp_distance[i] = temp_distance[j]; temp_distance[j] = k;

}//排序 保留的是距离从小到大的站点号码

int bound = DE;//设置边界 int temp_site[DE]; int next_site[DE]; j=0;

for(i=0;i

if(vol + num[temp_distance[i]] >= 0 && num[temp_distance[i]]!=0 &&

- 32 -

temp_distance[i]!=first){

if(vol>=50 && num[temp_distance[i]] >0)

continue;

temp_site[j] = temp_distance[i]; next_site[j]

=

Pathfinding(temp_site[j],vol+num[temp_distance[i]],depth-1);

if(bound<=1)

break;

bound--; j++;

}//从i+1的原因是,第一个点是first点

}//搜索first节点的下一个和下下个节点

int change[ZD];//搬运车的总数 int lenth[ZD];//开车的距离

for(i=0;i

change[i]=0; lenth[i]=0; int voll = vol; if(temp_site[i]<=0)

break;

if(num[temp_site[i]]<0){ }

else if(50-voll > num[temp_site[i]]){ }

- 33 -

change[i] += abs(num[temp_site[i]]); voll += num[temp_site[i]];

change[i] += num[temp_site[i]]; voll += num[temp_site[i]];

else{ }

lenth[i] += distance[first][temp_site[i]];

change[i] += num[temp_site[i]] - 50 + vol; voll = 50;

}

if(next_site[i]>0){ }

else if(50- voll > num[next_site[i]]){ } else{ } }

lenth[i] += distance[first][next_site[i]]; change[i] += num[next_site[i]] - 50 + vol; voll = 50;

change[i] += num[next_site[i]]; voll += num[next_site[i]]; if(num[next_site[i]]<0){

change[i] += abs(num[next_site[i]]); voll += num[next_site[i]];

k=0;

double temp=0; for(i=0;i

- 34 -

if(change[i]>0 && lenth[i]>0 && (double)change[i]/lenth[i]>temp){ }

temp = (double)change[i]/lenth[i]; k = i;

}

return temp_site[k];

int main(){

ifstream fileinput;

fileinput.open(\char v[ZD]; for (i=0;i

{

fileinput>>num[i];

double distance[ZD][ZD]; int first;//初始站点

int time=0;//路径总共走过的站点数 int i,j;

} cout<

fileinput.close();

fileinput.open(\for (i=0;i

fileinput>>distance[i][j];cout<

cout<<\请输入车站起点:\cin>>first; first=first-1;

route[time] = first;//设置出发点 int vol;//注意点 if(num[first]<0) vol=0; else vol=num[first];

while(!IsEnd(num)){//车没搬完,一直搜索

time++;

- 35 -

搜索更多关于: 公共自行车调度问题-数学建模论文 的文档
公共自行车调度问题-数学建模论文.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c5c7o16fpr375cln2zb6v_7.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top