Python约束优化实战:使用minimize函数求解带边界约束的优化问题
Python约束优化实战:使用minimize函数求解带边界约束的优化问题
本文将介绍如何使用 Python 中的 minimize 函数进行约束优化,并通过一个简单的例子说明如何找到目标函数在给定边界约束下的最小值。pythonimport numpy as npfrom scipy.optimize import minimize
定义目标函数def obj(x): return x[0]**2 + x[1]**2
定义约束函数def con1(X): return X[0]
def con2(X): return 100 - X[0]
def con3(X): return X[1]
def con4(X): return 2000 - X[1]
将约束条件存储在列表中mycons = ({'type': 'ineq', 'fun': lambda x: con1(x)}, {'type': 'ineq', 'fun': lambda x: con2(x)}, {'type': 'ineq', 'fun': lambda x: con3(x)}, {'type': 'ineq', 'fun': lambda x: con4(x)} )
设置初始值x0 = [30, 1000]
设置变量边界bound = []bound.append((20, 40))bound.append((800, 1200))bound = tuple(bound)
创建一个空列表用于存储迭代过程中的解xcall = []
使用 lambda 表达式定义目标函数myobj = lambda x: obj(x)
使用 minimize 函数进行优化求解res = minimize(myobj, x0, bounds=bound, options={'disp': True, 'maxiter': 200}, callback=xcall.append)
每隔 10 次迭代保存一次中间结果for i in range(len(xcall)): if (i % 10 == 0): np.savetxt('中间结果' + str(i) + '.csv', xcall[i])
打印优化结果print(res.fun, '
', res.success, ' ', res.x, res.message) # 输出最优值、求解状态、最优解
代码解释:
-
导入必要的库: 首先,我们导入
numpy用于数值计算,minimize函数来自scipy.optimize用于进行优化求解。 -
定义目标函数
obj(x): 目标函数是我们希望最小化的函数,这里我们以一个简单的二维二次函数为例。 -
定义约束函数
con1(X)到con4(X): 这些函数定义了变量的边界约束,确保优化过程中的解满足这些限制。 -
创建约束条件列表
mycons: 我们将所有约束函数以字典的形式存储在一个列表中,字典中的'type': 'ineq'表示这些是不等式约束。 -
设置初始值
x0和边界bound:x0是优化算法的起点,bound定义了每个变量的取值范围。 -
创建回调函数和执行优化:
xcall用于存储迭代过程中的解,myobj是用 lambda 表达式定义的目标函数,minimize函数执行优化过程,并将结果保存在res中。 -
保存中间结果和打印最终结果: 代码将每隔 10 次迭代保存一次中间结果到.csv文件,最后打印优化结果,包括最优值、求解状态、最优解以及相关信息。
这段代码展示了如何使用 Python 中的 minimize 函数解决带有边界约束的优化问题。 通过定义目标函数和约束条件,并设置适当的参数,我们可以轻松找到满足条件的最优解。
原文地址: https://www.cveoy.top/t/topic/fOgO 著作权归作者所有。请勿转载和采集!