分布式遗传算法研究
来源:互联网 发布:js 弹出悬浮div窗口 编辑:程序博客网 时间:2024/04/27 19:31
第五章 分布式遗传算法研究
§5.1 分布式遗传算法简介
遗传算法的基本结构及特征决定了它特别适合大规模并行。一些研究表明,在并行或分布式系统上进行演化计算,不仅可以提高解题的速度和解的质量,甚至可以获得超线性的加速比。因而,近年来,关于遗传算法并行实现的研究受到了人们的广泛重视。
分布式遗传算法一般实行粗粒度及群体级并行,各子群体间的相互作用较弱,主要依靠一些几乎串行的遗传算法来加速搜索过程。群体级的并行即是将一个大群体按照硬件的结构划分为一些子群体,这些子群体一般独立地演化,即它们在自身内部进行选择及遗传操作,只是经过一定的代数才在子群体间交流一些信息,即所谓的迁移模型。
在迁移模型中,群体的组织方式通常是一个大群体划分为一些子群体,每个子群体自成为一个单位,只是在子群体之间实行个体的迁移,即个体从一个子群体迁移到另外一个子群体,迁移量的多少通常由两个参数来确定:迁移代频和迁移率。这两个参数的大小以及实行迁移的方式决定了迁移模型之间的差别。若个体的迁移是完全随机的,即从子群体中均匀随机地进行抽样,然后再随机地迁移到另一个群体中,这时可以认为这些子群体是完全独立的,个体的选择和迁移对这些子群体都是对等的,即相当于将这些子群体看成是一些独立的岛屿,个体从一个岛屿到另外一个岛屿的机会是均等的,这种迁移模式称为“岛屿”模式,是研究的比较多的一种模型。在实现并行时,子群体的互连方式既可以是总线形,也可以是环形,或二维阵列,超立方体等。可以根据互连方式的区别来确定子群体间的相邻关系,从而使个体迁移到相邻子群体具有较大的概率,这样进行迁移的方式称为“脚踏石“模型。
§5.2 分布式遗传算法的实现和算法研究
目前随着以高主频Pentium II﹑Pentium III ﹑AMD K-7为代表的高性能微机的逐渐应用,微机的性能已经得到了很大的提高,运算速度已经和以前小型机﹑中型机相当,而网络速度的提高和价格的降低也使得10M﹑100M甚至千兆以太网逐渐普及。进行分布式计算的硬件条件比较容易得到满足。另一方面,高性能并行计算机价格居高不下,大多数人对其软硬件也很不熟悉。所以作者的研究重点自然地放在分布式遗传算法在微机环境下实现的研究上。
从微机操作系统来看,目前最普及的是微软的Windows操作系统(包括Windows 9X系列和NT系列,以及最新的2000系列),以及Linux操作系统,由于作者可以得到的研究环境为高性能的Windows工作站,所以将研究在Windows环境下分布式遗传算法的实现。
如何在Windows环境下进行分布式运算,有较多的方法,以下为其中最常用的几种:
(1)采用微软的DCOM标准;
(2)采用分布式对象CORBA标准;
(3)采用Windows Socket编程;
DCOM技术是微软推荐使用的,比较成熟,开发工具较多。CORBA技术可以跨平台,即可以在Windows和Unix系统下进行通讯,但是开发工具较少,一般都采用Borland公司的Builder系列产品进行开发。目前DCOM和CORBA的技术资料较少,另外DCOM和CORBA的底层实际上也是采用TCP/IP协议实现的,Windows Socket就是在Windows环境下对TCP/IP协议的编程接口,可以认为Windows Socket技术比DCOM和CORBA技术更加底层,同时DCOM和CORBA还有许多面向对象的实现,即可以在网络环境下实现对象的透明访问。这三种技术中,作者最为熟悉的是采用Windows Socket编程。由于本研究的重点不在于建立一个十分完善的分布式环境,所以本章均采用Windows Socket编程。
TCP/IP协议中的传输协议有面向连接的TCP协议和面向无连接的UDP协议,由于作者的实验环境为100M高速局域网,而且传输的数据量也不是太大,所以就选择了效率稍低﹑但编程相对较简单的TCP协议作为传输协议。
分布式实现采用客户服务器方式,即数据的传输只是发生在客户和服务器之间,客户之间无直接的通讯,客户的数据由服务器集中处理。服务器的功能相对比较简单,主要作用是为各个客户传来的数据进行缓冲,等待客户之间的同步,按照一定的策略交换对应于各客户的数据并且将交换后的数据发回给客户。基于客户服务器方式的通讯需要遵循一定的协议,作者采用如下思路建立相应的通讯协议,并将其命名为分布式遗传算法协议DGAP(Distributed Genetic Algorithmic Protocol)。
在分布式遗传规划的计算过程中,各个子群体不允许中途退出,由于遗传规划本身的计算量很大,一般来说一个客户就对应着一台计算机,所以在此与一般的客户服务器程序不同的是,在开始阶段就必须明确知道参与计算的客户(计算工作站)的数量,服务器在所有的客户均与之连接上并经过验证后,给客户下达开始计算的命令,各个客户机开始进行计算,当客户机演化到指定的代数后,计算暂停,各客户分别与服务器进行通讯,上传用于进行交换的个体基因数据,然后等待服务器再次与自己联系,得到服务器经过处理后的基因数据,将这些基因数据转化为相应的个体加入到当前的群体中,继续迭代过程。重复以上过程,直到各个客户端求解结束,输出结果。
在以上过程中,如果发生任何的网络错误,整个的分布式计算即宣告失败。以上模型是基于传统的分布式计算的,在网络环境良好时是可行的,由于实验的背景为高速局域网,该条件可以实现。如果在网络条件不好,比如在广域网上实现时,该模型是不适合的,必须进行适当的修改。
下面是客户和服务器的运行流程:
对于客户:
(1)连接服务器;
(2)输入基本参数并得到验证;
(3)开始计算;
(4)到设定的代数,向服务器发送进行交换个体的基因数据,并等待服务器发回数据;
(5)得到服务器发回的数据,将数据转换为对应的个体,随机替换掉当前群体的个体,继续运算;
对于服务器:
(1)等待客户的连接请求;
(2)接受客户;
(3)验证客户参数,验证失败则给客户发送错误码,成功则继续;
(4)等待客户上传基因数据,如果只得到部分客户的数据,令已发送数据的客户等待;
(5)得到所有客户的数据,交换基因数据,并将数据传回;
通讯协议的实现最有力的工具是采用有限状态机来表示,图5.1是服务器端与客户进行交互的有限状态机,值得强调的是有限状态机对于不同的客户是不同的。
UNCHECKED STATE PARA STATE CHECKED STATE DATA STATE READY STATE
图5.1
有限状态机各个状态转移的条件如下:
(1)如果当前状态为UNCHECKED_STATE,当客户送来命令字串“PARA”时转到状态PARA_STATE;
(2)如果当前状态为PARA_STATE,当客户送来正确的数据串“ID GeneNumber ExchangeMember ExchangeFrequency ”(该数据串的意为,求解问题的代码,此数据相同表示各个客户求解的是同一问题,第二个参数意为交换的个体数,第三个参数意为每个个体的基因数,第四个参数意为交换代频)时转到状态CHECKED_STATE,如果此时是第1个客户在进行通讯,即将其参数作为进行分布式计算的参数,如果不是第1个客户,则要求其参数和已有的参数一致否则服务器发送错误码给客户,并且不做状态转移;
(3)如果当前状态为CHECKED_STATE,当客户送来命令字串“DATA”时转到状态DATA_STATE;
(4)如果当前状态为DATA_STATE,接受客户送来的基因数据,如果数据全了,即各个客户都已将数据送到,则按照一定的策略交换数据,并将数据传回到客户,状态转移到CHECKED_STATE,如果数据未全,进入READY_STAT
E,此时远端客户处于等待数据阶段;
注意这里的状态机之间的转换都是发生在服务器上的,即与客户端实际交互的插口(Socket)相关。
分布式遗传算法程序客户的退出有两种情况:
(1)异常退出(客户端计算出现问题,这时客户给服务器发送命令“ABORT
”,出现这种情况的原因在于客户端发生了错误或是在调试阶段,需要提前中断计算);
(2)正常退出(客户计算结束,这时客户给服务器发送“SUCCESS”;
采用典型的客户服务器,服务器的各个插口是在同一线程中的。所以有效的通讯形式是尽量快地对客户传入的信息进行处理,一般来讲互传的数据不宜过大。单线程的优点是不需考虑同步的问题。当然,采用多线程就会更加灵活,不过编程较复杂,需要考虑线程之间的同步。由于本章的研究重点在于分布式遗传算法本身,所以就没有在多线程方面进行深入的研究。本分布式计算的服务器采用单线程方式。
在本章分布式遗传算法的实现中,选择用于交换个体的方式是常用的轮盘赌,所以在子群体中适应度越高的的个体越容易被选中用于交换。
在服务器端对各个客户个体基因信息的处理采用顺序交换的方式。首先随机地将多个客户排序,然后顺序交换个体的基因信息。以三个客户为例,假设
当前随机的顺序为客户1﹑客户2﹑客户3,那么首先将客户3的个体数据暂存,然后将用客户2的数据替代客户3,客户1的数据替代客户2,最后将暂存的数据替代客户1的数据。即如下图所示:
客户1 客户2 客户3
图5.2
显然本算法采用的是“岛屿”模型。
§5.3 算例
首先求解的算例是 十杆最轻重量设计,图见第三章,设定每隔50代交换一次。遗传算法的复制概率为0.2,变异概率为0.01,群体规模为100,基因长100,不进行摄动。在保留每一代最优个体之后,进行交换,所以,最优个体有可能不被保留。进行交换的个体数取为10。
采用两个客户,分布在两台机器上进行计算,随机运行十次得到表5.1结果:
(表中单位为
客户(1)
客户(2)
客户最好解
不加摄动单客户,随机运行十次
1772.094299
1764.151498
1772.094299
1794.260703
1779.837576
1769.668159
1769.668159
2090.602323
1621.497349
1621.497349
1621.497349
1981.622290
1948.023518
1949.427623
1948.023518
1914.366377
1860.511557
1851.945769
1851.945769
1870.663998
1649.238782
1655.195882
1649.238782
1952.102121
1858.924903
1858.924903
1858.924903
1819.534603
1747.285256
1741.668833
1741.668833
1969.807850
1678.143404
1678.143404
1678.143404
1836.965464
1956.165842
1913.278532
1913.278532
1927.660266
均值1787.2
均值1780.4
均值1780.4
均值1915.7586
最优1621.497349
最优1621.497349
最优1621.497349
最优1794.260703
表5.1
表5.1中的客户最优解是指客户(1)﹑客户(2)中最好解。可以明显看出交换的效果,无论是均值还是最优解,均有了明显的改善。另外一个明显的结果就是各个客户求得的最优解相差很小,这也是各个客户之间相互传递基因数据导致的直接后果。表5.1中不加摄动的单客户的计算结果选自论文的第三章。
如果在交换之后保留当前客户群体的最优个体,即借鉴单客户遗传稳态算法的构想。遗传参数不变,个体在客户机之间的传递方式不变,随机运行十次,计算结果如下表表5.2所示:
客户(1)
客户(2)
客户最好解
不加摄动单客户,随机运行十次
1791.311337
1834.738848
1791.311337
1794.260703
1788.344995
1779.779207
1779.779207
2090.602323
1828.117367
1818.288628
1818.288628
1981.622290
1652.387671
1652.387671
1652.387671
1914.366377
1882.371234
1880.385534
1880.385534
1870.663998
1768.064530
1799.295530
1768.064530
1952.102121
1737.074445
1741.286762
1737.074445
1819.534603
1735.969625
1730.253441
1730.253441
1969.807850
1835.736465
1850.840948
1835.736465
1836.965464
1731.217107
1743.754295
1731.217107
1927.660266
均值1775.05948
均值1783.10109
均值1772.44984
均值1915.7586
最优1652.387671
最优1652.387671
最优1652.387671
最优1794.260703
表5.2
计算的结果与不保留相差不多。可见由于每个子个体均以较大的概率选择适应度高的个体进行交换,这样子群体可以在某种程度上确保整个分布式计算体现出“稳态”。下面考虑在交换前和交换后均保留最优个体,可以期望得到相似的结果。
保持遗传参数不变,个体在客户机之间的传递方式不变,交换前和交换后均保留最优个体,随机运行十次,计算结果如表5.3所示:
客户(1)
客户(2)
客户最好解
不加摄动单客户,随机运行十次
1878.823298
1876.015087
1876.015087
1794.260703
1964.614892
1962.047598
1962.047598
2090.602323
1729.613478
1729.613478
1729.613478
1981.622290
1675.393562
1675.393562
1675.393562
1914.366377
1750.774823
1750.774823
1750.774823
1870.663998
1732.521451
1728.550050
1728.550050
1952.102121
1871.520460
1871.520460
1871.520460
1819.534603
1885.079683
1885.079683
1885.079683
1969.807850
1636.701594
1636.701594
1636.701594
1836.965464
1656.018393
1656.018393
1656.018393
1927.660266
均值1778.10616
均值1777.17147
均值1777.17147
均值1915.7586
最优1636.701594
最优1636.701594
最优1636.701594
最优1794.260703
表5.3
如果单目标遗传规划采用论文第三章提出的摄动算法,遗传参数不变,个体在客户机之间的传递方式不变,随机运行十次,计算结果如表5.4所示:
客户(1)
客户(2)
客户最好解
摄动单客户,随机运行十次
1598.931898
1598.931898
1598.931898
1724.977697
1656.259310
1661.152983
1656.259310
1665.747371
1752.378452
1768.986802
1752.378452
1665.024621
1753.200963
1753.200963
1753.200963
1760.338228
1761.384680
1756.931447
1756.931447
1612.150443
1847.052096
1847.052096
1847.052096
1798.614174
1598.931898
1598.931898
1598.931898
1746.421352
1625.128071
1625.128071
1625.128071
1744.676568
1632.929717
1632.929717
1632.929717
1849.743569
1833.268932
1833.268932
1833.268932
1668.414427
均值1705.9466
均值1707.65148
均值1705.50128
均值1723.61085
最优1598.931898
最优1598.931898
最优1598.931898
最优1612.150443
表5.4
求解的效果相当令人满意,分别有两次求到了我们根据连续最优解估计的离散极小值。摄动单客户,随机运行十次的结果选自论文的第三章。
以上算例说明了采用分布式遗传算法是成功的。
下面讨论不同代频和不同的迁移个体数目的影响,将代频取为25,迁移个体数为5,其他参数不变,且不采用摄动,随机运行十次,计算结果如表5.5所示:
客户(1)
客户(2)
客户最好解
不加摄动单客户,随机运行十次
1622.801693
1622.801693
1622.801693
1794.260703
1845.008027
1845.008027
1845.008027
2090.602323
1752.178929
1750.774823
1750.774823
1981.622290
1670.499889
1670.499889
1670.499889
1914.366377
1693.688327
1671.663078
1671.663078
1870.663998
1948.388613
1922.450332
1922.450332
1952.102121
1677.379262
1677.379262
1677.379262
1819.534603
1680.287235
1680.287235
1680.287235
1969.807850
1845.730776
1845.730776
1845.730776
1836.965464
1640.913910
1640.913910
1640.913910
1927.660266
均值1737.68767
均值1732.7509
均值1732.7509
均值1915.7586
最优1622.801693
最优1622.801693
最优1622.801693
最优1794.260703
表5.5
由上表可以看出减小代频和迁移的个体后,计算性能有所下降。
将分布的计算机增加到3台,将代频取为50,迁移个体数为10,随机运行十次,不采用摄动,计算结果如表5.6所示:
客户(1)
客户(2)
客户(3)
客户最好解
不加摄动单客户,随机运行十次
1628.758793
1628.758793
1628.758793
1628.758793
1794.260703
1625.128071
1625.128071
1689.617165
1625.128071
2090.602323
1610.264504
1610.264504
1610.264504
1610.264504
1981.622290
1636.360915
1635.779321
1636.360915
1635.779321
1914.366377
1746.379959
1724.678412
1726.082517
1724.678412
1870.663998
1611.327932
1646.671487
1611.327932
1611.327932
1952.102121
1688.271429
1680.910223
1688.271429
1680.910223
1819.534603
1692.525138
1700.368177
1690.398283
1690.398283
1969.807850
1614.958654
1614.958654
1615.781165
1614.958654
1836.965464
1632.148599
1632.148599
1632.148599
1632.148599
1927.660266
均值1648.6124
均值1649.96662
均值1652.90113
均值1645.43528
均值1915.7586
最优1610.264504
最优1610.264504
最优1610.264504
最优1610.264504
最优1794.260703
表5.6
求解的总体性能得到进一步的提高。
在上面的算例中各个子群体采用的群体数均为100,现降低为50,其他的参数不变,不采用摄动,随机运行十次,计算结果如表5.7所示:
客户(1)
客户(2)
客户(3)
客户最好解
不加摄动单客户,随机运行十次
1614.717737
1614.717737
1614.717737
1614.717737
1794.260703
1636.360915
1634.375215
1634.375215
1634.375215
2090.602323
1730.535750
1730.535750
1730.535750
1730.535750
1981.622290
1847.392774
1847.392774
1847.392774
1847.392774
1914.366377
1737.855563
1737.855563
1737.855563
1737.855563
1870.663998
1623.964882
1623.964882
1623.964882
1623.964882
1952.102121
1806.033749
1806.033749
1806.033749
1806.033749
1819.534603
1667.309607
1667.309607
1667.309607
1667.309607
1969.807850
1776.182436
1776.182436
1776.182436
1776.182436
1836.965464
1717.176051
1717.176051
1717.176051
1717.176051
1927.660266
均值1715.75295
均值1715.55438
均值1715.55438
均值1715.55438
均值1915.7586
最优1614.717737
最优1614.717737
最优1614.717737
最优1614.717737
最优1794.260703
表5.7
由上表可以看出,进行分布式之后,可以在保持计算性能基本不变的前提下减小群体的规模。
参考文献【37】指出,如果不交换个体即不进行迁移的话,各个客户之中的最优解一般略优于进行迁移后各个客户的最优解,但是进行迁移的分布式遗传算法的平均性能强于不进行迁移的各个客户的平均性能。该文献所依据的遗传算法是传统的遗传算法。
本文作者在计算中也发现了上述现象,同时还发现,进行迁移的分布式遗传算法的最优解,解的发散程度较不进行迁移的遗传算法大为减低,具体表现就是最优解和均值相差不大。所以采用分布式遗传算法是有效的。
下面再计算两个常用的优化算例:
二十五杆最轻重量设计,结构拓扑见图5.3,各杆材料数据相同,
变量组
拉应力
压应力
1
40000
-35092
2-5
40000
-11590
6-9
40000
-17305
10,11
40000
-35092
12,13
40000
-35092
14-17
40000
-6759
18-21
40000
-6759
22-25
40000
-11082
表5.8
工况如下:
工况
载荷节点
x
y
z
1
1
1000
10000
-5000
2
0
10000
-5000
3
500
0
0
6
500
0
0
2
1
0
20000
-5000
2
0
-20000
-5000
表5.9
图5.3
各个客户的群体变量用10位二进制表示,下限为0.01
各个子群体的遗传参数相同,复制概率为0.2,变异概率为0.01。采用三个客户随机运行十次得到的结果如下(单位均为
客户(1)
客户(2)
客户(3)
客户最好解
571.245043
571.245043
571.245043
571.245043
553.787599
553.787599
553.787599
553.787599
557.366130
557.366130
557.366130
557.366130
553.335176
553.335176
553.335176
553.335176
549.329981
549.329981
549.329981
549.329981
554.391384
554.391384
554.079417
554.079417
550.694287
550.798439
551.319769
550.694287
567.190836
567.190836
567.190836
567.190836
559.226085
559.226085
559.226085
559.226085
553.134723
553.134723
553.134723
553.134723
均值556.97012
均值556.98054
均值557.00148
均值556.93893
最优549.329981
最优549.329981
最优549.329981
最优549.329981
表5.10
对于该问题采用规划法中的约束变尺度法可以求得结果为
杆元组
初始值
最优解
1
6.0
0.010000
2
6.0
1.874632
3
6.0
3.074175
4
6.0
0.010000
5
6.0
0.010000
6
6.0
0.697805
7
6.0
1.744224
8
6.0
2.606997
表5.11
可以看出采用分布式遗传算法求解的结果相当满意。而且各个客户的结果相差很小。
72杆结构最轻重量设计,结构拓扑图见图5.4,
1
1-4
2
5-12
3
13-16
4
17-18
5
19-22
6
23-30
7
31-34
8
35-36
9
37-40
10
41-48
11
49-52
12
53-54
13
55-58
14
59-66
15
67-70
16
71-72
表5.11
工况如下:
工况
加载节点
x
y
z
1
1
5000
5000
-5000
2
1
0
0
-5000
2
0
0
-5000
3
0
0
-5000
4
0
0
-5000
表5.12
图5.4
各个客户的群体变量用10位二进制表示,下限为0.1
客户(1)
客户(2)
客户(3)
客户最好解
391.620056
392.930853
395.879890
391.620056
408.732546
407.156988
417.091071
407.156988
402.305167
393.633959
389.778723
389.778723
397.268130
399.885940
398.837360
397.268130
398.660375
397.240431
397.240431
397.240431
394.086546
395.851459
397.682618
394.086546
423.421803
413.607778
413.607778
413.607778
400.270988
392.477760
403.180176
392.477760
421.313826
421.778342
421.698643
421.313826
391.300180
393.477327
394.422355
391.300180
400.223504
403.183229
402.144539
400.223504
395.417922
395.417922
406.276166
395.417922
均值402.05175
均值400.5535
均值403.15331
均值399.29099
最优391.300180
最优392.930853
最优389.778723
最优389.778723
表5.13
对于该问题采用规划法中的约束变尺度法可以求得结果为
杆元组
初始值
最优解
1
6.0
0.156615
2
6.0
0.545346
3
6.0
0.413460
4
6.0
0.565005
5
6.0
0.513471
6
6.0
0.516821
7
6.0
0.100000
8
6.0
0.100000
9
6.0
1.268083
10
6.0
0.512752
11
6.0
0.100000
12
6.0
0.100000
13
6.0
1.892414
14
6.0
0.512741
15
6.0
0.100000
16
6.0
0.100000
表5.14
计算结果令人满意。
从以上的算例可以看出,采用作者提出的分布式遗传算法是有效的,计算的结果令人满意,作者认为采用基于二进制编码的分布式遗传算法是求解中小规模优化问题的一个很好的方法,如果问题的规模不大,可以考虑在客户遗传规划程序中采用本文提出的摄动策略。
§5.4 结论及进一步的工作
本章提出了分布式遗传算法在局域网微机环境下的一种实现,建立一种适用于分布式遗传算法的通讯协议—“DGAP”,个体之间进行迁徙采用的是“岛屿”模型,客户群体中选择进行迁徙的个体采用的是根据适应度进行“轮盘赌”的方式。多个算例表明算法计算性能令人满意。各个群体之间共同维持着一种“稳态”,同时各个子群体的规模可以相应降低。
由于时间的关系,同时也由于分布式遗传算法的内容较多,所以作者认为在分布式遗传算法上还需要做较多的工作。
工作重点之一是研究新的交换方式,比如可以考虑对子群体进行评估,即进行排名,在进行交换时将依据排名的不同而有所区别。比如采用第一名群体与第二名群体交换个体,第二名群体与第三名群体交换个体。这样做的好处是可以防止出现相差过大的群体之间交换个体(即可能出现最差群体与最优群体之间交换数据 ),从而导致分布式遗传算法最优性能的降低。另外可以考虑对不同的客户采用不同的遗传参数(复制概率﹑变异概率等),从而可以在一定程度上增加客户的多样性。
对于问题规模较大﹑模型分析本身就很费时间的优化问题,可以将群体分布到网络环境下进行计算,当然这和一般的分布式遗传算法本质上不同。在此考虑的实际上只是一个群体。可以认为是单个群体的分布式计算。
最后,作者认为,建立一个功能比较完整和自主版权的分布式计算编程环境是很有必要的。最好的方式是基于UDP的Socket编程,这样效率﹑跨平台等方面都有足够的保证,缺点就是编程的难度较大。 当然也可以采用成熟的分布式计算标准DCOM和CORBA。
另外由于教研室计算机数量所限,没有讨论大规模分布式遗传算法需要注意的问题。随着硬件条件的成熟,该方面的研究必然将成为一个重点,实际上美国现在的一些大学和研究机构已经将数千台采用高速局域网(一般为光纤网)互连的高性能计算工作站作为计算集群来求解工程问题。
- 分布式遗传算法研究
- 多目标遗传算法研究
- 遗传算法研究(1)
- 多目标遗传算法研究
- 经典算法研究系列:深入浅出遗传算法
- 经典算法研究系列:深入浅出遗传算法
- 经典算法研究系列:七、深入浅出遗传算法
- 经典算法研究系列:七、遗传算法初探
- 经典算法研究系列:七、深入浅出遗传算法
- 经典算法研究系列:七、深入浅出遗传算法
- 经典算法研究系列:七、深入浅出遗传算法
- 经典算法研究系列:七、深入浅出遗传算法
- 经典算法研究系列:七、深入浅出遗传算法
- 基于遗传算法的高校排课系统研究
- 基于遗传算法的高校排课系统研究
- 遗传算法
- 遗传算法
- 遗传算法
- 多目标遗传算法研究
- 如何重画Windows控件
- 如何走好编程入门之路
- 基于遗传算法的大规模工程优化设计方法初探
- Tutorial for building J2EE Applications using JBOSS and ECLIPSE Chapter 2 part 2
- 分布式遗传算法研究
- Using Windows Forms Controls in Internet Explorer
- OC4J集群
- 卓越网络学习系统计划书
- 关于p4机器上安装oracle8i的问题
- junit学习(摘抄)
- ASP函数详解
- ASP用JMail、CDO发送邮件
- AbleCRM系统功能说明