?? someoptimiummethod.txt
字號:
x0
mul_count
sum_count[/code]
happy 2006-11-17 10:12[code]%PRP重新開始計算算法(精確一維搜索,k=21,mul_count=9901,sum_count=4470,花費時間很少)
syms x1 x2;
f=50*(x2-x1^2)^2+(1-x1)^2;
v=[x1,x2];
df=jacobian(f,v);
df=df.';
epson=1e-12;x0=[0,0]';g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});k=0;mul_count=0;sum_count=0;
mul_count=mul_count+7;sum_count=sum_count+4;
while(norm(g1)>epson)
mul_count=mul_count+2;sum_count=sum_count+1;
if k==0
p=-g1;
else
bta=g1'*(g1-g0)/(g0'*g0); mul_count=mul_count+5;sum_count=sum_count+4;
if(mod(k,2))
p=-g1+bta*p0; mul_count=mul_count+3;sum_count=sum_count+2;
else
p=-g1;
end
end
y=subs(f,{x1,x2},{x0(1,1)+ar*p(1,1),x0(2,1)+ar*p(2,1)});mul_count=mul_count+18;sum_count=sum_count+12;
result1=qujian(y,ar);
b1=result1(1);mul_count=mul_count+result1(2);sum_count=sum_count+result1(3);
result2=Asearch(y,ar,b1);
arf=result2(1);mul_count=mul_count+result2(2);sum_count=sum_count+result2(3);
x0=x0+arf*p;
g0=g1;
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});
p0=p;
k=k+1;
mul_count=mul_count+9;sum_count=sum_count+7;
end;
k
x0
mul_count
sum_count[/code]
happy 2006-11-17 10:12[code]%DFP計算算法(不精確一維搜索,k=27,mul_count=2326,sum_count=1462,花費時間很少)
syms x1 x2;
f=50*(x2-x1^2)^2+(1-x1)^2;
v=[x1,x2];
df=jacobian(f,v);
df=df.';
epson=1e-12;x0=[0,0]';g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});k=0;H0=[1,0;0,1];mul_count=0;sum_count=0;
mul_count=mul_count+7;sum_count=sum_count+4;
while(norm(g1)>epson&k<1000)
mul_count=mul_count+2;sum_count=sum_count+1;
if k==0
p=-H0*g1;mul_count=mul_count+7;sum_count=sum_count+4;
else
H1=H0-H0*yk*yk'*H0/(yk'*H0*yk)+sk*sk'/(yk'*sk);mul_count=mul_count+36;sum_count=sum_count+18;
p=-H1*g1;mul_count=mul_count+7;sum_count=sum_count+4;
H0=H1;
end
x00=x0;
result=Usearch1(f,x1,x2,df,x0,p);
arf=result(1);Mul=result(2);Sum=result(3);
mul_count=mul_count+Mul;sum_count=sum_count+Sum;
x0=x0+arf*p;
g0=g1;
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});
p0=p;
yk=g1-g0; sk=x0-x00;
k=k+1;
mul_count=mul_count+9;sum_count=sum_count+11;
end;
k
x0
mul_count
sum_count[/code]
happy 2006-11-17 10:12[code]%DFP計算算法(精確一維搜索,k=16,mul_count=9048,sum_count=4251花費時間很少)
syms x1 x2 ad;
f=50*(x2-x1^2)^2+(1-x1)^2;
v=[x1,x2];
df=jacobian(f,v);
df=df.';
epson=1e-12;x0=[0,0]';g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});k=0;H0=[1,0;0,1];mul_count=0;sum_count=0;
mul_count=mul_count+7;sum_count=sum_count+4;
while(norm(g1)>epson)
mul_count=mul_count+2;sum_count=sum_count+1;
if k==0
p=-H0*g1;mul_count=mul_count+7;sum_count=sum_count+4;
else
H1=H0-H0*yk*yk'*H0/(yk'*H0*yk)+sk*sk'/(yk'*sk);mul_count=mul_count+36;sum_count=sum_count+18;
p=-H1*g1;mul_count=mul_count+7;sum_count=sum_count+4;
H0=H1;
end
x00=x0;
y=subs(f,{x1,x2},{x0(1,1)+ad*p(1,1),x0(2,1)+ad*p(2,1)});mul_count=mul_count+18;sum_count=sum_count+12;
result1=interzone(y,ad);
b1=result1(1);mul_count=mul_count+result1(2);sum_count=sum_count+result1(3);
result2=Goldsearch(y,ad,b1);
arf=result2(1);mul_count=mul_count+result2(2);sum_count=sum_count+result2(3);
x0=x0+arf*p;
g0=g1;
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});
p0=p;
yk=g1-g0; sk=x0-x00;
k=k+1;
mul_count=mul_count+9;sum_count=sum_count+11;
end;
k
x0
mul_count
sum_count[/code]
happy 2006-11-17 10:13[code]%DFP計算算法(精確一維搜索,k=16,mul_count=9048,sum_count=4251花費時間很少)
syms x1 x2 ar;
f=x1^2-x1*x2+x2^2+2*x1-4*x2;
v=[x1,x2];
df=jacobian(f,v);
df=df.';
epson=1e-12;x0=[2,2]';g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});k=0;H0=[1,0;0,1];mul_count=0;sum_count=0;
mul_count=mul_count+7;sum_count=sum_count+4;
while(norm(g1)>epson&k<=2)
mul_count=mul_count+2;sum_count=sum_count+1;
if k==0
p=-H0*g1;mul_count=mul_count+7;sum_count=sum_count+4;
else
H1=H0-H0*yk*yk'*H0/(yk'*H0*yk)+sk*sk'/(yk'*sk);mul_count=mul_count+36;sum_count=sum_count+18;
p=-H1*g1;mul_count=mul_count+7;sum_count=sum_count+4;
H0=H1;
end
x00=x0;
y=subs(f,{x1,x2},{x0(1,1)+ar*p(1,1),x0(2,1)+ar*p(2,1)});mul_count=mul_count+18;sum_count=sum_count+12;
result1=qujian(y,ar);
b1=result1(1);mul_count=mul_count+result1(2);sum_count=sum_count+result1(3);
result2=Asearch(y,ar,b1);
arf=result2(1);mul_count=mul_count+result2(2);sum_count=sum_count+result2(3);
x0=x0+arf*p;
g0=g1;
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});
p0=p;
yk=g1-g0; sk=x0-x00;
k=k+1;
mul_count=mul_count+9;sum_count=sum_count+11;
end;
k
x0
mul_count
sum_count[/code]
happy 2006-11-17 10:13[code]%FR直接計算算法(不精確一維搜索,k=163,mul_count=32380,sum_count=20502時間略長)
syms x1 x2;
f=50*(x2-x1^2)^2+(1-x1)^2;
v=[x1,x2];
df=jacobian(f,v);
df=df.';
epson=1e-12;x0=[0,0]';g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});k=0;mul_count=0;sum_count=0;
mul_count=mul_count+7;sum_count=sum_count+4;
while(norm(g1)>epson&k<=1000)
mul_count=mul_count+2;sum_count=sum_count+1;
if k==0
p=-g1;
else
bta=g1'*g1/(g0'*g0);
p=-g1+bta*p0;
mul_count=mul_count+7;sum_count=sum_count+4;
end
result=Usearch1(f,x1,x2,df,x0,p);
arf=result(1);Mul=result(2);Sum=result(3);
mul_count=mul_count+Mul;sum_count=sum_count+Sum;
x0=x0+arf*p;
g0=g1;
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});
p0=p;
k=k+1;
mul_count=mul_count+9;sum_count=sum_count+7;
end;
k
x0
mul_count
sum_count[/code]
happy 2006-11-17 10:13[code]%FR重新開始計算算法(不精確一維搜索,k=496,mul_count=76209,sum_count=47950花費時間最長)
syms x1 x2;
f=50*(x2-x1^2)^2+(1-x1)^2;
v=[x1,x2];
df=jacobian(f,v);
df=df.';
epson=1e-12;x0=[0,0]';g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});k=0;mul_count=0;sum_count=0;
mul_count=mul_count+7;sum_count=sum_count+4;
while(norm(g1)>epson&k<1000)
mul_count=mul_count+2;sum_count=sum_count+1;
if k==0
p=-g1;
else
bta=g1'*g1/(g0'*g0); mul_count=mul_count+5;sum_count=sum_count+2;
if(mod(k,2))
p=-g1+bta*p0; mul_count=mul_count+3;sum_count=sum_count+2;
else
p=-g1;
end
end
result=Usearch1(f,x1,x2,df,x0,p);
arf=result(1);Mul=result(2);Sum=result(3);
mul_count=mul_count+Mul;sum_count=sum_count+Sum;
x0=x0+arf*p;
g0=g1;
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});
p0=p;
k=k+1;
mul_count=mul_count+9;sum_count=sum_count+7;
end;
k
x0
mul_count
sum_count[/code]
happy 2006-11-17 10:13[code]%FR重新開始計算算法(精確一維搜索,k=39,mul_count=17815,sum=7965,花費時間較少)
syms x1 x2 ar;
f=50*(x2-x1^2)^2+(1-x1)^2;
v=[x1,x2];
df=jacobian(f,v);
df=df.';
epson=1e-12;x0=[0,0]';g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});k=0;mul_count=0;sum_count=0;
mul_count=mul_count+7;sum_count=sum_count+4;
while(norm(g1)>epson)
mul_count=mul_count+2;sum_count=sum_count+1;
if k==0
p=-g1;
else
bta=g1'*g1/(g0'*g0); mul_count=mul_count+5;sum_count=sum_count+2;
if(mod(k,2))
p=-g1+bta*p0; mul_count=mul_count+3;sum_count=sum_count+2;
else
p=-g1;
end
end
y=subs(f,{x1,x2},{x0(1,1)+ar*p(1,1),x0(2,1)+ar*p(2,1)}); mul_count=mul_count+18;sum_count=sum_count+12;
result1=qujian(y,ar);
b1=result1(1);mul_count=mul_count+result1(2);sum_count=sum_count+result1(3);
result2=Asearch(y,ar,b1);
arf=result2(1);mul_count=mul_count+result2(2);sum_count=sum_count+result2(3);
x0=x0+arf*p;
g0=g1;
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});
p0=p;
k=k+1;
mul_count=mul_count+9;sum_count=sum_count+7;
end;
k
x0
mul_count
sum_count[/code]
happy 2006-11-17 10:13[code]%FR直接計算算法(精確一維搜索,k=71,mul_count=31360,sum_count=13875,時間略長)
syms x1 x2 ar;
f=50*(x2-x1^2)^2+(1-x1)^2;
v=[x1,x2];
df=jacobian(f,v);
df=df.';
epson=1e-12;x0=[0,0]';g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});k=0;mul_count=0;sum_count=0;
mul_count=mul_count+7;sum_count=sum_count+4;
while(norm(g1)>epson)
mul_count=mul_count+2;sum_count=sum_count+1;
if k==0
p=-g1;
else
bta=g1'*g1/(g0'*g0);
p=-g1+bta*p0;
mul_count=mul_count+7;sum_count=sum_count+4;
end
y=subs(f,{x1,x2},{x0(1,1)+ar*p(1,1),x0(2,1)+ar*p(2,1)});mul_count=mul_count+18;sum_count=sum_count+12;
result1=qujian(y,ar);
b1=result1(1);mul_count=mul_count+result1(2);sum_count=sum_count+result1(3);
result2=Asearch(y,ar,b1);
arf=result2(1);mul_count=mul_count+result2(2);sum_count=sum_count+result2(3);
x0=x0+arf*p;
g0=g1;
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});
p0=p;
k=k+1;
mul_count=mul_count+9;sum_count=sum_count+7;
end;
k
x0
mul_count
sum_count[/code]
happy 2006-11-17 10:29[code]%求min(x1^2+x2^2) 條件:1-x1-x2<=0
%0.618法,f=x1^2+x2^2+ck*(max(1-x1-x2),0)^2
c_jingdu=[0.001,0.001];
a=[0,0];
b=[20,20]; %單谷搜索區(qū)間及其精度
t1=[0.01,0.01];
x11=t1(1,1);
x12=t1(1,2);
t2=[9.90,9.90]; %最初的兩個探索點 %給出最初兩個探索點
x21=t2(1,1);
x22=t2(1,2);
ck=20; %給出罰參數(shù)
f1=x11^2+x12^2+ck*(max(1-x11-x12,0))^2;
f2=x21^2+x22^2+ck*(max(1-x21-x22,0))^2; %給出f的初值,進而迭代
t1=a+0.382*(b-a);
t2=a+0.618*(b-a);
N=10000; %給出迭代次數(shù)
for i=1:N
if f1<=f2
if x21-a(1,1)<=c_jingdu(1,1)
break
else
b=t2;
t2=t1;
t1=a+0.382*(b-a);
f2=f1;
f1=x11^2+x22^2+ck*(max(1-x11-x12,0))^2;
end
else
if b(1,1)-x11<=c_jingdu(1,1)
break
else
a=t1;
t1=t2;
t2=a+0.618*(b-a);
f1=f2;
f2=x21^2+x22^2+ck*(max(1-x21-x22,0))^2;
end
end
ck=ck*2;
end
(t1+t2)/2
t1
t2[/code]
happy 2006-11-17 10:29[code]% mg0523076 潘向昱
%求min(x1^2+x2^2),約束條件1-x1-x2<=0
%0.618法
a=[0,0];
b=[10,10]; %確定單谷搜索[a,b]
c_wucha=[1.0e-7,1.0e-7]; %給定最后精度c_wucha
t1=[0.1,0.1];
t2=[9.9,9.9];
ck=50; %給出罰參數(shù)
f1=t1(1,1)^2+t1(1,2)^2+ck*(max(1-t1(1,1)-t1(1,2),0))^2;
f2=t2(1,1)^2+t2(1,2)^2+ck*(max(1-t2(1,1)-t2(1,2),0))^2; %計算最初的兩個探索點
t1=a+0.382*(b-a);
t2=a+0.618*(b-a);
while(1)
if f1<=f2 %如果f1<f2
if t2(1,1)-a(1,1)<=c_wucha(1,1)
break
else
b=t2;
t2=t1;
t1=a+0.382*(b-a);
f2=f1;
f1=t1(1,1)^2+t2(1,2)^2+ck*(max(1-t1(1,1)-t1(1,2),0))^2;
end
else
if b(1,1)-t1(1,1)<=c_wucha(1,1)
break
else
a=t1;
t1=t2;
t2=a+0.618*(b-a);
f1=f2;
f2=t2(1,1)^2+t2(1,2)^2+ck*(max(1-t2(1,1)-t2(1,2),0))^2;
end
end
ck=ck*2; %調(diào)整罰參數(shù)
end
(t1+t2)/2
t1
t2[/code]
yangji 2006-11-22 15:38好帖,不頂不行,多謝樓主了
liweidlut 2006-11-22 20:24好貼 哪能不頂
謝了啊
coldspring 2006-11-23 16:22太好了 ,對我的幫助就不說啦,無以用語言表達(dá)
coldspring 2006-11-23 19:2615樓 [color=Red][u][size=5]result1=interzone(y,ad);
result2=Goldsearch(y,ad,b1);[/[/size][/u]color]在那?
樓主能不能發(fā)一下
[[i] 本帖最后由 coldspring 于 2006-11-23 19:37 編輯 [/i]]
coldspring 2006-11-23 20:02%DFP計算算法(精確一維搜索,k=16,mul_count=9048,sum_count=4251花費時間很少)
syms x1 x2 ar;
這里面的 ar 怎么解釋!
suffer 2006-11-25 10:46[quote]原帖由 [i]coldspring[/i] 于 2006-11-23 19:26 發(fā)表
15樓 result1=interzone(y,ad);
result2=Goldsearch(y,ad,b1);color]在那?
樓主能不能發(fā)一下 [/quote]
找了一下沒有找到,Goldsearch估計是黃金分割搜索
suffer 2006-11-25 10:48[quote]原帖由 [i]coldspring[/i] 于 2006-11-23 20:02 發(fā)表
%DFP計算算法(精確一維搜索,k=16,mul_count=9048,sum_count=4251花費時間很少)
syms x1 x2 ar;
這里面的 ar 怎么解釋! [/quote]
你是指在算法中的含義?
頁: [1] 2
查看完整版本: 一些簡單最優(yōu)化方法的matlab實現(xiàn)
Powered by Discuz! Archiver 6.0.0 ? 2001-2006 Comsenz Inc.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -