【进阶二】Python实现VRPTW常见求解算法——模拟退火(SA)

路径规划问题的遗传算法实现(python代码) 遗传算法是模拟达尔文生物进化论的自然选择和机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。该算法通过数学的方式,利用计算机仿真运算,将问题的求解过程转换成类似生物进化中的染色体基因的交叉、变异等过程。 阅读详情

基于python语言,实现经典模拟退火算法(SA)对带有时间窗的车辆路径规划问题( VRPTW )进行求解。

往期优质资源

1. 适用场景

  • VRPTW
  • 车辆类型单一
  • 车辆容量不小于需求节点最大需求
  • 车辆路径长度或运行时间无限制
  • 需求节点服务成本满足三角不等式
  • 节点时间窗至少满足车辆路径只包含一个需求节点的情况
  • 单一车辆基地
  • 各车场车辆总数满足实际需求

2. 求解效果

(1)收敛曲线

在这里插入图片描述

(2)车辆路径
在这里插入图片描述

3. 代码分析

应用SA算法求解MDVRPTW时保留了已有代码的架构与思路,为能够求解带有时间窗的(多车场)车辆路径规划问题,这里参考既有文献对路径分割算法进行了改进("splitRoutes"函数),在分割车辆路径时不仅考虑了车辆容量限制,还考虑了节点的时间窗约束,以此使得分割后的路径可行。在此改进下继承了大量原有代码,降低了代码改进量。

4. 数据格式

以csv文件储存数据,其中demand.csv文件记录需求节点数据,共包含需求节点id,需求节点横坐标,需求节点纵坐标,需求量;depot.csv文件记录车场节点数据,共包含车场id,车场横坐标,车场纵坐标,车队数量。需要注意的是:需求节点id应为整数,车场节点id任意,但不可与需求节点id重复。 可参考github主页相关文件。

5. 分步实现

(1)数据结构
定义Sol()类,Node()类,Model()类,其属性如下表:

  • Sol()类,表示一个可行解
属性描述
obj优化目标值
node_id_list需求节点id有序排列集合
cost_of_distance距离成本
cost_of_time时间成本
route_list车辆路径集合,对应MDVRPTW的解
timetable_list车辆节点访问时间集合,对应MDVRPTW的解
  • Node()类,表示一个网络节点
属性描述
id物理节点id,需唯一
x_coord物理节点x坐标
y_coord物理节点y坐标
demand物理节点需求
depot_capacity车辆基地车队规模
start_time最早开始服务(被服务)时间
end_time最晚结束服务(被服务)时间
service_time需求节点服务时间
  • Model()类,存储算法参数
属性描述
best_sol全局最优解,值类型为Sol()
demand_dict需求节点集合(字典),值类型为Node()
depot_dict车场节点集合(字典),值类型为Node()
depot_id_list车场节点id集合
demand_id_list需求节点id集合
distance_matrix节点距离矩阵
time_matrix节点旅行时间矩阵
number_of_demands需求节点数量
opt_type优化目标类型,0:最小旅行距离,1:最小时间成本
vehicle_cap车辆容量
vehicle_speed车辆行驶速度,用于计算旅行时间

(2)文件读取

def readCSVFile(demand_file,depot_file,model):
    with open(demand_file,'r') as f:
        demand_reader=csv.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_time=float(row['start_time'])
            node.end_time=float(row['end_time'])
            node.service_time=float(row['service_time'])
            model.demand_dict[node.id] = node
            model.demand_id_list.append(node.id)
        model.number_of_demands=len(model.demand_id_list)

    with open(depot_file, 'r') as f:
        depot_reader = csv.DictReader(f)
        for row in depot_reader:
            node = Node()
            node.id = row['id']
            node.x_coord = float(row['x_coord'])
            node.y_coord = float(row['y_coord'])
            node.depot_capacity = float(row['capacity'])
            node.start_time=float(row['start_time'])
            node.end_time=float(row['end_time'])
            model.depot_dict[node.id] = node
            model.depot_id_list.append(node.id)

(3)计算距离&时间矩阵

def calDistanceTimeMatrix(model):
    for i in range(len(model.demand_id_list)):
        from_node_id = model.demand_id_list[i]
        for j in range(i + 1, 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] = dist
            model.distance_matrix[to_node_id, from_node_id] = dist
            model.time_matrix[from_node_id,to_node_id] = math.ceil(dist/model.vehicle_speed)
            model.time_matrix[to_node_id,from_node_id] = math.ceil(dist/model.vehicle_speed)
        for _, depot in model.depot_dict.items():
            dist = math.sqrt((model.demand_dict[from_node_id].x_coord - depot.x_coord) ** 2
                             + (model.demand_dict[from_node_id].y_coord - depot.y_coord) ** 2)
            model.distance_matrix[from_node_id, depot.id] = dist
            model.distance_matrix[depot.id, from_node_id] = dist
            model.time_matrix[from_node_id,depot.id] = math.ceil(dist/model.vehicle_speed)
            model.time_matrix[depot.id,from_node_id] = math.ceil(dist/model.vehicle_speed)

(4)目标值计算
适应度计算依赖" splitRoutes "函数对有序节点序列行解分割得到车辆行驶路线,同时在得到各车辆形式路线后在满足车场车队规模条件下分配最近车场,之后调用 " calTravelCost "函数确定车辆访问各路径节点的到达和离开时间点,并计算旅行距离成本和旅行时间成本。


def calTravelCost(route_list,model):
    timetable_list=[]
    cost_of_distance=0
    cost_of_time=0
    for route in route_list:
        timetable=[]
        for i in range(len(route)):
            if i == 0:
                depot_id=route[i]
                next_node_id=route[i+1]
                travel_time=model.time_matrix[depot_id,next_node_id]
                departure=max(0,model.demand_dict[next_node_id].start_time-travel_time)
                timetable.append((departure,departure))
            elif 1<= i <= len(route)-2:
                last_node_id=route[i-1]
                current_node_id=route[i]
                current_node = model.demand_dict[current_node_id]
                travel_time=model.time_matrix[last_node_id,current_node_id]
                arrival=max(timetable[-1][1]+travel_time,current_node.start_time)
                departure=arrival+current_node.service_time
                timetable.append((arrival,departure))
                cost_of_distance = cost_of_distance + model.distance_matrix[last_node_id,current_node_id]
                cost_of_time += model.time_matrix[last_node_id,current_node_id] + current_node.service_time\
                                +max(current_node.start_time-timetable[-1][1]+travel_time,0)
            else:
                last_node_id = route[i - 1]
                depot_id=route[i]
                travel_time = model.time_matrix[last_node_id,depot_id]
                departure = timetable[-1][1]+travel_time
                timetable.append((departure,departure))
                cost_of_distance +=model.distance_matrix[last_node_id,depot_id]
                cost_of_time+=model.time_matrix[last_node_id,depot_id]
        timetable_list.append(timetable)
    return timetable_list,cost_of_time,cost_of_distance

def calObj(sol,model):

    node_id_list=copy.deepcopy(sol.node_id_list)
    num_vehicle, sol.route_list = splitRoutes(node_id_list, model)
    # travel cost
    sol.timetable_list,sol.cost_of_time,sol.cost_of_distance =calTravelCost(sol.route_list,model)
    if model.opt_type == 0:
        sol.obj=sol.cost_of_distance
    else:
        sol.obj=sol.cost_of_time

(5)初始解生成

def genInitialSol(node_id_list):
    node_id_list=copy.deepcopy(node_id_list)
    random.seed(0)
    random.shuffle(node_id_list)
    return node_id_list

(6)定义邻域生成算子

def createActions(n):
    action_list=[]
    nswap=n//2
    #第一种算子(Swap):前半段与后半段对应位置一对一交换
    for i in range(nswap):
        action_list.append([1,i,i+nswap])
    #第二中算子(DSwap):前半段与后半段对应位置二对二交换
    for i in range(0,nswap,2):
        action_list.append([2,i,i+nswap])
    #第三种算子(Reverse):指定长度的序列反序
    for i in range(0,n,4):
        action_list.append([3,i,i+3])
    return action_list

(7)生成邻域

def doAction(node_id_list,action):
    node_id_list_=copy.deepcopy(node_id_list)
    if action[0]==1:
        index_1=action[1]
        index_2=action[2]
        node_id_list_[index_1],node_id_list_[index_2]=node_id_list_[index_2],node_id_list_[index_1]
        return node_id_list_
    elif action[0]==2:
        index_1 = action[1]
        index_2 = action[2]
        temporary=[node_id_list_[index_1],node_id_list_[index_1+1]]
        node_id_list_[index_1]=node_id_list_[index_2]
        node_id_list_[index_1+1]=node_id_list_[index_2+1]
        node_id_list_[index_2]=temporary[0]
        node_id_list_[index_2+1]=temporary[1]
        return node_id_list_
    elif action[0]==3:
        index_1=action[1]
        index_2=action[2]
        node_id_list_[index_1:index_2+1]=list(reversed(node_id_list_[index_1:index_2+1]))
        return node_id_list_

(8)绘制收敛曲线

def plotObj(obj_list):
    plt.rcParams['font.sans-serif'] = ['SimHei'] #show chinese
    plt.rcParams['axes.unicode_minus'] = False  # Show minus sign
    plt.plot(np.arange(1,len(obj_list)+1),obj_list)
    plt.xlabel('Iterations')
    plt.ylabel('Obj Value')
    plt.grid()
    plt.xlim(1,len(obj_list)+1)
    plt.show()

(9)绘制车辆路线

def plotRoutes(model):
    for route in model.best_sol.route_list:
        x_coord=[model.depot_dict[route[0]].x_coord]
        y_coord=[model.depot_dict[route[0]].y_coord]
        for node_id in route[1:-1]:
            x_coord.append(model.demand_dict[node_id].x_coord)
            y_coord.append(model.demand_dict[node_id].y_coord)
        x_coord.append(model.depot_dict[route[-1]].x_coord)
        y_coord.append(model.depot_dict[route[-1]].y_coord)
        plt.grid()
        if route[0]=='d1':
            plt.plot(x_coord,y_coord,marker='o',color='black',linewidth=0.5,markersize=5)
        elif route[0]=='d2':
            plt.plot(x_coord,y_coord,marker='o',color='orange',linewidth=0.5,markersize=5)
        else:
            plt.plot(x_coord,y_coord,marker='o',color='b',linewidth=0.5,markersize=5)
    plt.xlabel('x_coord')
    plt.ylabel('y_coord')
    plt.show()

(10)输出结果

def outPut(model):
    work=xlsxwriter.Workbook('result.xlsx')
    worksheet=work.add_worksheet()
    worksheet.write(0, 0, 'cost_of_time')
    worksheet.write(0, 1, 'cost_of_distance')
    worksheet.write(0, 2, 'opt_type')
    worksheet.write(0, 3, 'obj')
    worksheet.write(1,0,model.best_sol.cost_of_time)
    worksheet.write(1,1,model.best_sol.cost_of_distance)
    worksheet.write(1,2,model.opt_type)
    worksheet.write(1,3,model.best_sol.obj)
    worksheet.write(2,0,'vehicleID')
    worksheet.write(2,1,'route')
    worksheet.write(2,2,'timetable')
    for row,route in enumerate(model.best_sol.route_list):
        worksheet.write(row+3,0,'v'+str(row+1))
        r=[str(i)for i in route]
        worksheet.write(row+3,1, '-'.join(r))
        r=[str(i)for i in model.best_sol.timetable_list[row]]
        worksheet.write(row+3,2, '-'.join(r))
    work.close()

(11)主函数

def run(demand_file,depot_file,T0,Tf,deltaT,v_cap,opt_type):
    """
    :param demand_file: 需求节点数据文件
    :param depot_file: 车场节点数据文件
    :param T0: 初始温度
    :param Tf: 终止温度
    :param deltaT: 温度下降步长或下降比例
    :param v_cap: 车辆容量
    :param opt_type: 优化类型:0:最小化旅行距离,1:最小化行驶时间
    :return:
    """
    model=Model()
    model.vehicle_cap=v_cap
    model.opt_type=opt_type
    readCSVFile(demand_file,depot_file,model)
    calDistanceTimeMatrix(model)
    action_list=createActions(len(model.demand_id_list))
    history_best_obj=[]
    sol=Sol()
    sol.node_id_list=genInitialSol(model.demand_id_list)
    calObj(sol,model)
    model.best_sol=copy.deepcopy(sol)
    history_best_obj.append(sol.obj)
    Tk=T0
    nTk=len(action_list)
    while Tk>=Tf:
        for i in range(nTk):
            new_sol = Sol()
            new_sol.node_id_list = doAction(sol.node_id_list, action_list[i])
            calObj(new_sol, model)
            detla_f=new_sol.obj-sol.obj
            if detla_f<0 or math.exp(-detla_f/Tk)>random.random():
                sol=copy.deepcopy(new_sol)
            if sol.obj<model.best_sol.obj:
                model.best_sol=copy.deepcopy(sol)
        if deltaT<1:
            Tk=Tk*deltaT
        else:
            Tk = Tk - deltaT
        history_best_obj.append(model.best_sol.obj)
        print("当前温度:%s,local obj:%s best obj: %s" % (Tk,sol.obj,model.best_sol.obj))
    plotObj(history_best_obj)
    plotRoutes(model)
    outPut(model)

6. 完整代码

有偿,私信

参考

  1. A Genetic Algorithm for The Vehicle Routing Problem with Time Windows
  2. A simple and effective evolutionary algorithm for the vehicle routing problem
用Python搞定物流配送难题:手把手教你用ALNS算法求解带时间窗的VRP(附完整代码) 本文详细介绍了如何使用Python中的自适应大邻域搜索算法(ALNS)解决带时间窗的车辆路径问题(VRPTW)。通过破坏-修复双算子机制,ALNS能高效处理物流配送中的时间窗约束、车辆载重限制等复杂条件。文章包含完整代码实现、数据预处理方法、核心算法设计及电商配送案例解析,帮助开发者快速掌握这一物流优化利器。 阅读详情

相关推荐

元启发式算法实战指南:从原理到工业级VRPTW优化

元启发式算法是一类面向NP-Hard组合优化问题的智能搜索范式,核心在于通过可调控的邻域探索、解质量评估与自适应接受机制,在有限时间内逼近高质量可行解。它不依赖目标函数可导性或精确数学建模,天然适配物流路径规划、生产调度、能源管理等含离散变量、多冲突约束与黑盒目标的实际场景。相比传统整数规划求解器,其技术价值体现在可控计算开销、强业务规则嵌入能力及全程可观测的搜索过程。典型应用如带时间窗的车辆路径问题(VRPTW),可通过自适应大邻域搜索(ALNS)框架实现秒级响应与20%以上运营指标提升。本文聚焦工程落地

weixin_34198762的博客 365

【进阶二】Python实现VRPTW常见求解算法——遗传算法(GA)

基于python语言,实现经典遗传算法(GA)对带有时间窗的车辆路径规划问题(VRPTW)进行求解。

Better.C的博客 9932

遗传算法、模拟退火算法、蚁群算法、粒子群算法实战对比:如何选择最优优化算法

本文深入对比了遗传算法、模拟退火算法、蚁群算法和粒子群算法四大经典优化算法的核心思想、实现机制与适用场景。通过实战代码与场景分析,为工程师提供了清晰的算法选择指南:遗传算法适合复杂编码问题,模拟退火擅长局部精细搜索,蚁群算法是路径规划的首选,而粒子群算法则在连续空间优化中收敛迅速。

weixin_29100927的博客 305

【进阶二】Python实现VRPTW常见求解算法——禁忌搜索(TS)

基于python语言,实现经典禁忌搜索算法(TS)对带有时间窗的车辆路径规划问题(VRPTW )进行求解。

Better.C的博客 4038

基于Python的电动汽车带时间窗路径规划VRPTW解决方案

简介:电动汽车带时间窗路径规划问题(VRPTW)是运筹学中的经典优化问题,旨在在满足客户时间窗口、车辆电池容量和充电需求等约束条件下,优化多辆电动车的配送路线以最小化总行驶距离。本文介绍了一个使用Python实现的VRPTW求解方案,涵盖数据结构设计、搜索算法应用、路径优化、约束处理及结果可视化等内容。该方案结合了遗传算法、A*搜索等智能优化技术,并利用scipy、matplotlib等工具完成建模与结果展示,适用于电动车辆路径规划的实际应用场景。

weixin_42579969的博客 1106

轻量级Python遗传算法工具包:专解带时间窗的车辆调度问题(含30个标准测试案例)

一个即装即用的Python遗传算法实现,专注解决带时间窗约束的车辆路径问题(VRPTW)。内置30个标准化CSV测试文件,覆盖Solomon基准数据集四大类型——C1、C2、R2、RC2,节点规模从200到1000不等,如C101_200、R201_1000、RC208_1000等。所有CSV结构统一,每行包含客户编号、坐标(x/y)、需求量、服务时长、最早与最晚到达时间窗等字段,可直接读入求解。主程序支持灵活调节种群大小、交叉率、变异率和最大迭代次数,运行后输出最优路径分配、总行驶距离、启用车辆数及各条路

c7d8e的博客 171

【进阶六】Python实现SDVRPTW(需求拆分)常见求解算法——禁忌搜索+模拟退火算法(TS+SA)

基于python语言,采用经典禁忌搜索(TS)+模拟退火(SA)对 带硬时间窗的需求拆分车辆路径规划问题(SDVRPTW) 进行求解。

Better.C的博客 1376

Python-遗传算法路径规划及仿真

用于带障碍的路径规划仿真及可视化,引入了geatpy 进化算法作为示例,可引入其它方法对比其目标函数值。

【进阶五】Python实现SDVRP(需求拆分)常见求解算法——禁忌搜索+模拟退火算法(TS+SA)

基于python语言,采用经典禁忌搜索(TS)+模拟退火(SA)对 需求拆分车辆路径规划问题(SDVRP) 进行求解。

Better.C的博客 1431

遗传算法求解VRPTW_可运行_附带说明_matlab

【达摩老生出品,必属精品,亲测校正,质量保证】 资源名:遗传算法求解VRPTW_可运行_附带说明_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及有一定经验的开发人员

GA-VRPTW-python版本遗传算法求解带时间窗的路径规划问题(Python版本)

1、完整代码,可直接运行 ,包运行(如有疑问可私信) 2、擅长领域:路径规划、机器学习、数据爬虫、数据分析处理等 3、该资源有较为详尽的注解,非常方便大家阅读与理解。 GA-VRPTW-python版本 遗传算法求解带时间窗的路径规划问题(Python版本) 该资源适用于研究路径规划的同学,以及研究遗传算法的同学

【改进篇】Python实现VRP常见求解算法——禁忌搜索+模拟退火算法(TS+SA)

基于python语言,实现经典禁忌搜索(TS)+模拟退火(SA)对车辆路径规划问题(CVRP)进行求解, 优化代码结构,改进Split函数。

Better.C的博客 1638

基于遗传算法的具有时间窗的车辆路径问题解决方案的Python实现

基于遗传算法的具有时间窗的车辆路径问题解决方案的Python实现

Python实现模拟退火算法(SA)在TSP问题中的应用

模拟退火算法 模拟退火算法是一种简单高效的优化算法,它的灵感来源于冶炼金属的降温过程,在这个过程中热运动趋于稳定,在优化过程中就是解的收敛。同时,通过在温度高是较大可能接受劣解和温度低时几乎不接受劣解从而在一定程度上避免了陷入局部最优。因此该算法较爬山算法有了明显的突破,下面我们针对TSP问题进行代码编写。(语言:Python) 代码 导入需要的库 from random import* impo...

ZYunfei的博客 2821

Sonatype nexus3 数据迁移及升级3.71+(迁移到H2数据库)

nexus3旧版本OrientDB升级H2,及整体迁移nexus3数据到其它服务器。

葫芦娃 5557

dxf-viewer 查看器

dxf-viewer SDK 的示例,它是一个基于 Three.js 和 Vue3 构建的基于 WebGL 的 BIM 模型查看器。它用于查看 DWG/DXF/PDF 文件。面积测量 - 角度测量 -标记。

qq_25547755的博客 866

python实现客户成套订单配送策略混合遗传算法编码

以如下的论文文献为学习对象:2008年发表在《控制工程》的文献《客户成套订单配送策略混合遗传算法研究》

Logintern09的博客 1153

NHANES数据库的介绍及使用(一)

一、数据库概况 NHANES(National Health and Nutrition Examination Survey)是一项旨在评估美国成人和儿童健康和营养状况的研究计划,计划始于20世纪60年代初期,是一项针对不同人群或健康主题的调查。 1999年该调查成为一项持续计划,涉及各种健康和营养测量,项目每年调查一个全国代表性的样本,约5000人,这些人群位于全国各县,每年对其中15个县进行访问。 NHANES访谈部分包括人口统计学、社会经济学、饮食和健康相关问题。体检部分包括生理测量、实验室检查等

Christina 5万+

数学建模竞赛中车辆路径问题的求解策略:从模型构建到算法实现

车辆路径问题是运筹学与组合优化领域的经典问题,其核心是在满足一系列约束条件下,为多辆车规划访问多个客户点的最优路线,以最小化总成本。该问题属于NP-hard难题,无法在多项式时间内求得精确最优解,因此在实际工程中广泛采用启发式与元启发式算法进行高效求解。其技术价值在于能够显著降低物流配送、应急物资调度、共享出行等场景的运营成本并提升效率。针对带容量和时间窗约束的车辆路径问题,一种行之有效的工程实践策略是采用“构造-优化”两阶段框架:首先利用节约算法快速生成可行初始解,其核心思想是通过合并路径来节约总距离;随

weixin_30561177的博客 303

matlab 用m_map画地形水深图

clear,clc %投影 m_proj('albers equal-area','lat',[5 43],'long',[105 125],'rect','on'); %加载水深文件 [CS,CH]=m_etopo2('contourf',[-7000:500:3000],'edgecolor','none'); %绘制高分辨率陆地和海岸线 m_gshhs_h('patch',[0.1 0.9 ...

qq_44913577的博客 9514

HRNet 【demo 复现过程】

Deep High-Resolution Representation Learning for Human Pose Estimation

qq_45257495的博客 5558

数学建模竞赛实战:从VRP问题到启发式算法求解全流程解析

车辆路径问题(VRP)是运筹学与组合优化领域的经典问题,其核心目标是在满足一系列约束条件下,为多辆车规划访问多个客户点的最优行驶路线,以最小化总成本或最大化效率。该问题属于NP-hard难题,无法在多项式时间内求得精确最优解,因此在实际工程中广泛采用启发式与元启发式算法进行近似求解。这类算法,如模拟退火、遗传算法和禁忌搜索,通过模拟自然过程或利用历史搜索信息,在可接受的时间内寻找高质量可行解,在物流配送、供应链管理、网络路由等场景具有极高的技术价值。本文以数学建模竞赛为背景,深入探讨了模拟退火算法在求解带时

weixin_34356555的博客 309

2026年职业院校技能大赛中职移动应用与开发—数字生活APP原型设计参考答案(含素材)

本模块以产品原型为目标,考查参赛选手熟练收集、分析和归纳客户需求,清晰梳理业务流程,熟练使用UI设计软件进行产品UI/UE设计,掌握正确的UI配色方案,设计出符合业务逻辑的人体工学移动App 原型优秀作品。

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 569

数学建模竞赛实战:从模型构建到算法求解的完整指南

数学建模是将现实世界复杂问题抽象为数学问题并求解的核心方法,其原理在于通过合理的假设与简化,运用数学语言描述系统行为。在工程与科研领域,数学建模的价值在于为决策提供量化依据与优化方案。典型的应用场景包括资源调度、路径规划、趋势预测等各类优化与预测问题。本文以模拟退火算法和遗传算法等启发式算法为例,深入剖析了在数学建模竞赛中,如何将实际问题转化为数学模型,并高效实现算法求解,最终完成从问题分析到论文撰写的全流程。

weixin_34198453的博客 424

社会网络仿真软件:NetLogo_(14).社会网络数据导入与导出

在NetLogo中,社会网络的仿真不仅依赖于模型的内部逻辑,还需要能够灵活地导入和导出数据。这使得用户可以利用外部数据来初始化模型,或者将模型的运行结果导出以便进一步分析。本节将详细介绍如何在NetLogo中实现社会网络数据的导入和导出,包括常见的数据格式和具体的代码示例。

kkchenjj的博客 600

Linux 下安装 openjdk 17【详细步骤】

JDK17,安装教程。

甘蓝的专栏 7508
上一篇: 【进阶二】Python实现VRPTW常见求解算法——离散粒子群(DPSO)
下一篇: 【进阶二】Python实现VRPTW常见求解算法——自适应大邻域搜索算法(ALNS)
Better.C
博客等级 码龄9年 1万+粉丝 72原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Better.C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值