您现在的位置:首页 >> 技术文章 >> MATLAB技术 >> 内容

MATLAB代做-python代做-FPGA代做- SA模拟退火算法

时间:2019-5-16 0:49:10 点击:

  核心提示:MATLAB代做-python代做-FPGA代做- SA模拟退火算法...
function [bestCost,IteratorSolution] = SA(ETC,adjMatrix,memReq,memCap,speed,machRelia,linkRelia)
    [taskNum,machNum] = size(ETC); %size()函数表示矩阵的大小,获取数组的行数和列数。
    S = randint(1,taskNum,[1,machNum]);   %随机初始一个解,产生均匀分布的随机整数的1×taskNum的矩阵,整数在1~machCap之间。
    T = IniTemp(S,ETC,adjMatrix,memReq,memCap);     %给定初温T。
%   Tlow = IniTemp(S,ETC,adjMatrix,memReq,memCap,0.50001);
    [cost,memLoad] = calcCost(S,ETC,adjMatrix,memReq,memCap); 
    Alpha = 0.9;  %退温系数  alpha=0.90                             %the value of Alpha 
    Bita = 1.05;                                                    %the value of Bita
    Nrep = taskNum * machNum;   %任务数和机器数的乘积,即内循环(the count of inner loop)的次数。
    IteratorSolution = [];      %记录内循环中的变化~record the change among the loop
    bestS = S;  %初始最好的任务分配方案。
    bestCost = cost; %初始最好的执行代价。
    deadline1 = 0;   %外循环~the count of the outer loop
    while deadline1 <= 20 %连续20次没有找到更好的解,则终止算法
        findBest = 0;     %判断有没有找到更好的解
        iter = 1; 
        deadline2 = 0;    %连续采样,第二个阈值
        while (iter <= Nrep)%当满足不大于内循环的次数。
            triS = S;
            triCost = cost;
            t = fix(1 + rand * taskNum); %随机找一个任务
            p = triS(t); %任务对应的机器
            q = fix(1 + rand * machNum); %随机找一个机器
            while p == q
                q = fix(1 + rand * machNum);
            end
            triS(t) = q; %迁移到另一台机器
            triCost = triCost - ETC(t,p) + ETC(t,q); %目标函数值是多少
            adjTask = find(adjMatrix(t,:));%邻接矩阵,找到他所有的邻接任务
            for k = adjTask         %alter communication cost
                switch triS(k) %看看邻接任务在哪
                    case q %如果在q上,则通信代价都可以节省
                        triCost = triCost - adjMatrix(t,k);
                    case p %如果在p上,则通信代价都能增加
                        triCost = triCost + adjMatrix(t,k);
                end
            end
            if (memLoad(p) > memCap(p))          %calculate violation
                if (memLoad(p) - memReq(t)) <= memCap(p) %所有任务的内存需求小于他的容量
                    triCost = triCost - (memLoad(p) - memCap(p));
                else
                    triCost = triCost - memReq(t);
                end
            end
            % there exists no memory violation before migration
            if (memLoad(q) + memReq(t)) > memCap(q)%机器q上的内存约束情况
                if memLoad(q) <= memCap(q) 
                    triCost = triCost + (memLoad(q) + memReq(t) - memCap(q));
                else % there exists memory violation before migration
                    triCost = triCost + memReq(t);
                end
            end
            Dita = triCost - cost; %看看代价是增加了还是减少了
            if Dita < 0 %如果代价减少了,则得到更优的解
                S = triS;
                cost = triCost;
                memLoad(p) = memLoad(p) - memReq(t);
                memLoad(q) = memLoad(q) + memReq(t);
                if (triCost < bestCost)
                    bestS = triS;
                    bestCost = triCost;
                    deadline2 = 0;
                    findBest = 1;
                end
            else
                if rand < exp(-Dita/T) %计算概率,按照概率接受这个解
                    S = triS;
                    cost = triCost;
                    memLoad(p) = memLoad(p) - memReq(t); %机器p上的内存情况
                    memLoad(q) = memLoad(q) + memReq(t); %机器q上的内存情况
                end
                deadline2 = deadline2 + 1; %如果连续找不到更好的解,则让deadline2累加
                if deadline2 >= taskNum * machNum
                    break; %退出内部循环
                end
            end
            iter = iter + 1;
            IteratorSolution = [IteratorSolution,cost];
        end
        T = Alpha * T; %降温
        Nrep = Bita * Nrep; %内部循环次数我要增加
        if findBest %如果得到更好的解,deadline1就要清零
            deadline1 = 0;
        else
            deadline1 = deadline1 + 1; %否则自加
        end
    end

联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

网站:http://www.mat7lab.com/

网站:http://www.hslogic.com/

微信扫一扫:

作者:SA模拟退火算法 来源:SA模拟退火算法
  • 您是如何找到本站的?
  • 百度搜索
  • Google搜索
  • 查阅资料过程中
  • 论坛发现
  • 百度贴吧发现
  • 朋友介绍
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
  • matlab代做|matlab专业代做|python代做|matlab淘宝代做|matlab代写(www.hslogic.com) © 2019 版权所有 All Rights Reserved.
  • Email:highspeed_logic@163.com 站长QQ: 1224848052

    专业代做/代写/承接、MATLAB、SIMULINK、FPGA项目、博士/硕士/本科毕业设计、课题设计、论文,毕业论文,Coursework、Eassy、Assignment