sun1993 发表于 2009-1-5 20:03

请教一个优化目标函数的算法

请教大家一个问题:

两个参数,可以算出一系列分立的数值,类似能级那样的
不知道这两个参数的取值
现在我让它们都从负无穷大变化到正无穷大
希望能找到合适范围的值,使算出的结果变化很小,也就是要结果收敛

请问这个的目标函数该怎样写?又没有标准值可进行比较

谢谢

cooller 发表于 2009-1-7 12:40

我感觉应该这样,目标应该为函数值差值绝对值,要求它在某一个约定的范围内变化。求出对应的参数范围来。

logxing 发表于 2009-1-24 23:30

最近我倒是做了不少优化的工作,不过没明白楼主的意思。

zhoulon 发表于 2009-2-3 08:53

我也没有看明白,希望搂住具体一点,这样说太笼统了。

sun1993 发表于 2009-2-8 20:44

问题大体上是这样:
      两个参数 A,B,能算出一系列由小到大,由负到正排列的数值 E1,E2,E3 ,E4 。。。
现在想确定A,B的大小,至少是个比较小的范围,使得当A,B取这个范围中的值算出来的结果相差很小,
也就是A,B在这个取值范围内算出的结果比较稳定。

我正在试的,是算A,B每个取值下的 abs(E1-E2) ,相邻的进行对比,当差异小于一极小值时,就认为稳定了

logxing 发表于 2009-2-8 21:35

目标函数就是
max(abs(E_i+1-E_i))
其中E_i=e(A,B,i)
当作一般的二元函数极值问题,看看能不能用高斯牛顿法,我最近解决的一个问题跟楼主的问题差不多。

sun1993 发表于 2009-2-11 16:56

如果是三个待定参数,用相邻结果的差值作目标函数
怎么觉得不太可行
大家给点意见哈

logxing 发表于 2009-2-11 21:21

那个目标是你自己定的啊。又或者你想定义为Ei的最大值减去最小值也行。这个不是关键,关键是这个函数相对于参数来说不连续,或是不单调就不好应用高斯牛顿法了。你不如把你的问题整个说出来,就是那个E_i=e(A,B,i)到底是什么,你的优化目标又是什么。

sun1993 发表于 2009-2-13 15:35

我正在尝试,等搞定我再详细说一下
现在我想,三个参数,可不可以先两两优化
   比如说先确定好 X,Y的,再确定好Y,Z,最后再确定X,Z的
最后归到一起在一个小范围里进行三个的优化
不知道这样的可靠性如何?

logxing 发表于 2009-2-13 18:05

两两优化应该不行。所谓极值就是函数对参数的偏导=0,有几个参数就得到几个方程,解方程组就得到了最优参数。两两优化相当于设定1个参数不动,这样得到的不完全维数的最优结果可能离真正的最优结果很远。如果按你上面说的两两优化过程重复次数足够的话可能可以得到正确结果,不过收敛可能会很慢。两两优化的思维有点像梯度法,不过效果肯定低于梯度法,也不能保证总是正确的。

sun1993 发表于 2009-2-14 20:27

回复 8楼 logxing 的帖子

越想越乱了
问题和前面一样的,只不过现在发现应该是三个参数 A,B,C 共同决定的 E1,E2,E3,。。。
现在用了个很笨的方法,先在一个大范围找一些点(A,B,C),算出每种情况的结果,所有的两两进行比较,
找出相差比较小的情况,根据所对应的点缩小参数的范围,然后再取点算,比较。。。

其实要求E值稳定,也就是E对A,B,C的一次导数为0,应该也可以用求最小值的方法
但现在还没能转过弯来 sigh!

logxing 发表于 2009-2-14 20:49

你这样做收敛很慢很慢很慢......
到底这个E是个什么形式,很长吗?你这里i也是一个重要的参数你的目标是E稳定,如Emax-Emin取极值。而不是E取极值。

sun1993 发表于 2009-2-16 22:56

倒腾的结果很糟糕,很有挫败感:'(
E的形式:
比如 (A1,B1,C1)算出E1=-9.87654321,E2=-7.65432198。。。。E(n)=1.23456789,E(n+1)=3.45678912。。。
对应另一组参数(A2,B2,C2)可算出另一系列的分立的值E1=。。。E2=。。。
现在比较关心 0 附近的结果,所以只care 0 附近的几个结果
前面直接一一比较对应几个值的差异,很是麻烦,也没有什么结果
谢谢logxing,我再用您的建议试一下

logxing 发表于 2009-2-17 00:14

能不能把E写成一个函数,如下
function E (A as double ,B as double,C as double ,i as double) as double
......
end function
这样以后调用,调试很方便。看你的描述似乎每算一组参数都很累的样子。手动比较很难行得通,尤其是你这个是多维的。
上面的函数写出来问题就解决九成了。

sun1993 发表于 2009-2-17 09:23

E是通过将A,B,C带入另一个程序算出来的
本身不能直接写出解析的形式
页: [1] 2
查看完整版本: 请教一个优化目标函数的算法