config_parser.py 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. ##################################################################
  4. #
  5. # Copyright (c) 2023 CICV, Inc. All Rights Reserved
  6. #
  7. ##################################################################
  8. """
  9. @Authors: yangzihao(yangzihao@china-icv.cn)
  10. @Data: 2023/11/02
  11. @Last Modified: 2023/11/02
  12. @Summary: This module provides the function to parse the config json file.
  13. """
  14. import pandas as pd
  15. import numpy as np
  16. from common import json2dict
  17. from collections import OrderedDict
  18. class ConfigParse(object):
  19. """
  20. """
  21. def __init__(self, json_file):
  22. # weight info
  23. self.scoreModel = ""
  24. self.dimension_weight = {}
  25. self.dimension_list = []
  26. self.dimension_name = {}
  27. self.type_weight = {}
  28. self.type_list = []
  29. self.type_name = {}
  30. self.metric_list = []
  31. self.metric_dict = {}
  32. self.name_dict = {}
  33. self.unit_dict = {}
  34. self.builtinDimensionList = ["safe", "function", "compliance", "comfort", "efficient"]
  35. self.builtinTypeDict = {
  36. "safe": ['safeTime', 'safeDistance', 'safeAcceleration', 'safeProbability'],
  37. "function": ['functionACC', 'functionLKA'],
  38. "compliance": ['functionACC', 'functionLKA', 'safeAcceleration', 'safeProbability'],
  39. "comfort": ['comfortLat', 'comfortLon'],
  40. "efficient": ['efficientDrive', 'efficientStop']
  41. }
  42. self.builtinMetricList = ["TTC", "MTTC", "THW", "LatSD", "LonSD", "DRAC", "BTN", "STN", "collisionRisk",
  43. "collisionSeverity", "followSpeedDeviation", "followDistanceDeviation",
  44. "followStopDistance", "followResponseTime", 'laneDistance',
  45. 'centerDistanceExpectation', 'centerDistanceStandardDeviation',
  46. 'centerDistanceMax', 'centerDistanceMin', 'centerDistanceFrequency',
  47. 'centerDistanceRange',
  48. "zigzag", "shake", "cadence", "slamBrake", "slamAccelerate",
  49. "pressSolidLine", "runRedLight", "overspeed20_50", "overspeed50", "overspeed10",
  50. "overspeed10_20",
  51. "averageSpeed", "stopDuration", "stopCount"]
  52. # score info
  53. self.config = {}
  54. # initialization
  55. self.config_dict = json2dict(json_file)
  56. self.parse_dict = self._config_parse(self.config_dict)
  57. def _config_parse(self, config_dict):
  58. # score
  59. if 'scoreModel' in list(config_dict.keys()):
  60. self.scoreModel = config_dict['scoreModel']
  61. else:
  62. self.scoreModel = "builtin"
  63. # dimension info
  64. dimensionWeight = config_dict['dimensionWeight']
  65. self.dimension_weight = dimensionWeight
  66. self.dimension_name = config_dict['dimensionName']
  67. self.dimension_list = list(self.dimension_weight.keys())
  68. # type info
  69. typeWeight = config_dict['typeWeight']
  70. self.type_weight = typeWeight
  71. self.type_name = config_dict["typeName"]
  72. for dimension in self.dimension_list:
  73. if dimension == 'compliance':
  74. self.config[dimension] = self._compliance_config_parse(config_dict, typeWeight, dimensionWeight)
  75. else:
  76. self.config[dimension] = self._dimension_config_parse(dimension, config_dict, typeWeight,
  77. dimensionWeight)
  78. # self.name_dict[dimension] = self.config[dimension]['name']
  79. # self.unit_dict[dimension] = self.config[dimension]['unit']
  80. self.name_dict.update(self.config[dimension]['name'])
  81. self.unit_dict.update(self.config[dimension]['unit'])
  82. self.metric_dict[dimension] = self.config[dimension]['typeMetricDict']
  83. self.metric_list.extend(self.config[dimension]['metric'])
  84. self.type_list.extend(self.config[dimension]['type'])
  85. print()
  86. def _dimension_config_parse(self, dimension, config_dict, typeWeight, dimensionWeight):
  87. # get weight type
  88. typeWeightDimension = typeWeight[dimension]
  89. typeDimensionList = list(typeWeightDimension.keys())
  90. if dimension in self.builtinDimensionList:
  91. typeWeightDimension_builtin = OrderedDict(
  92. (key, typeWeightDimension[key]) for key in self.builtinTypeDict[dimension] if key in typeDimensionList)
  93. typeWeightDimension_builtin = list(typeWeightDimension_builtin.keys())
  94. typeDimension = typeWeightDimension_builtin + [x for x in typeDimensionList if
  95. x not in self.builtinTypeDict[dimension]]
  96. else:
  97. typeDimension = typeDimensionList
  98. typeWeightDimensionList = list(typeWeightDimension.values())
  99. flagCustomDimension = not all(x is None for x in typeWeightDimensionList)
  100. # get type name
  101. typeNameDimension = self.type_name[dimension]
  102. # Dimension
  103. dimension_dict = config_dict[dimension]
  104. dimension_value_dict = {}
  105. typeMetricDict = {}
  106. for type in typeDimension:
  107. dimension_value_dict.update(dimension_dict[type])
  108. typeMetricDict[type] = list(dimension_dict[type].keys())
  109. df_dimension_value = pd.DataFrame(dimension_value_dict).T
  110. # get metric list
  111. metricDimension = df_dimension_value.index.tolist()
  112. # get name list
  113. nameDimension = df_dimension_value['name'].to_dict()
  114. # nameDimensionList = list(nameDimension.values())
  115. # get unit list
  116. unitDimension = df_dimension_value['unit'].to_dict()
  117. unitDimension = {key: (value if value is not None else "") for key, value in unitDimension.items()}
  118. # unitDimensionList = list(unitDimension.values())
  119. # get weight list
  120. weightDimension = df_dimension_value['weight'].astype(float).to_dict()
  121. weightDimensionList = list(weightDimension.values())
  122. # get priority list
  123. priorityDimension = df_dimension_value['priority'].astype(int).to_dict()
  124. priorityDimensionList = list(priorityDimension.values())
  125. # get paramList
  126. paramDimension = df_dimension_value['paramList'].to_dict()
  127. bulitin_first_key = next((key for key in paramDimension if key in self.builtinMetricList), None)
  128. first_key = next(iter(paramDimension)) if not bulitin_first_key else bulitin_first_key
  129. paramNum = len(paramDimension[first_key])
  130. kindDimension = [{} for _ in range(paramNum)]
  131. optimalDimension = [{} for _ in range(paramNum)]
  132. multipleDimension = [{} for _ in range(paramNum)]
  133. spareDimension = [{} for _ in range(paramNum)]
  134. # spare1Dimension = [{} for _ in range(paramNum)]
  135. # spare2Dimension = [{} for _ in range(paramNum)]
  136. customMetricParam = {} # custiom metric paramList
  137. for key, value_list in paramDimension.items():
  138. if key in self.builtinMetricList:
  139. for i in range(len(value_list)):
  140. kindDimension[i][key] = int(value_list[i]['kind'])
  141. optimalDimension[i][key] = float(value_list[i]['optimal'])
  142. multipleDimension[i][key] = [float(x) for x in value_list[i]['multiple']]
  143. spareDimension[i][key] = [item["param"] for item in value_list[i]["spare"]]
  144. # spareDimension[i][key] = [float(item["param"]) for item in value_list[i]["spare"]]
  145. # spare1Dimension[i][key] = (value_list[i]['spare1'])
  146. # spare2Dimension[i][key] = (value_list[i]['spare2'])
  147. else:
  148. customMetricParam[key] = value_list
  149. kindDimensionList = [value for dict_val in kindDimension for value in dict_val.values()]
  150. optimalDimensionList = [value for dict_val in optimalDimension for value in dict_val.values()]
  151. multipleDimensionList = [value for dict_val in multipleDimension for value in dict_val.values()]
  152. spareDimensionList = [value for dict_val in spareDimension for value in dict_val.values()]
  153. # spare1DimensionList = [value for dict_val in spare1Dimension for value in dict_val.values()]
  154. # spare2DimensionList = [value for dict_val in spare2Dimension for value in dict_val.values()]
  155. if paramNum == 1:
  156. kindDimension = kindDimension[0]
  157. optimalDimension = optimalDimension[0]
  158. multipleDimension = multipleDimension[0]
  159. spareDimension = spareDimension[0]
  160. # spare1Dimension = spare1Dimension[0]
  161. # spare2Dimension = spare2Dimension[0]
  162. result = {
  163. "weightDimension": float(dimensionWeight[dimension]),
  164. "weightCustom": flagCustomDimension,
  165. "type": typeDimension,
  166. "typeWeight": typeWeightDimension,
  167. "typeWeightList": typeWeightDimensionList,
  168. "typeName": typeNameDimension,
  169. "customMetricParam": customMetricParam,
  170. "metric": metricDimension,
  171. "typeMetricDict": typeMetricDict,
  172. "name": nameDimension,
  173. # "nameList": nameDimensionList,
  174. "unit": unitDimension,
  175. # "unitList": unitDimensionList,
  176. "weight": weightDimension,
  177. "weightList": weightDimensionList,
  178. "priority": priorityDimension,
  179. "priorityList": priorityDimensionList,
  180. "kind": kindDimension,
  181. "kindList": kindDimensionList,
  182. "optimal": optimalDimension,
  183. "optimalList": optimalDimensionList,
  184. "multiple": multipleDimension,
  185. "multipleList": multipleDimensionList,
  186. "spare": spareDimension,
  187. "spareList": spareDimensionList,
  188. # "spare1": spare1Dimension,
  189. # "spare1List": spare1DimensionList,
  190. # "spare2": spare2Dimension,
  191. # "spare2List": spare2DimensionList
  192. }
  193. return result
  194. def _safe_config_parse(self, config_dict, typeWeight, dimensionWeight):
  195. # get weight type
  196. typeWeightSafe = typeWeight['safe']
  197. # typeSafe = [key for key, value in typeWeightSafe.items() if value != 0]
  198. typeSafe = list(typeWeightSafe.keys()) # get type list
  199. # typeWeightSafeDict = {key: value for key, value in typeWeightSafe.items() if value != 0}
  200. # typeWeightSafeList = list(typeWeightSafeDict.values())
  201. typeWeightSafeList = list(typeWeightSafe.values())
  202. flagCustomSafe = not all(x is None for x in typeWeightSafeList)
  203. # safe
  204. safe_dict = config_dict['safe']
  205. safe_value_dict = {}
  206. for type in typeSafe:
  207. safe_value_dict.update(safe_dict[type])
  208. df_safe_value = pd.DataFrame(safe_value_dict).T
  209. # safe_value_dict.update(safe_dict['safeTime'])
  210. # safe_value_dict.update(safe_dict['safeDistance'])
  211. # safe_value_dict.update(safe_dict['safeAcceleration'])
  212. # safe_value_dict.update(safe_dict['safeProbability'])
  213. # df_safe_value = pd.DataFrame(safe_value_dict).T
  214. # df_safe_value = df_safe_value[df_safe_value['enable'] == True]
  215. # get metric list
  216. metricSafe = df_safe_value.index.tolist()
  217. # get weight list
  218. weightSafe = df_safe_value['weight'].astype(float).to_dict()
  219. weightSafeList = list(weightSafe.values())
  220. # get priority list
  221. prioritySafe = df_safe_value['priority'].astype(int).to_dict()
  222. prioritySafeList = list(prioritySafe.values())
  223. # get paramList
  224. paramSafe = df_safe_value['paramList'].to_dict()
  225. first_key = next(iter(paramSafe))
  226. paramNum = len(paramSafe[first_key])
  227. kindSafe = [{} for _ in range(paramNum)]
  228. optimalSafe = [{} for _ in range(paramNum)]
  229. multipleSafe = [{} for _ in range(paramNum)]
  230. spare1Safe = [{} for _ in range(paramNum)]
  231. spare2Safe = [{} for _ in range(paramNum)]
  232. for key, value_list in paramSafe.items():
  233. for i in range(len(value_list)):
  234. kindSafe[i][key] = int(value_list[i]['kind'])
  235. optimalSafe[i][key] = float(value_list[i]['optimal'])
  236. multipleSafe[i][key] = [float(x) for x in value_list[i]['multiple']]
  237. spare1Safe[i][key] = (value_list[i]['spare1'])
  238. spare2Safe[i][key] = (value_list[i]['spare2'])
  239. kindSafeList = [value for dict_val in kindSafe for value in dict_val.values()]
  240. optimalSafeList = [value for dict_val in optimalSafe for value in dict_val.values()]
  241. multipleSafeList = [value for dict_val in multipleSafe for value in dict_val.values()]
  242. spare1SafeList = [value for dict_val in spare1Safe for value in dict_val.values()]
  243. spare2SafeList = [value for dict_val in spare2Safe for value in dict_val.values()]
  244. safe = {
  245. "weightSafe": float(dimensionWeight['safe']),
  246. "weightCustom": flagCustomSafe,
  247. "type": typeSafe,
  248. "typeWeight": typeWeightSafe,
  249. "typeWeightList": typeWeightSafeList,
  250. "metric": metricSafe,
  251. "weight": weightSafe,
  252. "weightList": weightSafeList,
  253. "priority": prioritySafe,
  254. "priorityList": prioritySafeList,
  255. "kind": kindSafe,
  256. "kindList": kindSafeList,
  257. "optimal": optimalSafe,
  258. "optimalList": optimalSafeList,
  259. "multiple": multipleSafe,
  260. "multipleList": multipleSafeList,
  261. "spare1": spare1Safe,
  262. "spare1List": spare1SafeList,
  263. "spare2": spare2Safe,
  264. "spare2List": spare2SafeList
  265. }
  266. return safe
  267. def _function_config_parse(self, config_dict, typeWeight, dimensionWeight):
  268. # get weight type
  269. typeWeightFunction = typeWeight['function']
  270. typeFunction = [key for key, value in typeWeightFunction.items() if value != 0]
  271. typeWeightFunctionDict = {key: value for key, value in typeWeightFunction.items() if value != 0}
  272. typeWeightFunctionList = list(typeWeightFunctionDict.values())
  273. flagCustomFunction = not all(x is None for x in typeWeightFunctionList)
  274. # function
  275. function_dict = config_dict['function']
  276. function_value_dict = {}
  277. for type in typeFunction:
  278. function_value_dict.update(function_dict[type])
  279. df_function_value = pd.DataFrame(function_value_dict).T
  280. # get metric list
  281. metricFunction = df_function_value.index.tolist()
  282. # get weight list
  283. weightFunction = df_function_value['weight'].astype(float).to_dict()
  284. weightFunctionList = list(weightFunction.values())
  285. # get priority list
  286. priorityFunction = df_function_value['priority'].astype(int).to_dict()
  287. priorityFunctionList = list(priorityFunction.values())
  288. # get kind list
  289. kindFunction = df_function_value['kind'].astype(int).to_dict()
  290. kindFunctionList = list(kindFunction.values())
  291. # get optimal list
  292. optimalFunction = df_function_value['optimal'].astype(float).to_dict()
  293. optimalFunctionList = list(optimalFunction.values())
  294. # get multiple list
  295. multipleFunction = df_function_value['multiple'].astype(float).to_dict()
  296. multipleFunctionList = list(multipleFunction.values())
  297. function = {
  298. "weightFunction": float(dimensionWeight['function']),
  299. "weightCustom": flagCustomFunction,
  300. "type": typeFunction,
  301. "typeWeight": typeWeightFunction,
  302. "typeWeightList": typeWeightFunctionList,
  303. "metric": metricFunction,
  304. "weight": weightFunction,
  305. "weightList": weightFunctionList,
  306. "priority": priorityFunction,
  307. "priorityList": priorityFunctionList,
  308. "kind": kindFunction,
  309. "kindList": kindFunctionList,
  310. "optimal": optimalFunction,
  311. "optimalList": optimalFunctionList,
  312. "multiple": multipleFunction,
  313. "multipleList": multipleFunctionList
  314. }
  315. return function
  316. def _compliance_config_parse(self, config_dict, typeWeight, dimensionWeight):
  317. # get weight type
  318. typeWeightCompliance = typeWeight['compliance']
  319. typeCompliance = list(typeWeightCompliance.keys())
  320. typeWeightComplianceList = list(typeWeightCompliance.values())
  321. flagCustomCompliance = not all(x is None for x in typeWeightComplianceList)
  322. # get type name
  323. typeNameCompliance = self.type_name["compliance"]
  324. # compliance
  325. compliance_dict = config_dict['compliance']
  326. compliance_value_dict = {}
  327. typeMetricDict = {}
  328. for type in typeCompliance:
  329. compliance_value_dict.update(compliance_dict[type])
  330. typeMetricDict[type] = list(compliance_dict[type].keys())
  331. df_compliance_value = pd.DataFrame(compliance_value_dict).T
  332. # get metric list
  333. metricCompliance = df_compliance_value.index.tolist()
  334. # get weight type
  335. typeWeightCompliance = typeWeight['compliance']
  336. typeWeightComplianceList = list(typeWeightCompliance.values())
  337. # get name list
  338. nameCompliance = df_compliance_value['name'].to_dict()
  339. # get unit list
  340. unitCompliance = df_compliance_value['unit'].to_dict()
  341. # get weight list
  342. weightCompliance = df_compliance_value['weight'].astype(float).to_dict()
  343. weightComplianceList = list(weightCompliance.values())
  344. compliance = {
  345. "weightDimension": float(dimensionWeight['compliance']),
  346. "weightCustom": flagCustomCompliance,
  347. "type": typeCompliance,
  348. "typeWeight": typeWeightCompliance,
  349. "typeWeightList": typeWeightComplianceList,
  350. "typeName": typeNameCompliance,
  351. "typeMetricDict": typeMetricDict,
  352. "metric": metricCompliance,
  353. "name": nameCompliance,
  354. "unit": unitCompliance,
  355. "weight": weightCompliance,
  356. "weightList": weightComplianceList
  357. }
  358. return compliance
  359. def _comfort_config_parse(self, config_dict, typeWeight, dimensionWeight):
  360. # get weight type
  361. typeWeightComfort = typeWeight['comfort']
  362. typeComfort = [key for key, value in typeWeightComfort.items() if value != 0]
  363. typeWeightComfortDict = {key: value for key, value in typeWeightComfort.items() if value != 0}
  364. typeWeightComfortList = list(typeWeightComfortDict.values())
  365. flagCustomComfort = not all(x is None for x in typeWeightComfortList)
  366. # comfort
  367. comfort_dict = config_dict['comfort']
  368. comfort_value_dict = {}
  369. for type in typeComfort:
  370. comfort_value_dict.update(comfort_dict[type])
  371. df_comfort_value = pd.DataFrame(comfort_value_dict).T
  372. # comfort_value_dict.update(comfort_dict['comfortLat'])
  373. # comfort_value_dict.update(comfort_dict['comfortLon'])
  374. # df_comfort_value = pd.DataFrame(comfort_value_dict).T
  375. # df_comfort_value = df_comfort_value[df_comfort_value['enable'] == True]
  376. # get metric list
  377. metricComfort = df_comfort_value.index.tolist()
  378. # get weight type
  379. typeWeightComfort = typeWeight['comfort']
  380. typeWeightComfortList = list(typeWeightComfort.values())
  381. # get weight list
  382. weightComfort = df_comfort_value['weight'].astype(float).to_dict()
  383. weightComfortList = list(weightComfort.values())
  384. # get priority list
  385. priorityComfort = df_comfort_value['priority'].astype(int).to_dict()
  386. priorityComfortList = list(priorityComfort.values())
  387. # get kind list
  388. kind1 = df_comfort_value['kind1'].astype(int).to_dict()
  389. kind2 = df_comfort_value['kind2'].astype(int).to_dict()
  390. kind3 = df_comfort_value['kind3'].astype(int).to_dict()
  391. kindComfort = {
  392. "kind1": kind1,
  393. "kind2": kind2,
  394. "kind3": kind3
  395. }
  396. kindComfortList = list(self._merge_dict(kind1, kind2, kind3).values())
  397. # get optimal list
  398. optimal1 = df_comfort_value['optimal1'].astype(float).to_dict()
  399. optimal2 = df_comfort_value['optimal2'].astype(float).to_dict()
  400. optimal3 = df_comfort_value['optimal3'].astype(float).to_dict()
  401. optimalComfort = {
  402. "optimal1": optimal1,
  403. "optimal2": optimal2,
  404. "optimal3": optimal3
  405. }
  406. optimalComfortList = list(self._merge_dict(optimal1, optimal2, optimal3).values())
  407. # get multiple list
  408. multiple1 = df_comfort_value['multiple1'].astype(float).to_dict()
  409. multiple2 = df_comfort_value['multiple2'].astype(float).to_dict()
  410. multiple3 = df_comfort_value['multiple3'].astype(float).to_dict()
  411. multipleComfort = {
  412. "multiple1": multiple1,
  413. "multiple2": multiple2,
  414. "multiple3": multiple3
  415. }
  416. multipleComfortList = list(self._merge_dict(multiple1, multiple2, multiple3).values())
  417. comfort = {
  418. "weightComfort": float(dimensionWeight['comfort']),
  419. "weightCustom": flagCustomComfort,
  420. "type": typeComfort,
  421. "typeWeight": typeWeightComfort,
  422. "typeWeightList": typeWeightComfortList,
  423. "metric": metricComfort,
  424. "weight": weightComfort,
  425. "weightList": weightComfortList,
  426. "priority": priorityComfort,
  427. "priorityList": priorityComfortList,
  428. "kind": kindComfort,
  429. "kindList": kindComfortList,
  430. "optimal": optimalComfort,
  431. "optimalList": optimalComfortList,
  432. "multiple": multipleComfort,
  433. "multipleList": multipleComfortList
  434. }
  435. return comfort
  436. def _efficient_config_parse(self, config_dict, typeWeight, dimensionWeight):
  437. # get weight type
  438. typeWeightEfficient = typeWeight['efficient']
  439. typeEfficient = [key for key, value in typeWeightEfficient.items() if value != 0]
  440. typeWeightEfficientDict = {key: value for key, value in typeWeightEfficient.items() if value != 0}
  441. typeWeightEfficientList = list(typeWeightEfficientDict.values())
  442. flagCustomEfficient = not all(x is None for x in typeWeightEfficientList)
  443. # efficient
  444. efficient_dict = config_dict['efficient']
  445. efficient_value_dict = {}
  446. for type in typeEfficient:
  447. efficient_value_dict.update(efficient_dict[type])
  448. df_efficient_value = pd.DataFrame(efficient_value_dict).T
  449. # efficient_value_dict.update(efficient_dict['efficientDrive'])
  450. # efficient_value_dict.update(efficient_dict['efficientStop'])
  451. # df_efficient_value = pd.DataFrame(efficient_value_dict).T
  452. # df_efficient_value = df_efficient_value[df_efficient_value['enable'] == True]
  453. # get metric list
  454. metricEfficient = df_efficient_value.index.tolist()
  455. # get weight type
  456. typeWeightEfficient = typeWeight['efficient']
  457. typeWeightEfficientList = list(typeWeightEfficient.values())
  458. # get weight list
  459. weightEfficient = df_efficient_value['weight'].astype(float).to_dict()
  460. weightEfficientList = list(weightEfficient.values())
  461. # get priority list
  462. priorityEfficient = df_efficient_value['priority'].astype(int).to_dict()
  463. priorityEfficientList = list(priorityEfficient.values())
  464. # get kind list
  465. kindEfficient = df_efficient_value['kind'].astype(int).to_dict()
  466. kindEfficientList = list(kindEfficient.values())
  467. # get optimal list
  468. optimalEfficient = df_efficient_value['optimal'].astype(float).to_dict()
  469. optimalEfficientList = list(optimalEfficient.values())
  470. # get multiple list
  471. multipleEfficient = df_efficient_value['multiple'].astype(float).to_dict()
  472. multipleEfficientList = list(multipleEfficient.values())
  473. efficient = {
  474. "weightEfficient": float(dimensionWeight['efficient']),
  475. "weightCustom": flagCustomEfficient,
  476. "type": typeEfficient,
  477. "typeWeight": typeWeightEfficient,
  478. "typeWeightList": typeWeightEfficientList,
  479. "metric": metricEfficient,
  480. "weight": weightEfficient,
  481. "weightList": weightEfficientList,
  482. "priority": priorityEfficient,
  483. "priorityList": priorityEfficientList,
  484. "kind": kindEfficient,
  485. "kindList": kindEfficientList,
  486. "optimal": optimalEfficient,
  487. "optimalList": optimalEfficientList,
  488. "multiple": multipleEfficient,
  489. "multipleList": multipleEfficientList
  490. }
  491. return efficient
  492. def _merge_dict(self, dict1, dict2, dict3):
  493. merged_dict = {}
  494. # save the key and values lists
  495. dict1_key = list(dict1.keys())
  496. dict2_key = list(dict2.keys())
  497. dict3_key = list(dict3.keys())
  498. dict1_values = list(dict1.values())
  499. dict2_values = list(dict2.values())
  500. dict3_values = list(dict3.values())
  501. for i in range(len(dict1)):
  502. merged_dict[f"{dict1_key[i]}1"] = dict1_values[i]
  503. merged_dict[f"{dict2_key[i]}2"] = dict2_values[i]
  504. merged_dict[f"{dict3_key[i]}3"] = dict3_values[i]
  505. return merged_dict