Python中如何在循环里为minimize函数调用不同优化方法
问题原因
- 你调用
enumerate(methods)遍历列表时,返回的第二个值已经是方法名的字符串对象,不需要再通过列表索引取值。你写的methods[type]会报错,因为Python列表仅支持整数下标索引,不能传入字符串作为索引。 scipy.optimize.minimize的method参数本身就接受字符串类型输入,你列表中存储的已经是带引号的合法字符串,不需要额外添加引号。
修正后代码
from scipy.optimize import minimize # 这里替换为你自己定义的calculate_loss函数 def calculate_loss(x): return (x[0]-3)**2 + (x[1]-5)**2 methods = ["Nelder-Mead", "Powell"] # 建议不要用type作为变量名,会覆盖Python内置的type关键字,改为method_name更合适 for numb, method_name in enumerate(methods): x0 = [10, 20] res = minimize(calculate_loss, x0, method=method_name) # 也可以通过索引取值,写法为method=methods[numb],效果完全一致 print(f"优化方法:{method_name},优化结果x = {res.x},是否成功:{res.success}")
内容的提问来源于stack exchange,提问作者majyno
相关产品推荐
相关产品推荐

