config_parser.py 25 KB

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