物流中的独立节点路由试算

8 篇文章 0 订阅
1 篇文章 0 订阅

参考

知网 某硕士论文:宅急送路由辅助信息系统的设计与实现

试算逻辑为::

 

a.  根据选择的出发地找到所有从当前出发地发车的资源包括航空、班车和
零担存放到 Map(起名 map1)里备用。 
b.  循环遍历 map1,循环体里再用资源的到达城市作为出发城市继续执行 a
的操作将资源存放到 Map2 里,并且与 map1 里的数据进行拼接 
c.  如果在执行拼接的过程中资源的到达城市跟是界面录入的到达城市相
同,将结果放入 Map(起名 mapResult),否则继续拼接执行 b 的操作。  
d.  最多执行 5 次 b 步骤。满足最多中转 4 次的要求,或者也可以按照界面
的要求控制次数。 
e.  对 mapResult 的结果执行过滤,保留优质的路由。 
f.  最终将剩下的路由保存到系统。

 

具体代码实现如下:

ssm下的测试代码

测试方法代码

@Test
	public void testMapper() throws Exception {
		
		List<Routelinebill> findByStartCity = routelinebillMapper.findByStartCity("北京");

		
		
		Routebill routebill = new Routebill();
		routebill.setStartcity("北京市");
		routebill.setEndcity("湛江市");
		
		List<Routebill> results=new ArrayList<>();
		
		trial(findByStartCity, routebill, results);
		
		for (Iterator iterator = results.iterator(); iterator.hasNext();) {
			Routebill routebill1 = (Routebill) iterator.next();
			System.out.println(routebill1.toString());
		}
		
		
	}
	

试算的实现,一个迭代的算法

	public  void  trial(List<Routelinebill> startline,Routebill result,List<Routebill> results){
		for (Iterator iterator = startline.iterator(); iterator.hasNext();) {
			Routebill result2 = (Routebill)result.clone();
			Routelinebill routelinebill = (Routelinebill) iterator.next();
			routelinebill.setId(UUIDUtils.getId());
			
			//保存路由起始时间
			if (routelinebill.getStartstation().equals(result2.getStartcity())) {
				result2.setStarttime(routelinebill.getStarttime());
				result2.setName(result2.getStartcity()+"-"+result2.getEndcity()+"(起始:"+routelinebill.getLinename()+")");
				//每一次刚开始循环都清空
				
			}
			
			result2.setRouteprice(routelinebill.getLineprice()+result2.getRouteprice());
			result2.setMileage(routelinebill.getMileage()+result2.getMileage());
			result2.setSumDuration(routelinebill.getDuration()+result2.getSumDuration());
			result2.getRoutelinebills().add(routelinebill);
			
			//如果终点一致就存起来继续下一个遍历
			if (routelinebill.getEndstation().equals(result2.getEndcity())) {
				result2.setEndtime(routelinebill.getEndtime());
				result2.getTimelimit();
				result2.setId(UUIDUtils.getId());
				results.add(result2);
				continue;
			}
			
			
			//不一致就存到中转站中
			if (result2.getTransfernode1()==null) {
				result2.setTransfernode1(routelinebill.getEndstation());
			
			}else if (result2.getTransfernode2()==null) {
				result2.setTransfernode2(routelinebill.getEndstation());
	
			}else if (result2.getTransfernode3()==null) {
				result2.setTransfernode3(routelinebill.getEndstation());
			
			}else if (result2.getTransfernode4()==null) {
				result2.setTransfernode4(routelinebill.getEndstation());
			
			}else{
				continue;
			}
			
		
			
			List<Routelinebill> findByStartCity = routelinebillService.findByStartCity(routelinebill.getEndstation());
			if (findByStartCity == null) {
				continue;
			}
			
			trial(findByStartCity, result2, results);
		}
	}
	
	

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值