yqchenlolo 发表于 2006-6-24 19:48

[求助]请教最优化问题

求解一个问题,<BR>目标函数是2次的,约束有线性的,有非线性的<BR>比如求解:<BR>   min   1/2 * x' * H * x + f' *x<BR>subject to :A*x&lt;=b<BR>                   Aeq*x=beq<BR>                   x' * H1 *x =b1<BR>                   x' * H2 *x&lt;=b2<BR>好像没找到有类似的命令,请问是否有这样的命令呢?<BR>或者有谁编过类似的代码可否共享一下?<BR>谢谢了

happy 发表于 2006-6-24 21:10

回复:(yqchenlolo)[求助]请教最优化问题

fmincon不行吗?

yqchenlolo 发表于 2006-6-25 10:41

min fun:=1/2 * x' * H * x + f' *x<BR>s.t ......<BR><BR>x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...);<BR>问题是我的目标函数里面的变量个数比较多,<BR>这样定义成函数好像比较麻烦的样子。<BR>而且当固定变量个数的时候,我的目标函数的H和f并不是固定的<BR>是在程序中求出来之后然后才定义的相应的目标函数,<BR>比如我的变量x的长度为16,程序算出了一个H(16×16)和f(16×1)的,如何定义出这个fun ?<BR>请happy教授指教,谢谢了 :)

yqchenlolo 发表于 2006-6-25 11:26

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...);<BR>顺便问一下,命令中的P1和P2怎么用?看了帮助不太明白<BR>qqq

cdwxg 发表于 2006-6-25 11:56

doc 一下<BR>里面应该有例程的。

yqchenlolo 发表于 2006-6-25 15:07

doc 过了,只有一个很简单的例子,三个变量的,也没有非线性约束,口可口可<BR>搞的真头痛啊

yqchenlolo 发表于 2006-6-25 16:08

<P>刚才找到了一个fmincon的大尺度的例子:<BR>里面有一个自带的函数<BR>function = tbroyfg(x,<FONT color=#f70909>dummy</FONT>)<BR>%TBROYFG Test problem</P>
<P>%   Copyright 1990-2002 The MathWorks, Inc.<BR>%   $Revision: 1.5 $$Date: 2002/03/12 20:36:23 $<BR>%   Thomas F. Coleman 7-1-96</P>
<P><FONT face=黑体 color=#ee1111>n=length(x);% n should be a multiple of 4</FONT></P>
<P>p=7/3; y=zeros(n,1);<BR>i=2:(n-1);<BR>y(i)= abs((3-2*x(i)).*x(i)-x(i-1)-x(i+1)+1).^p;<BR>y(n)= abs((3-2*x(n)).*x(n)-x(n-1)+1).^p;<BR>y(1)= abs((3-2*x(1)).*x(1)-x(2)+1).^p;<BR>j=1:(n/2); z=zeros(length(j),1);<BR>z(j)=abs(x(j)+x(j+n/2)).^p;<BR>f=1+sum(y)+sum(z);<BR>%<BR>% Evaluate the gradient.<BR>if nargout &gt; 1<BR>   p=7/3; n=length(x); g = zeros(n,1); t = zeros(n,1);<BR>   i=2:(n-1);<BR>   t(i)=(3-2*x(i)).*x(i)-x(i-1)-x(i+1)+1;<BR>   g(i)= p*abs(t(i)).^(p-1).*sign(t(i)).*(3-4*x(i));<BR>   g(i-1)=g(i-1)-p*abs(t(i)).^(p-1).*sign(t(i));<BR>   g(i+1)=g(i+1)-p*abs(t(i)).^(p-1).*sign(t(i));<BR>   tt = (3-2*x(n)).*x(n)-x(n-1)+1;<BR>   g(n)=g(n)+p*abs(tt).^(p-1).*sign(tt).*(3-4*x(n));<BR>   g(n-1)=g(n-1)-p*abs(tt).^(p-1).*sign(tt);<BR>   tt=(3-2*x(1)).*x(1)-x(2)+1;<BR>   g(1)=g(1)+p*abs(tt).^(p-1).*sign(tt).*(3-4*x(1));<BR>   g(2)=g(2)-p*abs(tt).^(p-1).*sign(tt);<BR>   j=1:(n/2); t(j)=x(j)+x(j+n/2);<BR>   g(j) = g(j)+p*abs(t(j)).^(p-1).*sign(t(j));<BR>   jj=j+(n/2);<BR>   g(jj) = g(jj)+p*abs(t(j)).^(p-1).*sign(t(j));<BR>   grad = g;<BR>end<BR>这个函数的定义不太明白,那个dummy什么作用?<BR>还有<BR><FONT face=黑体 color=#ee1111>n=length(x);% n should be a multiple of 4<BR><FONT color=#000000>这句什么意思?x不是自变量么?如果是定义函数的时候怎么能预先知道x的长度呢?<BR>还有注释说n必须是4的倍数?</FONT></FONT></P>

happy 发表于 2006-6-25 18:55

回复:(yqchenlolo)x = fmincon(fun,x0,A,b,Aeq,beq...

<DIV class=quote><B>以下是引用<I>yqchenlolo</I>在2006-6-25 11:26:09的发言:</B><BR>x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...);<BR>顺便问一下,命令中的P1和P2怎么用?看了帮助不太明白<BR>qqq</DIV>
<P>P1和P2是传递用户自定义变量用的</P>
页: [1]
查看完整版本: [求助]请教最优化问题