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

本文介绍了一种基于交叉熵方法的优化算法实现过程。该算法通过迭代更新概率向量来逼近最优解,适用于解决大规模组合优化问题。文中详细展示了算法流程,包括概率向量更新、最优值计算等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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];

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值