zhlong 发表于 2007-6-10 20:31

遗传算法如何进行整数规划问题?

看到一个这样的问题,不知道怎样处理,对遗传算法也不熟悉,请各位指教,谢谢!

请问怎么应用matlab遗传算法工具箱解决离散变量的问题?

比如函数以=x+10*sin(5*x)+7*cos(4*x);
如果x是区间(0,9)之间的连续变量,则
%编写目标函数
      function=fitness(sol,options)
      x=sol(1);
      eval=x+10*sin(5*x)+7*cos(4*x);
%把上述函数存储为fitness.m文件并放在工作目录下
initPop=initializega(10,,'fitness');%生成初始种群,大小为10
    =ga(,'fitness',[],initPop,,'maxGenTerm',25,'normGeomSelect',...
      ,['arithXover'],,'nonUnifMutation',) %25次遗传迭代

运算结果为:x =
    7.8562   24.8553(当x为7.8562时,f(x)取最大值24.8553)

但是如果x是离散变量,比如x的取值只能是0到9之间的整数,那么该怎样用遗传算法来解决呢?
最近在研究中,但对此很困惑,望懂者帮忙解决,深表感谢!

心灯 发表于 2007-6-10 20:35

把“1e-6”改成1就行了,这个是优化变量的精度设置项,即设计变量与它之前或之后的变量之间的差。

二进制遗传算法,必须设置精度,才能确定编码的串长。这个过程,实际上相当于对设计变量进行离散化。

[ 本帖最后由 心灯 于 2007-6-10 20:39 编辑 ]

zhlong 发表于 2007-6-10 20:45

回复 #2 心灯 的帖子

结果还是
x =

    7.8563   24.8553
:@(

心灯 发表于 2007-6-10 21:31

回复 #3 zhlong 的帖子

你用的好像是gaot5工具箱,还有1个1e-6在前面呢,你找找,在生成初始群体之前。

zhlong 发表于 2007-6-10 22:19

回复 #4 心灯 的帖子

心灯元老,我用的确实是gaot5,能直接给出上面这个列子的解答吗?

心灯 发表于 2007-6-11 12:33

哦,我也疏忽了你的问题的特殊性。
看你前面题目中的语句,我看你用的是gaot这个工具箱,所以就顺着你的思路,调整精度来了。 :)
仔细看了一下,gaot工具箱本身不适合整数规划问题,因为采用的是定步长的二进制编码,必然会造成字符串的冗余,而在这里并没有考虑这个问题,所以在b2f和f2b这两个文件里就出现了问题,造成了二进制编码和实数值的不对应。如果仍要处理的话,那么除了把精度给改一下,还要在b2f和f2b两个文件里进行修正,采用遗传操作的时候可能也要相应处理一下。
建议你可以看一些整数规划方面的论文,采用变步长的二进制编码或者别的方式。
因为我没有处理过整数规划问题,所以只能建议一下,考虑可能不周。

[ 本帖最后由 心灯 于 2007-6-11 13:20 编辑 ]

zhlong 发表于 2007-6-11 14:15

回复 #6 心灯 的帖子

谢谢心灯,我再学习学习!

dingd 发表于 2007-6-12 17:01

答案:
x = 8
Max. = 21.2906951283391

如果图高效、方便,这类问题推荐1stOpt、Lingo

zhlong 发表于 2007-6-12 18:02

回复 #8 dingd 的帖子

谢谢!
你是用GA做的吗?如果一定要用GA,那怎么做?

dingd 发表于 2007-6-12 22:12

1stOpt就有GA算法,不用自己编程了。

zhlong 发表于 2007-6-12 22:27

回复 #10 dingd 的帖子

谢谢!

rohui 发表于 2007-7-29 17:08

zhlong,你好,我也遇到你说的问题,请问你现在已经解决了吗?

rohui 发表于 2007-7-29 17:09

zhlong,你好,我也遇到跟你同样的问题,请问你现在已经解决了吗?
页: [1]
查看完整版本: 遗传算法如何进行整数规划问题?