【问题标题】:Two dimensional Optimization (minimization) in Python (using scipy.optimize)Python中的二维优化(最小化)(使用scipy.optimize)
【发布时间】:2012-08-25 08:56:29
【问题描述】:

我正在尝试优化(最小化)二维函数E(n,k),定义如下:

error=lambda x,y,w: (math.log(abs(Tformulated(x,y,w))) - math.log(abs(Tw[w])))**2 + (math.atan2(Tformulated(x,y,w).imag,Tformulated(x,y,w).real) - math.atan2(Tw[w].imag,Tw[w].real))**2

其中Tformulated的获取方式如下:

def Tformulated(n,k,w):
    z=1j
    L=1
    C=0.1
    RC=(w*L)/C
    n1=complex(1,0)
    n3=complex(1,0)
    n2=complex(n,k)
    FP=1/(1-(((n2-n1)/(n2+n1))*((n2-n3)/(n2+n3))*math.exp(-2*z*n2*RC)))
    Tform=((2*n2*(n1+n3))/((n2+n1)*(n2+n3)))*(math.exp(-z*(n2-n1)*RC))*FP
    return Tform

和Tw 是一个先前计算的具有复值元素的列表。 我真正想做的是对于w 的每个值(用于“错误x,y,w ....”)我想最小化x 和@987654328 的值的函数“错误” @。 w 范围从 1 到 2048。所以,它基本上是一个 2D 最小化问题。我已经尝试过编程(尽管我一直不知道使用什么方法以及如何使用它);我的代码如下:

temp=[]
i=range(5)
retval = fmin_powell(error , x ,y, args=(i) , maxiter=100 ,maxfun=100)
temp.append(retval)

我不确定fmin_powell 是否正确。

【问题讨论】:

  • 您似乎正在尝试最小化 3D 功能 error?

标签: python optimization scipy minimization


【解决方案1】:

这是一个最简单的例子:

from scipy.optimize import fmin

def minf(x):
  return x[0]**2 + (x[1]-1.)**2

print fmin(minf,[1,2])

[出]:

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 44
         Function evaluations: 82
[ -1.61979362e-05   9.99980073e-01]

这里的一个可能的问题是最小化例程需要一个列表作为参数。有关所有血腥细节,请参阅the docs。不确定是否可以直接最小化复值函数,您可能需要分别考虑实部和虚部。

【讨论】:

  • 哦,谢谢。我仍然想要一个答案 - 用于 2D 最小化的方法是什么?
  • @user1636363 这是用于 2D 的(x 是一个长度为 2 的数组),令人困惑的是您的函数(错误)是 3D 并且您尚未定义 E(n,k)。
  • E(n,k) 是写为 "error x,y,w : ...." 的函数。在每次调用函数之前,这里的 'w' 的值都固定为一个整数值。 (实际上,每次我开始最小化时,我都会将一个整数值传递给 'w' 的函数)。所以,这是一个 2D 最小化问题;很抱歉造成混乱
  • @user1636363:使用哪种方法取决于问题。在您的特定情况下,哪一个是最好的,我不知道。我会做什么,我会从最简单的(fmin)开始,如果还不够,那就尝试更复杂的。
  • 我对 scipy.optimize 模块的方法描述有点困惑;我不知道哪些是用于 2D 最小化的
猜你喜欢
  • 2014-09-05
  • 2016-08-23
  • 2019-09-17
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 2017-02-21
相关资源
最近更新 更多