DEAP-xp1 数据包络分析(DEA)工具使用指南

版权申诉
0 下载量 189 浏览量 更新于2024-10-03 收藏 424KB RAR 举报
资源摘要信息:"数据包络 DEA 效率分析" 数据包络分析(Data Envelopment Analysis,DEA)是一种用于评估决策单元(Decision Making Units,DMUs)相对效率的非参数方法。决策单元通常是指企业的不同分支机构、医院、学校或其他服务单位等。DEA利用线性规划技术来确定一组给定的决策单元中最有效的前沿面,并利用这个前沿面来评估其他单元的相对效率。 DEA的核心思想基于以下两点:首先,每个决策单元都有多个输入和输出变量,它们可以是数量、成本或价值等;其次,每个决策单元的效率可以通过输入输出变量的最优组合来衡量。DEA会根据决策单元的实际输入输出数据来确定一个效率前沿面,将效率前沿面之外的决策单元视为非效率的,其效率值小于或等于1。效率值越接近1,表示决策单元越有效率。 DEA方法有多种,但最常见的模型包括CCR模型和BCC模型。CCR模型假设规模报酬不变(Constant Returns to Scale, CRS),即每个决策单元的规模都处于最佳状态;而BCC模型则考虑了规模报酬可变(Variable Returns to Scale, VRS),能够分析决策单元的纯技术效率和规模效率。CCR模型下的效率值被称为综合效率,而BCC模型下的效率值则被分为纯技术效率和规模效率两部分。 在实际应用中,DEA通常用于评估和比较企业的效率,但它也可以应用于其他领域,如医疗、教育、银行、交通等。利用DEA方法可以发现低效率的决策单元,为它们提供改进建议,并为决策者提供关键的绩效指标。 在本资源中提供的DEAP-xp1是一个DEA分析的程序包,它可能包含了一系列执行DEA分析的程序代码和使用说明。这些程序可能采用了某些特定的编程语言编写,比如R语言或者MATLAB,因为这两种语言在统计分析和学术研究中应用广泛。使用这些程序包,用户可以通过简单的操作来执行DEA分析,不需要深入了解复杂的数学模型和线性规划技术。程序包可能还包含了输入输出数据的处理、结果的可视化、敏感性分析等功能,大大提高了数据分析的便捷性和效率。 在使用DEAP-xp1程序包时,用户需要准备相应的输入输出数据,并根据DEA模型的需求来组织数据格式。一般情况下,用户还需要对结果进行解读,判断决策单元的效率水平,并据此进行进一步的分析或决策。由于DEA分析可以给出直观的效率评估和具体的改进建议,因此它在绩效评估、资源配置、目标设定等方面都有广泛的应用前景。

import deap import random from deap import base, creator, tools, algorithms import numpy as np import pandas as pd # 参数 stations = 30 start_end_stations = [1, 2, 5, 8, 10, 14, 17, 18, 21, 22, 25, 26, 27, 30] min_interval = 108 min_stopping_time = 20 max_stopping_time = 120 passengers_per_train = 1860 min_small_loop_stations = 3 max_small_loop_stations = 24 average_boarding_time = 0.04 # 使用 ExcelFile ,通过将 xls 或者 xlsx 路径传入,生成一个实例 stations_kilo1 = pd.read_excel(r'D:\桌面\附件2:区间运行时间(1).xlsx', sheet_name="Sheet1") stations_kilo2 = pd.read_excel(r'D:\桌面\附件3:OD客流数据(1).xlsx', sheet_name="Sheet1") stations_kilo3 = pd.read_excel(r'D:\桌面\附件4:断面客流数据.xlsx', sheet_name="Sheet1") print(stations_kilo1) print(stations_kilo2) print(stations_kilo3) # 适应度函数 def fitness_function(individual): big_loop_trains, small_loop_trains, small_loop_start, small_loop_end = individual small_loop_length = small_loop_end - small_loop_start if small_loop_length < min_small_loop_stations or small_loop_length > max_small_loop_stations: return 1e9, cost = (big_loop_trains + small_loop_trains) * (stations - 1) * min_interval + average_boarding_time * passengers_per_train * (big_loop_trains + small_loop_trains) return cost, # 创建适应度和个体类 creator.create("FitnessMin", base.Fitness, weights=(-1.0,)) creator.create("Individual", list, fitness=creator.FitnessMin) # 注册初始化函数 toolbox = base.Toolbox() toolbox.register("big_loop_trains", random.randint, 1, 10) toolbox.register("small_loop_trains", random.randint, 1, 10) toolbox.register("small_loop_start", random.choice, start_end_stations) toolbox.register("small_loop_end", random.choice, start_end_stations) toolbox.register("individual", tools.initCycle, creator.Individual, (toolbox.big_loop_trains, toolbox.small_loop_trains, toolbox.small_loop_start, toolbox.small_loop_end), n=1) toolbox.register("population", tools.initRepeat, list, toolbox.individual) # 注册遗传算法操作 toolbox.register("mate", tools.cxTwoPoint) toolbox.register("mutate", tools.mutUniformInt, low=[1, 1, min(start_end_stations), min(start_end_stations)], up=[10, 10, max(start_end_stations), max(start_end_stations)], indpb=0.5) toolbox.register("select", tools.selBest) toolbox.register("evaluate", fitness_function) # 设置遗传算法参数 population_size = 100 crossover_probability = 0.8 mutation_probability = 0.2 num_generations = 100 # 初始化种群 population = toolbox.population(n=population_size) # 进化 for gen in range(num_generations): offspring = algorithms.varAnd(population, toolbox, cxpb=crossover_probability, mutpb=mutation_probability) fits = toolbox.map(toolbox.evaluate, offspring) for fit, ind in zip(fits, offspring): ind.fitness.values = fit population = toolbox.select(offspring, k=len(population)) # 找到最佳个体 best_individual = tools.selBest(population, k=1)[0] # 解码最佳个体 big_loop_trains, small_loop_trains, small_loop_start, small_loop_end = best_individual # 输出结果 print("Big Loop Trains:", big_loop_trains) print("Small Loop Trains:", small_loop_trains) print("Small Loop Start Station:", small_loop_start) print("Small Loop End Station:", small_loop_end)分析代码

2023-04-22 上传