您的位置:首页 > 其它

最大割问题解决新方法-CE

2008-06-01 22:17 176 查看
N=1000;
m=200;n=400;
%n=200;m=100;
%m=50;n=100;
%n=50;m=25;
graph_num=13;
x=1:n;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pp1=1/2*ones(1,n-1);
P=[1 pp1];
subplot(graph_num,1,1);
bar(x,P',0.2);
pp1=ones(1,m);
pp2=zeros(1,n-m);
P_goal=[pp1 pp2];%目标最优化参考概率向量
Rho=0.1;%分位置信度
d=2;
%eu=10;%欧几里得距离变量
%error_precision=1E-3;
t=1;
%生成人造无向图,用代价矩阵Cost表示
V_up=m;
V_down=n-V_up;
element=1;
Z11=randSymmetric(V_up);
Z22=randSymmetric(V_down);
B12=ones(n-V_up)*element;
B21=ones(n-V_down)*element;
Cost=[Z11 B12;B21 Z22];
%进入主程序区
tic
%while eu>error_precision
while t<25
X=[];
for i=1:N
Vec=binornd(1,P);
X=[X;Vec];
S(i)=sMax(n,Cost,Vec);
end
SS=S;
SS=sort(SS);
r(t)=SS((1-Rho)*N);
%开始计算P(t)通过算法2.3(交叉熵指南)
for j=2:n
deno=0;
numer=0;
for i=1:N
if(S(i)>=r(t))
deno=deno+1;
if(X(i,j)==1)
numer=numer+1;
end
end
end
P(j)=numer/deno;
end
%将每次导入概率用条形图表示出来
if(t>=10)
figure(2);
subplot(graph_num,1,t-9);
else
% figure(1);
subplot(graph_num,1,t+1);
end
bar(x,P',0.2);
%计算欧几里得距离
std=0;
for i=1:n %求P_goal与P(t)的eu 看看最终交叉熵方法产生的最优解与最优解有接近
std=(P(i)-P_goal(i))^2+std;
end
eu=sqrt(std);
fprintf('%d/t/t%.1f/t/t%.1f/t/t%.3f/n',t,r(t),SS(N),eu)
if(t>=3)
if(r(t)==r(t-1)&r(t-1)==r(t-d))
break
end
end
t=t+1;
end
toc
%time=toc;
%统计每次执行的时间,迭代次数,最优值
%Iterator=[];
%SSS=[];
%tt=[];
%Iterator=[Iterator;t];
%SSS=[SSS;r(t)];
%tt=[tt;time];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: