【EVRPTW】低碳时代下不完全充电策略的电动汽车车辆路径优化问题

现在市面上已经存在了很多的VRP、VRPTW问题代码。但是针对EVRPTW的matlab开源代码却比较少。

github上找到了一个比较相近的代码,分享如下,大家可以下载学习:

https://github.com/jiujiuxia/GOC-EVRPTW

由于是短暂性的学习VRP问题,且python基础较差。因此,我将对上面代码中的思路2进行学习,并在此基础上稍作改动。
在这里插入图片描述

遗传算法作为一种经典的启发式算法,在这里不作过多讲解。
值得注意的是,遗传算法的使用场景十分广泛,包括在其基础上衍生的差分进化算法。有兴趣的UU可以进行深入研究。

主程序:

data = pd.DataFrame()
result = pd.DataFrame()
distance = pd.read_table('input_distance_time.txt',sep = ',')

pd.DataFrame()
二维数据结构,表示一个表格,类似于电子表格的数据结构。每一列可以用于储存不同的类型值。
使用该功能时,需要导入包:
import pandas as pd
import numpy as np

for c in [0]:    for i in range(3):data1_title = str(c) +'_'+str(i)+'.xlsx'result_title = 'result_' + str(c) +'_' +str(i) + '.csv'data1 = pd.read_excel(data1_title)result1 = pd.read_csv(result_title)data = data.append(data1)result = result.append(result1)

代码:
for i in range(3):
print(i)

结果:
0
1
2

所以上面这个代码的目的是遍历目前存在的几个excel表。
包括 “0_0.xlsx”、“0_1.xlsx”、“0_2.xlsx”以及“result_0_0”、“result_0_1”、““result_0_2””

station = []
for i in data.index:if i>1000 and i not in station:station.append(i)
print(station)    

选择ID大于1000的station,放在station列表中。

result = pd.Series.to_frame(result)

可以将数组转换为DataFrame格式:

for i in range(len(result)):each = result.iloc[i,0]each = each[1:len(each)-1]each = each.split(',')each = [int(x) for x in each]node.append(each)
print(node)

提取第1列中的点,放入node中

for i in range(len(node)):for j in range(len(node[i])):if node[i][j]>1000:station_used.append(node[i][j])if station_used.count(node[i][j])>1:for s in station:if s not in station_used:station_used[len(station_used)-1] = snode[i][j] = sbreak

循环迭代,保证每个遍历的说station都放在node中。

cus_data = data[data['type']==2]
Node = [0] +list(cus_data.index) + station_used    
all_Node = [0] +list(cus_data.index) + station

data为 “0_0.xlsx”、“0_1.xlsx”、“0_2.xlsx”中的数据。

cus_data为type为2的数据

d_1 = pd.merge(final_all_data,distance,how = 'inner',left_on = 'ID', right_on = 'from_node')
d_2 = pd.merge(final_all_data,d_1,how = 'inner',left_on = 'ID',right_on = 'to_node')
d_2 = d_2[['from_node','to_node','distance','spend_tm']]  test_data = final_all_data
test_dist = d_2

pd.merge,进行表格之间的拼接。
how: One of ‘left’, ‘right’, ‘outer’, ‘inner’. 默认inner。inner是取交集,outer取并集。比如left:[‘A’,‘B’,‘C’];right[’'A,‘C’,‘D’];inner取交集的话,left中出现的A会和right中出现的买一个A进行匹配拼接,如果没有是B,在right中没有匹配到,则会丢失。'outer’取并集,出现的A会进行一一匹配,没有同时出现的会将缺失的部分添加缺失值。

n = len(test_data[test_data['type'] == 2])  # 客户点数量
print(n)
m = len(test_data[test_data['type'] == 3])  # 换电站数量

excel中type为2,即为客户点。type为3,则为换电站。

k =999  # 车辆数量
Q = 2.5  # 额定载重量, t
Q_V = 16.0
dis = 120000  # 续航里程, m
costPerKilo = 0.014  # 油价
epu = 0.04  # 早到惩罚成本
lpu = 999999999999  # 晚到惩罚成本

一些参数设定。
其中,晚到惩罚成本很大,即不能晚到。

for i in all_Node:#坐标X[i] = test_data.loc[i,'lng']Y[i] = test_data.loc[i,'lat']#需求量t_w[i] = test_data.loc[i,'pack_total_weight']t_v[i] = test_data.loc[i,'pack_total_volume']#时间窗eh[i] = int(test_data.loc[i,'first_receive_tm'])lh[i] = int(test_data.loc[i,'last_receive_tm'])Distance[i,i] = 0Time[i,i] = 0#服务时间h[i] = 30
h[0] = 0

all_node统计的为type=2下的节点。

#距离和时间
for i in test_dist.index:Distance[test_dist.loc[i,'from_node'],test_dist.loc[i,'to_node']] = test_dist.loc[i,'distance']Time[test_dist.loc[i,'from_node'],test_dist.loc[i,'to_node']] = test_dist.loc[i,'spend_tm']
Node = Node[1:]

计算两个节点之间的距离和驾驶时间。

    # return fitnessdef getFit(self):fit = distCost = timeCost = overloadCost = overloadCost_V =  fuelCost = fixCost  = 0dist = []  # from this to next# calculate distancei = 0while i < len(self.data)-1:dist.append(Distance[self.data[i],self.data[i+1]])i += 1# distance costdistCost = sum(dist)*costPerKilo# time costtimeSpent = 0for i in range(len(self.data)-1):# new carif self.data[i] == CENTER:timeSpent = 0# update time spent on roadtimeSpent += Time[self.data[i],self.data[i+1]]# arrive earlyif timeSpent < eh[self.data[i+1]]:timeCost += ((eh[self.data[i+1]] - timeSpent) * epu)timeSpent = eh[self.data[i+1]]# arrive lateelif timeSpent > lh[self.data[i+1]]:timeCost += ((timeSpent - lh[self.data[i+1]]) * lpu)# update timetimeSpent += h[self.data[i+1]]        '''# time costtimeCostTotal = 0for i in range(len(self.data)-1):print(i,self.data)# new carif self.data[i] == CENTER:start_time = eh[self.data[i+1]]-Time[self.data[i],self.data[i+1]]end_time   = lh[self.data[i+1]]-Time[self.data[i],self.data[i+1]]print(range(start_time,end_time,10))eachcost = []for j in range(start_time,end_time,10):print(j)p = itimeSpent = jwhile True:print(p)# update time spent on roadtimeSpent += Time[self.data[p],self.data[p+1]]# arrive earlyif timeSpent < eh[self.data[p+1]]:if self.data[p] != CENTER:timeCost += ((eh[self.data[p+1]] - timeSpent) * epu)timeSpent = eh[self.data[p+1]]# arrive lateelif timeSpent > lh[self.data[p+1]]:timeCost += ((timeSpent - lh[self.data[p+1]]) * lpu)# update timetimeSpent += h[self.data[p+1]]p = p+1if self.data[p] == CENTER:breakprint(j,timeCost)eachcost.append(timeCost)timeCostTotal.append(min(eachcost))'''           # overload cost and out of fuel costload_w = 0load_v = 0 distAfterCharge = 0for i in range(len(self.data)-1):# charge hereif self.data[i] > 1000:distAfterCharge = 0# at center, re-loadelif self.data[i]== CENTER:load_w = 0load_v = 0distAfterCharge = dist[i]# normalelse:load_w += t_w[self.data[i]]load_v += t_v[self.data[i]]distAfterCharge += dist[i]# update load and out of fuel costoverloadCost += (HUGE * (load_w > Q))overloadCost_V += (HUGE * (load_v > Q_V))fuelCost += (HUGE * (distAfterCharge > dis))car_num = self.data.count(0)-1fixCost = car_num*300fit = distCost + timeCost + overloadCost + fuelCost + fixCost + overloadCost_Vreturn 1.0/float(fit)

计算目标函数下的各个成本。
其他代码为遗传算法下的固定代码。不需要任何的修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25733.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

统计悖论

统计悖论 1 友谊悖论&#xff08;Friendship Paradox&#xff09;1.1 文字版1.2 公式版1.3 现实意义 2 布雷斯悖论2.1 未开通A》B路线2.2 开通A》B路线2.3 其余布雷斯悖论的例子 3 参考 最近在学习一个统计学的课程&#xff0c;其中涉及到几个统计悖论&#xff0c;笔者感觉很有…

低价电动车,特斯拉的阳谋

出品 | 何玺 排版 | 叶媛 向来以高科技、高端价格为定位的特斯拉&#xff0c;很有可能要向20万元左右的中低端市场发起冲击了。 01 推更低价电动车&#xff1f;特斯拉品牌调性或面临考验 据多家媒体报道&#xff0c;近日在美国旧金山举行的一个科技会议上&#xff0c;特斯拉…

特斯拉充电异常甩锅国家电网,被“打脸”后致歉

2月1日&#xff0c;针对近日南昌车主充电后出现异常的情况&#xff0c;特斯拉官方发布声明致歉。 特斯拉客户支持微博发文称&#xff0c;关于近日南昌车主充电后出现异常的情况&#xff0c;初步判断故障是充电时瞬间电流过载导致的。由于当时导致电流过载的具体原因还在检查中&…

伯特兰悖论

伯特兰悖论是一个有关概率论的传统解释会导致的悖论。约瑟伯特兰于1888年在他的著作《Calcul des probabilits》中提到此悖论&#xff0c;用来举例说明&#xff0c;若产生随机变数的“机制”或“方法”没有清楚定义好的话&#xff0c;概率也将无法得到良好的定义。 伯特兰悖论的…

概率论悖论

1&#xff0e;赌徒的谬误 M&#xff1a;琼斯先生和琼斯太大有五个孩子&#xff0c;都是女儿。 琼斯太大&#xff1a;我希望我们下一个孩子不是女孩。 先生&#xff1a;我亲爱的&#xff0c;在生了五个女儿之后&#xff0c;下一个肯定是儿子。 M&#xff1a;琼斯先生对吗&#x…

聚观早报|特斯拉向第三方电动车开放充电桩;Epic 诉苹果垄断败诉

今日要闻&#xff1a;特斯拉向第三方电动车开放充电桩&#xff1b;我国全面实现不动产统一登记&#xff1b;Epic 诉苹果垄断败诉&#xff1b;腾讯大股东Naspers再减持近79万股&#xff1b;星巴克中国门店将超过万家 特斯拉向第三方电动车开放充电桩 近日&#xff0c;特斯拉官方…

上海AI实验室与商汤科技等发布“书生·浦语”大语言模型

随着AI大语言模型越来越多地表现出接近人类的智能&#xff0c;面向人类设计的高难度、综合性考试被越来越多地引入对语言模型的智能水平进行评测。OpenAI在其关于GPT-4的技术报告中就主要通过各领域的考试对模型能力进行检验。2023年高考开考&#xff0c;中文大语言模型是否能够…

各个AI模型写2023年广东高考作文大比拼

今天是一年一度的高考开始的日子&#xff0c;寒窗苦读十二年&#xff0c;剑指今朝。 作为过来人&#xff0c;当年的高考场景还历历在目。这里先预祝各位莘莘学子&#xff0c;高考正常发挥&#xff0c;旗开得胜&#xff0c;马到功成&#xff0c;考上心中理想的大学。 今天早上是…

大模型们参加2023高考了,成绩单已出炉

转载自 智源研究院量子位 | 公众号 QbitAI 2023 年高考成绩陆续出炉&#xff0c;我们也来看看各大语言模型的“高考成绩”如何&#xff1f; FlagEval 大模型评测团队从 2023年高考考卷中整理了 147 道客观题&#xff08;其中语文 20道&#xff0c;英语 44道&#xff0c;历史 31…

商汤上海AI Lab的新中文LLM「书生·浦语」在高考中多项成绩优于ChatGPT

深度学习自然语言处理 分享来自&#xff1a;机器之心 今天&#xff0c;一年一度的高考正式拉开帷幕。 与往年不同的是&#xff0c;当全国考生奔赴考场的同时&#xff0c;还有一些大语言模型也成为了这场角逐中的特殊选手。 随着 AI 大语言模型越来越多地表现出接近人类智能&…

“超越”(MMCU)中文通用大语言模型测试集预发布

近期&#xff0c;中文大语言模型蓬勃发展&#xff0c;但却一直没有出现可应用于评测大模型能力的测试。甲骨易AI研究院提出一种衡量中文大模型处理多任务准确度的测试&#xff0c;并在此基础上制作了一套适配测试中文大模型的数据集&#xff0c;并将其命名为“超越”。 数据集的…

AI挑战高考作文-实测ChatGPT、Bing、文心一言

这两天高考逐渐落下了帷幕&#xff0c;对于普通人来说&#xff0c;高考仍然是为数不多的&#xff0c;可以改变命运的机会。想起自己的高考&#xff0c;已经是好多年前&#xff0c;那时候一个人去市里面参加考试&#xff0c;第一次睡在不熟悉的床上&#xff0c;痒了一晚上&#…

企业寻求并购股权转让过程中,这些问题其实可以避免

股权融资是指企业的股东愿意让出部分企业所有权&#xff0c;通过企业增资的方式引进新的股东的融资方式&#xff0c;总股本同时增加&#xff0c;股权融资所获得的资金&#xff0c;企业无需还本付息&#xff0c;但新股东与老股东同样企业的赢利与成长。在企业试图通过股权交易促…

大童保险发生工商变更:安信信托彻底退出,德弘资本晋升为大股东

近期&#xff0c;安信信托&#xff08;600816.SH&#xff09;所持大童保险销售服务有限公司&#xff08;下称“大童保险”&#xff09;的全部股权冻结被悉数解除&#xff0c;涉及的冻结权益数额为4978.1344万元&#xff0c;解冻日期为2021年11月24日。 据了解&#xff0c;这部分…

2021年度并购重组中介机构排名(独立财务顾问/律所/审计/评估)

2021年&#xff0c;证监会并购重组委召开了34次会议&#xff0c;上会公司共计41家&#xff0c;审核通过了36家公司的并购重组项目&#xff0c;其中无条件通过18家&#xff0c;有条件通过18家&#xff0c;未通过5家&#xff1b;创业板并购重组委召开了2次会议&#xff0c;审核的…

WPS事件是扼杀国产软件的阴谋?支持国产化,别让信创无路可走

编者按&#xff1a;WPS事件让信创国产化的重要性再一次暴露出来。本文通过WPS事件分析了发展软件国产化的重要性&#xff0c;并介绍了老厂商天翎低代码平台是如何在国产化这块实践的。 近日&#xff0c;“WPS 被曝会删除用户本地文件”事件甚嚣尘上&#xff0c;多数人都在指责W…

两大行业领导者合并,索理思以46亿美元完成收购泰华施

美通社消息&#xff0c;索理思&#xff0c;一家全球领先的水资源密集型行业特种化学品制造商&#xff0c;之前宣布对泰华施控股有限公司的收购&#xff0c;以约46亿美元全现金交易的形式完成&#xff0c;于7月5日生效。泰华施是一家领先的卫生、感染预防和清洁产品及解决方案供…

去年今日我凭借这份文档,摇身一变成了被BAT看中的幸运儿

我足够努力&#xff0c;当然也足够幸运。现在把这份文档和这份幸运分享给你们。 JVM 线程 JVM内存区域 JVM运行时内存 垃圾回收与算法 JAVA 四种引用类型 GC分代收集算法 VS 分区收集算法 GC垃圾收集器 JAVA IO/NIO JVM 类加载机制 由于篇幅限制小编&#xff0c;细节内…

《花雕学AI》24:如何用万能Prompt公式与ChatGPT进行高效的对话测试

引言 你是否想要与人工智能进行有趣、有价值、有说服力的对话&#xff1f;你是否想要使用ChatGPT这个强大而灵活的对话生成器来创造出任何类型和主题的对话&#xff1f;如果是这样&#xff0c;那么你需要了解一个简单而强大的工具&#xff0c;就是万能Prompt公式。 万能Promp…

【自然语言处理】【大模型】LaMDA:用于对话应用程序的语言模型

LaMDA&#xff1a;用于对话应用程序的语言模型 《LaMDA: Language Models for Dialog Applications》 论文地址&#xff1a;https://arxiv.org/abs/2201.08239 相关博客 【自然语言处理】【大模型】CodeGeeX&#xff1a;用于代码生成的多语言预训练模型 【自然语言处理】【大模…