build.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from .._utils.config_info import ConfigInfo
  2. def main(config:dict) -> list:
  3. config_info = ConfigInfo(config)
  4. constrains_range = config_info.get_property('constrains_range',default=None)
  5. constrains_dyn = config_info.get_property('constrains_dyn',default=None)
  6. constrains_fml = config_info.get_property('constrains',default=None)
  7. all_constrains = []
  8. all_constrains += get_range_constrains(constrains_range)
  9. all_constrains += get_dyn_change_constrains(constrains_dyn)
  10. all_constrains += get_formula_constrains(constrains_fml)
  11. print('-'*20+'约束条件'+'-'*20)
  12. for idx,constrains in enumerate(all_constrains):
  13. print('-'*20+ str(idx) +'-'*20)
  14. print(constrains)
  15. return all_constrains
  16. def get_range_constrains(range_constrains:list):
  17. constrains = []
  18. if range_constrains is None:
  19. return constrains
  20. for obj_var in range_constrains:
  21. var_name_raw = obj_var['var_name']
  22. var_name = '{' + var_name_raw + '}'
  23. ub = obj_var.get('ub')
  24. lb = obj_var.get('lb')
  25. if ub is not None and ub != '':
  26. constrains.append(f'#表单边界性约束# {var_name}-({ub})<0')
  27. if lb is not None and lb != '':
  28. constrains.append(f'#表单边界性约束# ({lb})-{var_name}<0')
  29. return constrains
  30. def get_dyn_change_constrains(config):
  31. # (以下变化是指优化前后的变化)
  32. # 目标变量 变化值 d_p
  33. # 目标状态 值 S (0/1)
  34. # 环境状态 变化值 d_S (0/1)
  35. # 当环境点位出现变化时,允许目标点位有大范围的变化(c_w),否则只允许小范围变化(c_n)
  36. # d_S * ( c_w - c_n ) + c_n < d_p < d_S * ( c_w - c_n ) + c_n
  37. # 当目标点位状态为0时,允许目标点位有最大范围的变化,从而减小约束对于可行解数量的负面影响
  38. # D_s = d_S + ( 1 - S ) * 100
  39. # D_s * ( c_w - c_n ) + c_n < d_p < D_s * ( c_w - c_n ) + c_n
  40. return []
  41. def get_formula_constrains(constrains_fml:list):
  42. constrains = []
  43. if constrains_fml is None:
  44. return constrains
  45. constrains = [cst['constrain'] for cst in constrains_fml if cst is not None]
  46. return constrains