【发布时间】:2014-08-14 08:40:31
【问题描述】:
我需要最小化一个函数,比如说五个变量(x[0] 到 x[4])
要最小化的标量函数由X'*H*X 给出。目标函数看起来类似于:
def objfun(x):
H = 0.1*np.ones([5,5])
f = np.dot(np.transpose(x),np.dot(H,x))[0][0]
return f
这将返回单个标量值。
问题是,我如何实现由以下给出的约束方程:
A*X - b = 0
其中 A 和 b 在每次运行中都会发生变化。一个随机的例子是:
A =
array([[ 1, 2, 3, 4, 5],
[ 2, 1, 3, 4, 5],
[-1, 2, 3, 0, 0],
[ 0, -5, 6, 3, 2],
[-3, 5, 6, 2, 8]])
B =
array([[ 0],
[ 2],
[ 3],
[-2],
[-7]])
A 和 B 不能硬编码到约束函数中,因为它们在每次运行中可能不同。变量没有界限,不需要指定优化方法。
编辑
我意识到,对于具有 5 个变量的优化问题,只有 5 个约束方程可以通过求解方程得到唯一的解决方案。 那么 A 可以定义为的情况如何:
A =
array([[ 1, 2, 3, 4, 5],
[ 2, 1, 3, 4, 5],
[-1, 2, 3, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0]])
B =
array([[ 0],
[ 2],
[ 3],
[ 0],
[ 0]])
所以我们有一个带有 3 个线性约束的 5 变量优化问题。
【问题讨论】:
标签: python python-2.7 scipy mathematical-optimization