ATM-CMAES:一种适应性均衡模型的约束优化算法

需积分: 18 2 下载量 48 浏览量 更新于2024-08-11 1 收藏 838KB PDF 举报
"基于适应性均衡模型的CMAES约束优化算法 (2012年) - 中南大学学报(自然科学版) - 黄亚飞, 梁昔明, 陈义雄" 本文主要介绍了一种新的约束优化算法——基于适应性均衡模型的协方差矩阵自适应进化策略(Adaptive Tradeoff Model - Covariance Matrix Adaptation Evolution Strategy,简称ATM-CMAES)。该算法是针对传统进化算法在解决约束优化问题时对种群大小过度依赖的局限性而提出的。 协方差矩阵自适应进化策略(CMAES)是一种在进化计算领域中用于无约束优化的高效算法。CMAES通过调整种群分布的协方差矩阵来改进搜索性能,它利用当前最优子群与上一代分布均值之间的关系来更新这一矩阵。在ATM-CMAES中,作者将协方差矩阵的秩1和秩μ2两种更新机制结合起来,这种结合使得算法能够更加灵活地适应不同的问题空间,降低了对种群大小的敏感性。 适应性均衡模型(Adaptive Tradeoff Model,ATM)是算法的核心部分,用于处理约束优化问题。在处理约束条件时,ATM区分了三种情况:群体不可行、半可行和可行。对于这些不同情况,ATM采用了不同的策略来平衡约束违反度与目标函数值,确保算法在满足约束的同时优化目标函数。通过这种方式,ATM-CMAES能够有效地引导群体进化,避免过度集中在某一特定区域,从而提高算法的全局搜索能力和收敛速度。 实验部分,研究者在13个标准测试函数上验证了ATM-CMAES的性能。实验结果显示,ATM-CMAES不仅具有良好的通用性,能适应各种类型的优化问题,而且其稳健性和效率都得到了显著提升。这表明ATM-CMAES是一种有效且可靠的约束优化算法,能够在复杂问题中展现出优越的性能。 这篇论文提出了一种创新的约束优化算法,将CMAES的优秀搜索能力与ATM的智能约束处理机制相结合,为解决实际工程问题中的约束优化提供了新的思路。这种方法不仅在理论上具有重要意义,而且在实际应用中也具有广阔的应用前景。

UnpicklingError Traceback (most recent call last) Input In [66], in <cell line: 36>() 30 Kcat_model = model.KcatPrediction(device, n_fingerprint, n_word, 2*dim, layer_gnn, window, layer_cnn, layer_output).to(device) 31 ##‘KcatPrediction’是一个自定义模型类,根据给定的参数初始化一个Kcat预测模型。使用了上述参数,如果要进行调参在此处进行 32 # directory_path = '../../Results/output/all--radius2--ngram3--dim20--layer_gnn3--window11--layer_cnn3--layer_output3--lr1e-3--lr_decay0/archive/data' 33 # file_list = os.listdir(directory_path) 34 # for file_name in file_list: 35 # file_path = os.path.join(directory_path,file_name) ---> 36 Kcat_model.load_state_dict(torch.load('MAEs--all--radius2--ngram3--dim20--layer_gnn3--window11--layer_cnn3--layer_output3--lr1e-3--lr_decay0.5--decay_interval10--weight_decay1e-6--iteration50.txt', map_location=device)) 37 ##表示把预训练的模型参数加载到Kcat_model里,‘torch.load’表示函数用于文件中加载模型参数的状态字典(state_dict),括号内表示预训练参数的文件位置 38 predictor = Predictor(Kcat_model) File ~/anaconda3/lib/python3.9/site-packages/torch/serialization.py:815, in load(f, map_location, pickle_module, weights_only, **pickle_load_args) 813 except RuntimeError as e: 814 raise pickle.UnpicklingError(UNSAFE_MESSAGE + str(e)) from None --> 815 return _legacy_load(opened_file, map_location, pickle_module, **pickle_load_args) File ~/anaconda3/lib/python3.9/site-packages/torch/serialization.py:1033, in _legacy_load(f, map_location, pickle_module, **pickle_load_args) 1027 if not hasattr(f, 'readinto') and (3, 8, 0) <= sys.version_info < (3, 8, 2): 1028 raise RuntimeError( 1029 "torch.load does not work with file-like objects that do not implement readinto on Python 3.8.0 and 3.8.1. " 1030 f"Received object of type "{type(f)}". Please update to Python 3.8.2 or newer to restore this " 1031 "functionality.") -> 1033 magic_number = pickle_module.load(f, **pickle_load_args) 1034 if magic_number != MAGIC_NUMBER: 1035 raise RuntimeError("Invalid magic number; corrupt file?") UnpicklingError: invalid load key, 'E'. 这个问题怎么解决

2023-07-14 上传