当前位置: 首页 > news >正文

SEO网站建设入驻程流西安手机网站开发

SEO网站建设入驻程流,西安手机网站开发,工商局网站建设方案,推广手段基于python语言#xff0c;采用经典自适应大邻域算法#xff08;ALNS#xff09;对 带硬时间窗的需求拆分车辆路径规划问题#xff08;SDVRPTW#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4… 基于python语言采用经典自适应大邻域算法ALNS对 带硬时间窗的需求拆分车辆路径规划问题SDVRPTW 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4. 代码片段参考 往期优质资源 经过一年多的创作目前已经成熟的代码列举如下如有需求可私信联系表明需要的 **问题与算法**原创不宜有偿获取。 VRP问题GAACOALNSDEDPSOQDPSOTSSACVRP√√√√√√√√VRPTW√√√√√√√√MDVRP√√√√√√√√MDHVRP√√√√√√√√MDHVRPTW√√√√√√√√SDVRP√√√√√√√√SDVRPTW√√√ 1. 适用场景 求解SDVRPTW车辆类型单一车辆容量小于部分需求节点需求单一车辆基地带硬时间窗 2. 代码调整 2.1 需求拆分 与SDVRP问题相比SDVRPTW问题不仅允许客户需求大于车辆载重而且考虑了客户节点的时间窗约束。为了使得每个客户的需求得到满足必须派遣一辆或多辆车辆在规定时间窗内对客户进行服务。对于需求节点的拆分这里依然采取先验拆分策略本文采用文献[1]提出的先验分割策略表述如下 120/10/5/1拆分规则 m20 max{ m ∈ Z ∪ { 0 } ∣ 0.20 Q m D i m\in Z^ \cup \{0\} | 0.20Qm D_i m∈Z∪{0}∣0.20QmDi​ }m10 max{ m ∈ Z ∪ { 0 } ∣ 0.10 Q m D i − 0.20 Q m 20 m\in Z^ \cup \{0\} | 0.10Qm D_i-0.20Qm_{20}~ m∈Z∪{0}∣0.10QmDi​−0.20Qm20​  }m5 max{ m ∈ Z ∪ { 0 } ∣ 0.05 Q m D i − 0.20 Q m 20 − 0.10 Q m 10 m\in Z^ \cup \{0\} | 0.05Qm D_i-0.20Qm_{20}-0.10Qm_{10} m∈Z∪{0}∣0.05QmDi​−0.20Qm20​−0.10Qm10​ }m1 max{ m ∈ Z ∪ { 0 } ∣ 0.01 Q m D i − 0.20 Q m 20 − 0.10 Q m 10 − 0.05 Q m 5 m\in Z^ \cup \{0\} | 0.01Qm D_i-0.20Qm_{20}-0.10Qm_{10}-0.05Qm_{5} m∈Z∪{0}∣0.01QmDi​−0.20Qm20​−0.10Qm10​−0.05Qm5​ } 225/10/5/1拆分规则 m25 max{ m ∈ Z ∪ { 0 } ∣ 0.25 Q m D i m\in Z^ \cup \{0\} | 0.25Qm D_i m∈Z∪{0}∣0.25QmDi​ }m10 max{ m ∈ Z ∪ { 0 } ∣ 0.10 Q m D i − 0.25 Q m 25 m\in Z^ \cup \{0\} | 0.10Qm D_i-0.25Qm_{25}~ m∈Z∪{0}∣0.10QmDi​−0.25Qm25​  }m5 max{ m ∈ Z ∪ { 0 } ∣ 0.05 Q m D i − 0.25 Q m 25 − 0.10 Q m 10 m\in Z^ \cup \{0\} | 0.05Qm D_i-0.25Qm_{25}-0.10Qm_{10} m∈Z∪{0}∣0.05QmDi​−0.25Qm25​−0.10Qm10​ }m1 max{ m ∈ Z ∪ { 0 } ∣ 0.01 Q m D i − 0.25 Q m 25 − 0.10 Q m 10 − 0.05 Q m 5 m\in Z^ \cup \{0\} | 0.01Qm D_i-0.25Qm_{25}-0.10Qm_{10}-0.05Qm_{5} m∈Z∪{0}∣0.01QmDi​−0.25Qm25​−0.10Qm10​−0.05Qm5​ } 在实现过程中对于需求超过车辆容量的客户必须进行需求拆分而对于未超过车辆容量的客户可以拆分也可以不拆分这里设置了参数比例进行限制。 2.2 需求拆分后的服务时长取值问题 节点的服务时长会影响车辆的行进时间进而会影响与节点时间窗的匹配问题。一般来说节点的服务时长与需求量成正比关系在进行节点需求拆分后新节点的需求量降低其服务时长理应也降低。但从标准数据集来看各需求节点的服务时长均采用同一数值。因此本文在代码实现过程中也采用固定值不考虑新节点服务时长的变化。当然如有需要也可以设置单位货物的服务时长根据拆分后节点的具体需求量设置相应的服务时长。 3. 求解结果 1收敛曲线 2车辆路径 3输出内容 4. 代码片段 1数据结构 import math import random import numpy as np import copy import xlsxwriter import matplotlib.pyplot as plt import csv import time # 数据结构解 class Sol():def __init__(self):self.objNone # 目标函数值self.node_no_seq[] # 解的编码self.route_list[] # 解的解码self.timetable_list[] # 车辆访问各点的时间self.route_distance_list None # 数据结构需求节点 class Node():def __init__(self):self.id0 # 节点idself.x_coord0 # 节点平面横坐标self.y_coord0 # 节点平面纵坐标self.demand0 # 节点需求self.start_time0 # 节点开始服务时间self.end_time1440 # 节点结束服务时间self.service_time0 # 单次服务时长self.vehicle_speed 0 # 行驶速度 # 数据结构车场节点 class Depot():def __init__(self):self.id0 # 节点idself.x_coord0 # 节点平面横坐标self.y_coord0 # 节点平面纵坐标self.start_time0 # 节点开始服务时间self.end_time1440 # 节点结束服务时间self.v_speed 0 # 行驶速度self.v_cap 80 # 车辆容量 # 数据结构全局参数 class Model():def __init__(self):self.best_solNone # 全局最优解self.sol_list[] # 解的集合self.demand_dict {} # 需求节点集合self.depot None # 车场节点集合self.demand_id_list [] # 需求节点id集合self.distance_matrix {} # 距离矩阵self.time_matrix {} # 时间矩阵self.number_of_demands 0 # 需求点数量self.demand_id_list_ [] # 经先验需求分割后的节点集合self.demand_dict_ {} # 需求分割后的节点需求集合self.distance_matrix_ {} # 原始节点id间的距离矩阵self.time_matrix_ {} # 原始节点id间的时间矩阵self.mapping {} # 需求分割前后的节点对应关系self.split_rate 0.5 # 控制需求分割的比例需求超出车辆容量的除外self.rand_d_max 0.4 # 随机破坏最大破坏比例self.rand_d_min 0.1 # 随机破坏最小破坏比例self.worst_d_min 5 # 最坏值破坏最少破坏数量self.worst_d_max 20 # 最坏值破坏最多破坏数量self.regret_n 5 # 后悔值破坏数量self.r1 30 # 一等得分值self.r2 18 # 二等得分值self.r3 12 # 三等得分值self.rho 0.6 # 权重衰减比例self.d_weight np.ones(2) * 10 # 破坏算子权重self.d_select np.zeros(2) # 破坏算子选择次数self.d_score np.zeros(2) # 破坏算子得分self.d_history_select np.zeros(2) # 破坏算子累计选择次数self.d_history_score np.zeros(2) # 破坏算子累计得分self.r_weight np.ones(3) * 10 # 修复算子权重self.r_select np.zeros(3) # 修复算子选择次数self.r_score np.zeros(3) # 修复算子得分self.r_history_select np.zeros(3) # 修复算子累计选择次数self.r_history_score np.zeros(3) # 修复算子累计得分2距离矩阵 # 读取csv文件 def readCSVFile(demand_file,depot_file,model):with open(demand_file,r) as f:demand_readercsv.DictReader(f)for row in demand_reader:node Node()node.id int(row[id])node.x_coord float(row[x_coord])node.y_coord float(row[y_coord])node.demand float(row[demand])node.start_timefloat(row[start_time])node.end_timefloat(row[end_time])node.service_timefloat(row[service_time])model.demand_dict[node.id] nodemodel.demand_id_list.append(node.id)model.number_of_demandslen(model.demand_id_list)with open(depot_file, r) as f:depot_reader csv.DictReader(f)for row in depot_reader:depot Depot()depot.id row[id]depot.x_coord float(row[x_coord])depot.y_coord float(row[y_coord])depot.start_timefloat(row[start_time])depot.end_timefloat(row[end_time])depot.v_speed float(row[v_speed])depot.v_cap float(row[v_cap])model.depot depot # 初始化参数计算距离矩阵时间矩阵 def calDistanceTimeMatrix(model):for i in range(len(model.demand_id_list)):from_node_id model.demand_id_list[i]for j in range(len(model.demand_id_list)):to_node_id model.demand_id_list[j]dist math.sqrt((model.demand_dict[from_node_id].x_coord - model.demand_dict[to_node_id].x_coord) ** 2 (model.demand_dict[from_node_id].y_coord - model.demand_dict[to_node_id].y_coord) ** 2)model.distance_matrix[from_node_id, to_node_id] distmodel.time_matrix[from_node_id,to_node_id] math.ceil(dist/model.depot.v_speed)dist math.sqrt((model.demand_dict[from_node_id].x_coord - model.depot.x_coord) ** 2 (model.demand_dict[from_node_id].y_coord - model.depot.y_coord) ** 2)model.distance_matrix[from_node_id, model.depot.id] distmodel.distance_matrix[model.depot.id, from_node_id] distmodel.time_matrix[from_node_id,model.depot.id] math.ceil(dist/model.depot.v_speed)model.time_matrix[model.depot.id,from_node_id] math.ceil(dist/model.depot.v_speed)3邻域搜索 # 随机破坏 def createRandomDestory(model):drandom.uniform(model.rand_d_min,model.rand_d_max)return random.sample(model.demand_id_list_,int(d*(len(model.demand_id_list_)-1)))# 随机修复 def createRandomRepair(remove_list,model,sol):unassigned_node_no_seq remove_listassigned_node_no_seq [node_no for node_no in sol.node_no_seq if node_no not in remove_list]# insertfor node_no in unassigned_node_no_seq:indexrandom.randint(0,len(assigned_node_no_seq)-1)assigned_node_no_seq.insert(index,node_no)new_solSol()new_sol.node_no_seqcopy.deepcopy(assigned_node_no_seq)new_sol.timetable_list, new_sol.obj, new_sol.route_distance,new_sol.route_listcalObj(assigned_node_no_seq,model)return new_sol参考 【1】 A novel approach to solve the split delivery vehicle routing problem
http://www.zqtcl.cn/news/102766/

相关文章:

  • 网站建设前准备工作手机上传视频网站开发
  • 海口网站建设是什么意思wordpress推广码
  • 杭州市住房和城乡建设厅网站海南网站建设设计
  • 网站建设平台一般多少钱wordpress 本地上传服务器
  • 怎么给网站命名男女做羞羞羞的网站
  • 北京响应式网站建设公司信息流推广方式
  • 一级a做爰片迅雷网站微分销系统定制开发
  • 山东网站建设工作室网页设计全部代码
  • 用c 做网站可以吗注册网站什么要求
  • 销售网站排名销售型网站模板
  • wordpress 汽车宁波seo整体优化
  • 网站建设公司在哪里宣传c2c旅游电子商务平台
  • 网站查看空间商网站不提交表单
  • 空间怎么上传网站企业所得税怎么算公式
  • 网站建设wix建筑公司网站设计思路
  • 门户型网站都有哪些网页制作的视频教程
  • 虚拟主机 多个网站没有备案的网站
  • 河南网站建设推广公司汕尾网站建设
  • 海南省建设网站首页公司网站图片传不上去
  • 中国建设银行网站评价广告投放都有哪些平台
  • 网站系统免费wordpress附件不在数据库
  • 网站开发国外研究状况电商推广是什么意思
  • 太原建高铁站wordpress分级菜单显示
  • 工信部网站备案变更运营一个app大概多少钱
  • 杭州网站建设公司哪家好网站建设 中国联盟网
  • 成都手机网站建设价格网站安全检测软件
  • 长沙申请域名网站备案找个做游戏的视频网站
  • 网站平台开发与应用面试西安seo优化顾问
  • 苏州网站制作及推广中国优秀的企业网站
  • 网站开发语言太老东莞哪家公司做网站比较好