24小时热门版块排行榜    

查看: 1910  |  回复: 5
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

dellluoluo

金虫 (小有名气)

[求助] 求助:资源优化问题的遗传算法matlab编程

最近在研究项目资源优化问题,其中一个问题即工期固定,资源均衡问题,用遗传算法来做,使用matlab的遗传算法工具箱自己编程来实现,有详细的文献和例子,只做单资源的,需要将目标函数写成.m 文件,
遇到困难:目标函数是使得资源均衡,满足工序的合适开始时间即基因值
,困难是基因值不体现在目标函数的显式表达式中,而是在约束条件中,不知道怎么处理?
如果有哪位虫友感兴趣并愿意提供帮助,将不胜感激!如果需要,我可以把例子附上。

图1.gif



图2.gif
图片不清晰,附上文献的链接,文中的测试问题1,图5
http://www.sciencedirect.com/sci ... i/S0926580599000114

[ Last edited by dellluoluo on 2013-4-2 at 17:45 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dellluoluo

金虫 (小有名气)

引用回帖:
2楼: Originally posted by libralibra at 2013-04-02 18:37:53
GA都一个流程,约束一般都跟penalty function有关系,如果不满足约束条件,增加penalty值就会让这些'非优良'个体避免遗传给下一代.

谢谢你的关注,可我还是不太清楚怎么做,我给你发了消息!
3楼2013-04-03 10:46:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 6 个回答

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
dellluoluo(ben_ladeng代发): 金币+8, 应楼主要求代发金币 2013-06-01 13:31:46
ben_ladeng: 金币+2, 谢谢专家 2013-06-01 13:32:36
ben_ladeng: 专家考核, 代发金币 2013-06-01 13:33:33
ben_ladeng: 2013-06-01 13:33:59
dellluoluo(ben_ladeng代发): 金币+2 2013-06-01 13:34:11
GA都一个流程,约束一般都跟penalty function有关系,如果不满足约束条件,增加penalty值就会让这些'非优良'个体避免遗传给下一代.
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2013-04-02 18:37:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dellluoluo

金虫 (小有名气)

想得到您的相助!

%programm:
%计算工期固定,资源均衡的程序,为资源均衡之前的结果,得到RLI=76
clear;
T0=16;%固定工期,由project软件求得关键路径
n=11;%活动数
for j=1:T0
for i=1:n
     ri=[2 1 4 4 2 4 6 0 2 1 2];%每个活动日资源
  % ri=[2 1 4 4]
     di=[2 4 1 4 3 6 6 1 4 5 1];%每个活动持续工期
   %di=[2 4 1 4]
     esi=[0 0 0 2 4 4 1 7 7 10 15];%每个活动最早开始时间
   %esi=[0 0 0 2]
     efi=esi+di;%每个活动最早完成时间
     xij=zeros(i,j);%系数矩阵
     r_=sum(ri*di')/T0;%每个活动平均日资源需求
     ti=esi;%每个活动实际开始时间
     rij=0;
end;
end;
for j=1:T0
for i=1:n
    if (j>= ti(i)+1)&(j<=ti(i)+di(i))
      xij(i,j)=1;
      rij=ri*xij;
      tii(i)=ti(i);
      RLI=sum(abs(rij-r_));%目标函数,绝对误差和
      end
end
end
x=1:T0;
bar(x,rij);%直方图
xlabel('Time');
ylabel('Daily Resource Demand Before Leveling');
上面这个已经得到结果!下面这个是想要得到的结果:
%programm:想要得到的结果,即想要通过遗传算法的计算,找到一组合适的基因值,也即是
%每个活动合适的实际开始时间ti属于[esi(i);esi(i)+tfi(i)],得到如下的结果,使RLI=25。
clear;
T0=16;%固定工期
n=11;%活动数
for j=1:T0
for i=1:n
     ri=[2 1 4 4 2 4 6 0 2 1 2];%每个活动日资源
  % ri=[2 1 4 4]
     di=[2 4 1 4 3 6 6 1 4 5 1];%每个活动持续工期
   %di=[2 4 1 4]
     esi=[0 0 0 10 7 4 1 14 11 10 15];%每个活动最早开始时间
   %esi=[0 0 0 2]
     efi=esi+di;%每个活动最早完成时间
     xij=zeros(i,j);%系数矩阵
     r_=sum(ri*di')/T0;%每个活动平均日资源需求
     ti=esi;%每个活动实际开始时间%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     %(需要经过遗传算法计算后得到的结果)%
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     rij=0;
end;
end;
for j=1:T0
for i=1:n
    if (j>= ti(i)+1)&(j<=ti(i)+di(i))
      xij(i,j)=1;
      rij=ri*xij;
      tii(i)=ti(i);
      RLI=sum(abs(rij-r_));%目标函数
      end
end
end
x=1:T0;
bar(x,rij);%直方图
xlabel('Time');
ylabel('Daily Resource Demand After Leveling');

下面想用GA求:程序没有写明白?????????????????
%GA programm
T0=16;%固定工期
%T0=6;
n=11;%活动数
for j=1:T0
for i=1:n
     ri=[2 1 4 4 2 4 6 0 2 1 2];%每个活动日资源
  % ri=[2 1 4 4]
     di=[2 4 1 4 3 6 6 1 4 5 1];%每个活动持续工期
   %di=[2 4 1 4]
     esi=[0 0 0 2 4 4 1 7 7 10 15];%每个活动最早开始时间(遗传算法应用之前)
   %esi=[0 0 0 2]
     efi=esi+di;%每个活动最早完成时间
     lsi=[6 0 3 10 8 4 4 14 11 10 15];%最迟开始时间
     tfi=lsi-esi;%总时差
     
     xij=zeros(i,j);%系数矩阵
     r_=sum(ri*di')/T0;%每个活动平均日资源需求
     ti=esi;%每个活动实际开始时间
     rij=0;
end;
end;
for j=1:T0
for i=1:n
    if (j>= ti(i)+1)&(j<=ti(i)+di(i))
      xij(i,j)=1;
      rij=ri*xij;
      tii(i)=ti(i);
      RLI=sum(abs(rij-r_));%目标函数,绝对误差和
      end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%想把上面这一段写成function的形式来调用!不清楚怎么写?%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%定义 遗传算法参数
NVAR=11;%变量维数
NIND=50;%基因规模
PRECI=20;%基因长度
GGAP=0.9;%代沟
Pc=0.5;%交叉率
Pm=0.4;%变异率
MAXGEN=100;%演化代数
%建立区域扫描器%%%%%%%%%%%%
%想在下面这段遗传算法的程序基础上修改,这个程序是雷英杰那个书上的的
%7.3求多元多峰函数优化的实例%%%%%%%%%%%%%,不会写目标函数????
%这个目标函数在遗传算法中不知道怎么写 RLI=sum(abs(rij-r_))
%关键是基因值没有体现在目标函数中,只是隐含在xij中,当ti在活动的
%【esi,esi+tfi】之间时,xij=1,才计算RLI. else xij=0不计算
%最终得到的结果是找到一组合适的ti,使得计算的RLI=25
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
trace = zeros(MAXGEN,NVAR);
for i=1:NVAR
    FieldD = [rep([PRECI],[1,NVAR]);rep([esi(i);esi(i)+tfi(i)],[1,NVAR]);rep([1;0;1;1],[1,NVAR])];
end;
Chrom=crtbp(NIND,NVAR*PRECI);%创建初始种群
gen = 0;
trace=zeros(MAXGEN,2);
x=bs2rv(Chrom,FieldD)
ObjV= RLI;%%%%%%%%%%%%%%%%%%这个函数不会写?
while gen     FitnV=ranking(ObjV);
    SelCh=select('sus',Chrom,FitnV,GGAP);
    SelCh=recombin('xovsp',SelCh,0.5);
    SelCh=mut(SelCh,0.4);
    x=bs2rv(Chrom,FieldD)
    ObjVSel=RLI;%%%%%%%%%%%%%%%%%%%%%%%%????????
    [Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
    gen=gen+1;
    %输出最优解
    [Y,I] = min(ObjVSel);
    Y,bs2rv(Chrom(I,,FieldD);
  %  plot(variable(I),Y,'bo');
    trace(gen,1)=min(ObjV);
    trace(gen,2)=sum(ObjV)/length(ObjV);
    if (gen==100)
        figure(2);
        plot(ObjV);hold on;
        plot(ObjV,'b*');grid;
    end
end
figure(3);clf;
plot(trace(:,1));hold on;
plot(trace(:,2)','-.');grid;
%legend('aa','bb').

4楼2013-04-08 13:57:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dellluoluo

金虫 (小有名气)

补充:我这个问题创建初始种群想用实数编码,原来我弄错了,更正,有没有虫友愿意帮忙啊
5楼2013-04-10 21:14:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见