| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- from .._utils.config_info import ConfigInfo
- def main(config:dict) -> list:
-
- config_info = ConfigInfo(config)
- constrains_range = config_info.get_property('constrains_range',default=None)
- constrains_dyn = config_info.get_property('constrains_dyn',default=None)
- constrains_fml = config_info.get_property('constrains',default=None)
-
- all_constrains = []
- all_constrains += get_range_constrains(constrains_range)
- all_constrains += get_dyn_change_constrains(constrains_dyn)
- all_constrains += get_formula_constrains(constrains_fml)
-
- print('-'*20+'约束条件'+'-'*20)
- for idx,constrains in enumerate(all_constrains):
- print('-'*20+ str(idx) +'-'*20)
- print(constrains)
- return all_constrains
- def get_range_constrains(range_constrains:list):
- constrains = []
-
- if range_constrains is None:
- return constrains
-
- for obj_var in range_constrains:
- var_name_raw = obj_var['var_name']
- var_name = '{' + var_name_raw + '}'
-
- ub = obj_var.get('ub')
- lb = obj_var.get('lb')
-
- if ub is not None and ub != '':
- constrains.append(f'#表单边界性约束# {var_name}-({ub})<0')
- if lb is not None and lb != '':
- constrains.append(f'#表单边界性约束# ({lb})-{var_name}<0')
-
- return constrains
- def get_dyn_change_constrains(config):
-
- # (以下变化是指优化前后的变化)
- # 目标变量 变化值 d_p
- # 目标状态 值 S (0/1)
- # 环境状态 变化值 d_S (0/1)
-
- # 当环境点位出现变化时,允许目标点位有大范围的变化(c_w),否则只允许小范围变化(c_n)
- # d_S * ( c_w - c_n ) + c_n < d_p < d_S * ( c_w - c_n ) + c_n
-
- # 当目标点位状态为0时,允许目标点位有最大范围的变化,从而减小约束对于可行解数量的负面影响
- # D_s = d_S + ( 1 - S ) * 100
- # D_s * ( c_w - c_n ) + c_n < d_p < D_s * ( c_w - c_n ) + c_n
-
-
-
- return []
- def get_formula_constrains(constrains_fml:list):
- constrains = []
- if constrains_fml is None:
- return constrains
-
- constrains = [cst['constrain'] for cst in constrains_fml if cst is not None]
-
- return constrains
|