固定路径车辆充电问题的求解方法
frvcp的Python项目详细描述
frvcpy:FRVCP的开源解算器
富FRVCPs
什么是FRVCP?在
假设一辆电动汽车(EV)被分配了一些访问地点的顺序(a固定路线),固定路线车辆充电问题(FRVCP)是一个寻找充电操作的最佳插入路径的问题,该问题使电动汽车以能量可行的方式穿越该路线所需的时间最小化。在
安装
在使用Python3.6+的虚拟环境中,可以通过
pip install frvcpy
测试安装
^{pr2}$或从命令行:
frvcpy-test
使用frvcpy
使用兼容的实例文件(see the schema),从Python脚本求解FRVCP:
fromfrvcpyimportsolverroute=[0,40,12,33,38,16,0]# route to make energy feasibleq_init=16000# vehicle's initial energy level# using an existing instance from filefrvcp_solver=solver.Solver("instances/frvcpy-instance.json",route,q_init)# run the algorithmduration,feas_route=frvcp_solver.solve()# write solution to filefrvcp_solver.write_solution("my-solution.xml",instance_name="frvcpy-instance")print(f"Duration: {duration:.4}")# Duration: 7.339print(f"Energy-feasible route:\n{feas_route}")# Energy-feasible route:# [(0, None), (40, None), (12, None), (33, None), (48, 6673.379615520617), (38, None), (16, None), (0, None)]
或从命令行:
frvcpy --instance=instances/frvcpy-instance.json --route=0,40,12,33,38,16,0 --qinit=16000 --output=my-solution.xml # Duration: 7.339# Energy-feasible route:# [(0, None), (40, None), (12, None), (33, None), (48, 6673.379615520617), (38, None), (16, None), (0, None)]
解决方案以VRP-REP格式编写,便于导入和可视化,VRP-REP Mapper(正式解决方案规范可用here)。在
{{em1}示例中的示例^{1}有问题。为了方便访问示例文件,我们建议克隆存储库。
实例翻译
根据VRP-REP规范(availablehere)格式化的一些E-VRP实例可以进行实例转换。在
翻译可以通过
fromfrvcpyimporttranslator# Option 1) write the translated instance to filetranslator.translate("instances/vrprep-instance.xml",to_filename="instances/my-new-instance.json")# Option 2) make instance object to be passed directly to the solverfrvcp_instance=translator.translate("instances/vrprep-instance.xml")
或使用命令行:
# from CLI, only option is to write translated instance to file
frvcpy-translate instances/vrprep-instance.xml instances/my-new-instance.json
注意:如果将以“.xml”结尾的实例传递给解算器,则假定它是VRP-REP实例,解算器将自动尝试转换它。
VRP-REP实例的翻译要求
frvcpy的转换器假设VRP-REP实例的格式类似于Montoya et al. (2017) instances:
- CSs被标识为具有属性
<node>
的元素type="2"
- 充电站节点有一个
<custom>
子元素,该子元素包含cs_type
元素 - 对于那些
cs_type
元素中出现的每个唯一的CS类型t
,都存在一个带有属性cs_type=t
的充电function
元素 - 这些
function
元素是^{的 custom
元素中charging_functions
元素的一部分 - 仓库的节点ID为0,N个客户的ID为{1,…,N},CSs的ID为{N+1,…,N+C}
这种实例的一个很好的例子是example VRP-REP instance in the repository。在
下面是一个满足这些要求的较小示例:
<?xml version="1.0" encoding="UTF-8"?><instance><network><nodes><nodeid="0"type="0"><cx>74.83</cx><cy>51.85</cy></node><nodeid="1"type="1"><cx>68.77</cx><cy>75.69</cy></node><nodeid="11"type="2"><cx>57.0</cx><cy>57.04</cy><custom><cs_type>fast</cs_type></custom></node></nodes><euclidean/><decimals>14</decimals></network><fleet><vehicle_profiletype="0"><departure_node>0</departure_node><arrival_node>0</arrival_node><speed_factor>25.0</speed_factor><custom><consumption_rate>0.125</consumption_rate><battery_capacity>16.0</battery_capacity><charging_functions><functioncs_type="fast"><breakpoint><battery_level>0.0</battery_level><charging_time>0.0</charging_time></breakpoint><breakpoint><battery_level>13.6</battery_level><charging_time>0.317</charging_time></breakpoint><breakpoint><battery_level>15.2</battery_level><charging_time>0.383</charging_time></breakpoint><breakpoint><battery_level>16.0</battery_level><charging_time>0.517</charging_time></breakpoint></function></charging_functions></custom></vehicle_profile></fleet><requests><requestid="1"node="1"><service_time>0.5</service_time></request></requests></instance>
解决方案
为了解决FRVCPs,frvcpy实现了Froger等人(2019)的标记算法,在低运行时提供了最优的解决方案。该算法适应了实际问题的特点,如非线性充电功能、异构充电站技术以及站点间的多个CS访问。在
附加信息
有关求解器中使用的算法的详细信息,请参见Froger et al. (2019)。在
在HALhere上可以看到这个包的详细信息。在
- 项目
标签: