A题
随着三年新冠疫情结束后第一个五一假期的到来,许多人选择出门旅游,在有限的几天假期怎样玩好就是一件值得考虑的事。小明是一位旅游爱好者,想在五一期间到宁夏一些著名景点旅游。由于跟着旅游团会受到若干限制,所以他(她)打算自己作为背包客旅游。在出游之前他(她)选择了宁夏五个市的旅游景点,作为五一的旅游目的地,分别如下:
银川(沙湖,西夏王陵,贺兰山岩画,黄沙古渡旅游区)石嘴山(北武当生态旅游区)中卫(沙坡头,寺口子)吴忠(青铜峡黄河大峡谷,哈巴胡生态旅游区)固原(须弥山石窟,六盘山,老龙潭,火石寨)
由于旅游时会受到多种实际因素影响,如:出行方式,游览景点的数目,旅游的时间,旅游者的经济状况等。请查阅景点分布,交通,景点费用等相关资料。考虑以下三个问题
一.为小明设计合适的旅游线路,在不受时间约束的情况下,使旅客花最少的钱游览全部的景点。
二.如果旅游费用不限,旅客想游览十个景点,那么需要设计一个最优的路线,使旅客花费最少的时间。
三.如果旅客受到旅游费用的限制,只带来2500元,他(她)想游览尽可能多的景点,要想满足该条件,我们必须设计一条合适的路线,使旅客满意。
先收集各个景区的门票价格,以百度地图上的信息为例
再收集景点之间旅行费用,假设只靠打车这一种方式,以滴滴上的价格为例
在以百度上自驾方式的预估时间为例,收集数据,制成表格
第一问
选用蚁群算法进行智能计算,
因为所有的地方都会去一遍,因此门票费和路径选择无关,适应值函数只与车费有关
整个算法的目的让适应值最小
对代码的距离矩阵计算部分进行改动:
1.改为车费的数据集
结果如下:坐标不参与运算,可能与给的图片不太像
Best:2505Best_path [[105.00577637.478011] [105.45914 37.299328] [105.99777736.281923] [105.77210136.104501] [106.23945135.688087] [106.34553435.400119] [107.09039237.746578] [105.99368837.879801] [106.02583638.448286] [106.02725938.754811] [106.36821238.807523] [106.36301539.043122] [106.55491438.572183]]
第二问
第二问要求在所有景点里选出十个,可以看作是一个特征选择问题
直接用计算智能应用于特征选择的粒子群算法和代码即可
在代码的选择特征处进行改动:
1.当景点数量不足10时,随机加上一个景点(循环此步)
2. 当景点数量超过10时,随机枪毙一个景点(循环此步)
在适应值函数也进行改动:
1.改为第一问的蚁群算法求解的最佳路径
2. 蚁群算法的距离矩阵计算改为时间花费数据
这个时间仅仅时路程上花的时间,并没有考虑每个景点内需要多少时间
Best:1582 [[106.36301539.043122] [106.36821238.807523] [106.55491438.572183] [106.02583638.448286] [106.02725938.754811] [105.99368837.879801] [105.45914 37.299328] [105.99777736.281923] [106.34553435.400119] [106.23945135.688087]] index: [ 01345679 10 12]##选择景点
第三问
第三问要求在有限的经费内选择尽可能多的景点
仍然可以选择智能计算在特征选择上的算法和代码
这一问可以选择DE差分进化算法
依旧需要对代码进行一些更改
路径部分进行更改:
- 二值化以后,选择第一问蚁群算法先计算最少花费
- 如果最少花费大于2500,随机枪毙一个景点(循环此步)
适应值函数更改:
- 更改为节点数目,因为代码求的是最小值,所以还要加个负号
蚁群算法更改:
- 距离矩阵改为车费数据
- 路径长度还需要加上选择的景点的门票
Best:2462 [[105.99777736.281923] [105.77210136.104501] [106.23945135.688087] [106.34553435.400119] [105.45914 37.299328] [105.99368837.879801] [106.02583638.448286] [106.02725938.754811] [106.36301539.043122]]index: [ 124679 10 11 12]最多能去9个地方
这是代码