sim_config.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import numpy as np
  2. def simulate_config(
  3. target : str,
  4. dir_min : bool,
  5. var_opt : list,
  6. var_sys : list = None,
  7. var_oth : list = None,
  8. var_out : list = None,
  9. var_init_op : list = None,
  10. constrains : list = None, # [约束1,约束2,约束3]
  11. constrains_range: list = None, # [{变量a,上限,下限}, {变量b,上限,下限}]
  12. algorithm : str = 'soea_DE_currentToBest_1_L_templet',
  13. NIND : int = 300,
  14. MAXGEN : int = 200,
  15. diag_model : bool = False,
  16. allow_neg_opt : bool = True
  17. ):
  18. # 公式约束
  19. if constrains is not None:
  20. constrains = [{'constrain':c} for c in constrains]
  21. else:
  22. constrains = []
  23. # 范围约束
  24. if constrains_range is not None:
  25. res_constrains_range = []
  26. for con in constrains_range:
  27. var = con[0]
  28. ub = con[1]
  29. lb = con[2]
  30. con_res = {}
  31. con_res['var_name'] = var
  32. if ub is not None:
  33. con_res['ub'] = ub
  34. if lb is not None:
  35. con_res['lb'] = lb
  36. res_constrains_range.append(con_res)
  37. else:
  38. res_constrains_range = []
  39. var_sys = [] if var_sys is None else var_sys
  40. var_oth = [] if var_oth is None else var_oth
  41. var_out = [] if var_out is None else var_out
  42. var_init_op = [] if var_init_op is None else var_init_op
  43. var_process = ['迭代过程','优化变量对比','输出变量对比']
  44. input_var_id = var_opt + var_sys + var_oth + var_out
  45. output_var_id = var_process + var_opt + var_init_op
  46. input_id_end = [len(var) for var in [var_opt,var_sys,var_oth,var_out]]
  47. input_id_end = np.cumsum(input_id_end)
  48. output_id_end = [len(var) for var in [var_process,var_opt,var_init_op]]
  49. output_id_end = np.cumsum(output_id_end)
  50. config = {
  51. 'algorithm' : algorithm,
  52. 'NIND' : NIND,
  53. 'MAXGEN' : MAXGEN,
  54. 'target' : target,
  55. 'dir_min' : dir_min,
  56. 'diag_model' : diag_model,
  57. 'get_mod_io' : False,
  58. 'input_code' : 'input',
  59. 'model_code' : 'sys',
  60. 'model_name' : 'open_sys56',
  61. 'output_code' : 'output',
  62. 'allow_neg_opt' : allow_neg_opt,
  63. 'constrains' : constrains,
  64. 'constrains_range': res_constrains_range,
  65. '_PORTS_IN' : [{'point_id':p_id} for p_id in input_var_id],
  66. '_PORTS_OUT' : [{'point_id':p_id} for p_id in output_var_id],
  67. '_PORTS_IN_GROUP':[
  68. {'name': '优化变量', 'start': 0, 'end': input_id_end[0]},
  69. {'name': '系统变量', 'start': input_id_end[0], 'end': input_id_end[1]},
  70. {'name': '其他变量', 'start': input_id_end[1], 'end': input_id_end[2]},
  71. {'name': '外部变量', 'start': input_id_end[2], 'end': input_id_end[3]},
  72. # {'name': '动态配置', 'start': input_id_end[3], 'end': input_id_end[4]}
  73. ],
  74. '_PORTS_OUT_GROUP':[
  75. {'name': '优化过程', 'start': 0, 'end': output_id_end[0]},
  76. {'name': '优化变量', 'start': output_id_end[0], 'end': output_id_end[1]},
  77. {'name': '初始输出', 'start': output_id_end[1], 'end': output_id_end[2]},
  78. ],
  79. }
  80. return config