这次主要任务:
加入DC域,包括:
加入可增加中性基因
化简操作:
控制部分
其他部分:
【PS:结合前边的内容】
基因表达式编程(GEP)自学 第【1】天 Python 实现
基因表达式编程(GEP)自学 第【2】天 Python 实现
基因表达式编程(GEP)自学 第【3】天 Python 实现
基因表达式编程(GEP)自学 第【4】天 Python 实现(代码)
基因表达式编程(GEP)自学 第【5】天 Python 实现(代码)
基因表达式编程(GEP)自学 第【6】天 Python 实现(代码)
GEP 采用不同的方法来解决常数产生的问题(Ferreira 2001)。GEP 采用一种附加终点“?”和由用来表示随机常数的符号构成的附加域Dc。对每个基因而言,这些随机常数产生于初始种群产生时并被保存在一个数组中。每个随机常数仅在其基因表达的过程中赋值。进一步说来,用一个特殊的算子来向随机常数池中引入遗传变化。该算丁且按对阻机符效乎行变异。而且 GEP的常规算子加上针对 Dc域的转座探作休近.什件中的隐机门效i动名效地在开始运行时产生恰当的多样性,而且通过遗传多样化的作用在以后很容易保持这种多样性。
要在GEP中实现数值常数很容易。为此在GEP基因中引入一个附加域Dc。从结构上讲,Dc在尾部的后面,和t的长度相等,由代表中间随机常数的符号构成。因此,在基因中生成了具有单独边界的,有自身字符集的另一个区域。对每个基因来说,这些常数在一次运行的初期随机生成。但是它们的循环由变异、转座、重组等常用的遗传算子保证。另外,一种特殊的变异算子允许向随机常数集中一直引入变化,一种针对域的IS转座操作保证常数能够进行更广泛的交换。考虑下面这个单基因的染色体,其头部长度为7(Dc用黑体标识):
其中终点“?”代表随机常数。这种染色体的表达与以前完全相同:
然后表达式树中的“?”从左到右,从上到下,由 Dc中的符号替换,得到:
这些符号对应的值保存在一个数组中。为了简单起见,数值所代表的为数列中数的顺序。A=(0.611,1.184,2.449,2.98,0.496,2.286,0.93,2.305,2.737,0.755)由染色体(4.8)得到:
a | f(a) |
---|---|
6.9408 | 44.90975 |
-7.8664 | 7.340925 |
-2.7861 | -4.47712 |
-5.0944 | -2.30674 |
9.4895 | 73.49381 |
-9.6197 | 17.41021 |
-9.4145 | 16.07291 |
-0.1432 | -0.41935 |
0.9107 | 3.146787 |
2.1762 | 8.896523 |
第 1 代,BestFitness= 91.2098452538483
++/*--/aaaaaaaa:+a+a-/*aaaaaaaa:/*+*a-+aaaaaaaa:
a**2/2 + 2*a + 1
**********************************************
********************************************** 完美解 **********************************************
第 2 代 BestFitness= 1000.0
++a*--/aaaaaaaa:+a+a-//aaaaaaaa:/*+*a-+aaaaaaaa:
a*(a + 6)/2
Time: 0.2812916000000001
进程已结束,退出代码0
n | an |
---|---|
1 | 2 |
2 | 98 |
3 | 426 |
4 | 1252 |
5 | 2930 |
6 | 5910 |
7 | 10738 |
8 | 18056 |
9 | 28602 |
10 | 43210 |
SI(没有加入DC域):
**********************************************
第 10 代,BestFitness= 231.47229451708938
-/-/a*aaaaaaa:*aa/-aaaaaaaa:*a**++aaaaaaa:**/*+aaaaaaaa:*+-**+aaaaaaa:
4*a**4 + 4*a**3 + a + 1/a
**********************************************
********************************************** 完美解 **********************************************
第 11 代 BestFitness= 250.0
*a*+a/aaaaaaa:aa*+aaaaaaaaa:*a**++aaaaaaa:/*/a++aaaaaaa:*+-**+aaaaaaa:
a*(4*a**3 + 3*a**2 + 2*a + 1)
Time: 3.5860974
进程已结束,退出代码0
进程已结束,退出代码0
SI*(加入DC域):
**********************************************
第 100 代,BestFitness= 235.40469010273367
?/a?*+aaaa??? : [6, 8, 8, 1, 2, 6, 3] : [1.0, 2.0, 2.0, 0.0, 1.0, 2.0, 1.0, 1.0, 2.0, 0.0]:aaa?**?aaaa?? : [6, 8, 8, 1, 2, 6, 3] : [1.0, 2.0, 2.0, 0.0, 2.0, 2.0, 1.0, 2.0, 2.0, 0.0]:-?/***a?aa??? : [6, 8, 8, 1, 2, 6, 3] : [1.0, 2.0, 2.0, 0.0, 2.0, 2.0, 1.0, 2.0, 2.0, 0.0]:***+**aa?a??a : [6, 8, 8, 1, 1, 2, 6] : [2.0, 1.0, 2.0, 0.0, 2.0, 2.0, 1.0, 2.0, 2.0, 1.0]:-*/-aaa?aa?aa : [4, 6, 7, 4, 1, 0, 4] : [2.0, 2.0, 1.0, 3.0, 2.0, 3.0, 2.0, 3.0, 2.0, 2.0]:
4.0*a**3*(a + 1) - a*(a - 2.0) + 1.0
**********************************************
********************************************** 100 代后最佳解 **********************************************
result_fitness= 247.16234355591035
-?aa*aa?aa?aa : [6, 8, 8, 1, 4, 2, 7] : [1.0, 1.0, 2.0, 0.0, 3.0, 3.0, 1.0, 2.0, 2.0, 2.0]:*-*/a-a??a?aa : [1, 0, 4, 3, 3, 2, 1] : [2.0, 3.0, 0.0, 1.0, 0.0, 1.0, 2.0, 3.0, 1.0, 2.0]:++/-*-?aaaaa? : [0, 4, 2, 7, 5, 1, 7] : [2.0, 1.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 1.0, 0.0]:***+**aa?a??a : [6, 8, 8, 1, 2, 6, 3] : [1.0, 1.0, 2.0, 0.0, 2.0, 2.0, 1.0, 2.0, 2.0, 2.0]:?a-*/+?a?aa?? : [6, 8, 8, 1, 2, 6, 3] : [1.0, 1.0, 2.0, 0.0, 2.0, 2.0, 1.0, 2.0, 2.0, 2.0]:
4.0*a**4 + 3.0*a**3 + 2.5*a**2 - 0.666666666666667*a + 1.33333333333333
Time: 25.5881866
进程已结束,退出代码0
来源以下公式:
【PS:其中a,b,c,d,e 范围为(0,1),一共50个数据。】
0.99193 0.51446 0.88855 0.06328 0.79029 -0.42222062152506784
0.07718 0.34471 0.19925 0.08126 0.29484 -0.1512013809728614
0.82287 0.43778 0.24615 0.0622 0.83879 -0.3954602986232597
0.83438 0.71669 0.09807 0.29046 0.97367 -0.28210317387787076
0.7471 0.13171 0.66232 0.52666 0.04239 1.0097764113037084
0.98846 0.23915 0.15395 0.40494 0.81078 0.3216012776359086
0.93236 0.44798 0.96831 0.49227 0.30461 0.6359058688359684
0.92809 0.34821 0.37718 0.03443 0.25019 0.40394020998396507
0.28268 0.36465 0.48981 0.65657 0.57733 0.28339080364682273
0.76763 0.91717 0.66877 0.47943 0.08352 0.7202268027326734
0.45825 0.13833 0.00582 0.3873 0.20027 0.6261221368625305
0.62673 0.4707 0.98774 0.688 0.70618 0.30081204726726896
0.06912 0.9505 0.96079 0.56281 0.7959 -0.21257337119221936
0.39789 0.37473 0.30688 0.86346 0.92719 0.24547689685726062
0.46164 0.48926 0.12048 0.78961 0.01457 1.3496716583519688
0.3095 0.72947 0.53848 0.82008 0.2926 0.7560128075797033
0.43852 0.58268 0.63833 0.29628 0.36811 0.1857080587713715
0.36645 0.52465 0.47477 0.62426 0.02345 0.9299075506524141
0.01078 0.20631 0.6507 0.92829 0.64129 0.3027694035650446
0.55656 0.3931 0.85669 0.14975 0.23704 0.23044582004046188
0.02924 0.69882 0.29584 0.20773 0.62971 -0.429644169991186
0.42811 0.59082 0.84832 0.47553 0.43669 0.2644539200878486
0.381 0.95329 0.50485 0.28542 0.82228 -0.42789816773868494
0.63559 0.30909 0.75147 0.97976 0.71691 0.6574655929738893
0.06898 0.17357 0.47908 0.14599 0.73447 -0.6139279797237168
0.72515 0.39702 0.08505 0.40135 0.08036 0.9186815624154154
0.05817 0.96856 0.13597 0.86556 0.50271 0.41042949436795306
0.87661 0.86001 0.0169 0.80298 0.06928 1.3988246022856246
0.90255 0.5467 0.88847 0.11495 0.17547 0.36941057568188224
0.71006 0.98573 0.79799 0.75992 0.76704 0.23444000629226522
0.85406 0.62422 0.01176 0.46693 0.33024 0.7457336308869078
0.37059 0.92646 0.26608 0.1177 0.45224 -0.15716336018492863
0.45861 0.13637 0.78788 0.67602 0.54803 0.4244776214231313
0.41163 0.83728 0.66014 0.90249 0.5177 0.5975376837533948
0.14137 0.84849 0.57788 0.10083 0.65656 -0.5512415059946163
0.76896 0.72218 0.69593 0.09933 0.31978 0.14436051149104542
0.01498 0.53541 0.07318 0.5621 0.90048 -0.33949487699720005
0.56211 0.00636 0.21552 0.26212 0.20296 0.5377452930658656
0.14567 0.35905 0.69368 0.74942 0.82572 0.01962107017585056
0.74565 0.13218 0.70319 0.92279 0.51596 0.9040370515004582
0.89078 0.15657 0.25707 0.22643 0.15255 0.7494257668528665
0.62473 0.77432 0.90211 0.6519 0.70128 0.2169085944287869
0.09935 0.32993 0.43387 0.34202 0.46483 -0.04789403232309525
0.68402 0.52862 0.72289 0.79845 0.41408 0.784633121433205
0.07731 0.51948 0.78952 0.79242 0.33704 0.5348850042062976
0.94102 0.15692 0.06074 0.13631 0.73824 0.08737795769423295
0.36994 0.94019 0.73229 0.59673 0.45521 0.2902974380023562
0.34037 0.52937 0.85872 0.55816 0.10205 0.6781723286099974
0.57177 0.52443 0.10768 0.40347 0.86209 -0.04988318270331232
0.19946 0.57805 0.68392 0.99834 0.3046 0.9495289301496511
【PS:Q:sqrt,E:e^(x);S:sin,C:cos,T:tan】:
********************************************** 100 代后最佳解 **********************************************
result_fitness= 4575.405744305627
*sinsina*coscosbca*edcdbaecedecab:-deddsine++tanexpabbaaaeecbdbac:
d - e + sin(a)*sin(cos(b)*cos(c))
Time: 670.7396095
进程已结束,退出代码0
来源以下公式:
【PS:其中因变量保留了6小数,一共40个数据】
数据:
3.86392 1.18173 4.74086 4.58392
4.13431 4.46644 1.41801 6.418971
7.40769 3.1694 3.89634 10.158875
8.02282 6.84999 8.69457 13.889326
7.55535 9.58745 5.07384 13.531566
4.2704 2.72785 6.37575 7.84818
1.44986 7.93916 3.85375 6.893974
3.915 8.65118 0.46589 3.914196
6.35939 6.6132 6.96758 11.930277
0.16971 7.59654 8.69179 6.384901
0.7768 4.30366 7.61851 5.702335
0.90607 1.2336 1.11729 0.365694
4.16957 8.12904 9.24041 10.526933
4.47388 5.4845 6.63127 9.638265
7.93085 6.33989 7.73864 13.49448
0.03836 0.16293 2.82582 -2.638704
1.51326 1.53626 4.95908 3.751748
9.62854 5.88192 5.05282 14.400732
4.65667 1.93825 2.56416 4.157903
9.8598 9.20013 3.20453 15.055684
5.43579 9.00631 4.9716 11.305957
8.90615 5.25885 5.62061 13.593865
2.61804 8.79167 2.85016 7.902673
6.74108 2.44268 9.67327 10.460757
1.03425 0.57348 5.18512 1.140551
1.3899 3.89458 6.21038 5.876111
0.34644 9.72325 5.73989 6.636693
4.49942 4.32224 6.51479 9.12694
0.24211 6.36433 6.96857 5.879464
4.70665 8.55759 5.02114 10.497931
3.49295 7.02955 5.75737 9.053417
0.37841 5.20065 2.47408 4.551995
4.88958 1.22187 9.32541 6.962512
5.06194 3.31222 4.09506 8.399837
7.34237 7.65966 1.74657 11.17604
6.5823 5.59833 7.78299 11.915401
5.38421 5.30825 1.71296 8.364129
3.78736 5.29658 2.67535 7.794576
4.72774 5.00382 6.69609 9.697563
9.06253 6.85194 6.1797 14.492031
********************************************** 1000 代后最佳解 **********************************************
result_fitness= 999.9998183438697
ln*-bc/abccabcccccbaac:a//*/*babccbccbbbbbbc:lnb/-lnba-*bbcbaabbcbac:
(a*log(e) + log(b) + log(-a + b*c))/log(e)
Time: 289.3962677
进程已结束,退出代码0
数据:
[101, 82, 66, 35, 31, 7, 20, 92, 154, 125,
85, 68, 38, 23, 10, 24, 83, 132, 131, 118,
90, 67, 60, 47, 41, 21, 16, 6, 4, 7,
14, 34, 45, 43, 48, 42, 28, 10, 8, 2,
1e-8, 1, 5, 12, 14, 35, 46, 41, 30,
24,16, 7, 4, 2, 8, 17, 36, 50, 62, 67,
71,48, 28, 8, 13, 57, 122, 138, 103, 86,
63,37, 24, 11, 15, 40, 62, 98, 124, 96,
66,64, 54, 39, 21, 7, 4, 23, 55, 94,
96,77, 59, 44, 47, 30, 16, 7, 37, 74]
处理后
SS(没有加入DC域):
**********************************************
第 500 代,BestFitness= 85195.2542368892
-ji+ga+ighgaeah:/ijcec-dfacjdjd:j*cffe*bieefjbg:
-i + i/j + 2*j
**********************************************
********************************************** 500 代后最佳解 **********************************************
result_fitness= 85399.67919072144
-jijbgficbefjjb:/i-hi/*iiifjdfj:j/dfaieegedeigb:
(i + (h - i)*(-i + 2*j))/(h - i)
Time: 593.1848037999999
进程已结束,退出代码0
SS*(加入DC域):
**********************************************
第 500 代,BestFitness= 85399.67919072144
/i-hih+becfjiif : [3, 8, 3, 9, 9, 9, 8, 9] : [0.118498769373534, 0.647888167419013, 0.050084592506132, 0.886897793141401, 0.091397748290483, 0.81499559160092, 0.683418133097667, -0.468533873583754, -0.63409264432283, -0.670588130076901]:-jih-jaafeafgjg : [9, 9, 2, 3, 3, 9, 8, 9] : [-0.434099481411413, -0.897778896207682, -0.436112575119754, 0.991472342195282, 0.147740743610077, 0.456032610727201, 0.921129783142729, -0.403735171041188, -0.755344755091458, -0.403350424522149]:jihjhj-bh?edeb? : [9, 8, 9, 2, 3, 9, 8, 9] : [-0.823041346025364, -0.897778896207682, 0.137699436508055, 0.395386883102979, -0.742405908684189, 0.704590081613101, 0.683418133097667, 0.874314122642751, -0.120490307414403, -0.403350424522149]:
(i + (h - i)*(-i + 2*j))/(h - i)
**********************************************
********************************************** 500 代后最佳解 **********************************************
result_fitness= 85399.67919072144
/i-hih/jddei?ac : [8, 8, 8, 0, 5, 8, 3, 8] : [0.69732715316274, -0.783010751077373, -0.851177099509528, -0.514108891300504, -0.644115954105636, 0.79235597440412, -0.414728384380069, 0.462450960572396, -0.955008818728986, 0.285014207865032]:-jiiaf/j?bjedff : [8, 8, 8, 8, 8, 0, 5, 8] : [0.69732715316274, -0.783010751077373, -0.851177099509528, -0.232362557828261, -0.350968203397269, -0.75177718618264, -0.533144868386809, 0.462450960572396, -0.921910788250858, 0.285014207865032]:ji-e?f?bbbighif : [8, 8, 8, 0, 8, 5, 8, 0] : [0.69732715316274, -0.783010751077373, 0.107401590804095, 0.623731395771651, -0.644115954105636, 0.79235597440412, -0.414728384380069, 0.462450960572396, -0.955008818728986, 0.285014207865032]:
(i + (h - i)*(-i + 2*j))/(h - i)
Time: 502.0849433
进程已结束,退出代码0
鸢尾花分类一个多分类的问题。其中鸢尾花分类的数据集含有4个自变量,分别是萼片长度,萼片宽度,花瓣长度,花瓣宽度。数据中含有150个样本,其中每种鸢尾含有50个样本,鸢尾的种类分别是: Iris setosa, Iris versicolor, Iris vifginica。
数据:
(1)第一个0-1分类,是 Iris setosa 与非 Iris setosa
********************************************** 完美解 **********************************************
第 2 代 BestFitness= 150
b-*cdcddada:*a-baaccadc:a*c--dbbccb://d-bbcacca:b++a-abbdad:
(b*d*(-a*(a - b) + a + 2*b) + b - c)/(b*d)
(2)第二个0-1分类,是 Iris versicolor 与非 Iris versicolor
**********************************************
第 1000 代,BestFitness= 149
--*-adbbbdc:bb-/adcacbd:dd+a/dacdda:-/*-cbbbbdc:/a/-ccbbbcd:
(-a*c + (b - c)*(-a - b**2 - b*d + b + d))/(b - c)
(3)第三个0-1分类,是 Iris vifginica与非 Iris vifginica
**********************************************
第 1000 代,BestFitness= 149
*/d-dccabaa:*//-ccddadc:-/dd-bcadcb:/dda*babbac:-c//bdcdbcb:
c - d + d/(b - c) + 1 - (a - d)/d - d/(b*c)
分类规则:
C1 =1 if (b*d*(-a*(a - b) + a + 2*b) + b - c)/(b*d) > 0.5 else 0
C2 =1 if(-a*c + (b - c)*(-a - b**2 - b*d + b + d))/(b - c) > 0.5 else 0
C3 =1 if c - d + d/(b - c) + 1 - (a - d)/d - d/(b*c) > 0.5 else 0
# 是 Iris setosa类
if C1==1 and C2 == 0 and C3==0:
return 0
# 是 Iris versicolor类
elif C1==0 and C2 == 1 and C3==0:
return 1
# 是 Iris vifginica类
elif C1==0 and C2 == 0 and C3==1:
return 2
分类结果:
**********************************************
正确分类的个数: 149
分类正确率: 99.333333%
【PS:其中的分类计算的适应度,与回归的适应度计算不同,之后在进行相应的更新。】
【PS:对于在一定范围内求极值点,就不需要传入数据,需充分利用Dc域作用】
********************************************** 1000 代后最佳解 **********************************************
result_fitness= 556.6331091807164
max_value= 18.554436972690546
+/*-*-??????? : [8, 9, 4, 4, 9, 2, 4] : [-0.3991, 0.9028, -0.517, -0.6875, -0.2357, 0.7261, 0.1965, -0.7594, 0.2777, -0.2282]:+/--*???????? : [8, 4, 4, 4, 7, 6, 8] : [-0.3991, 0.9028, -0.517, -0.6875, -0.2357, 0.7261, 0.1965, -0.3803, 0.2777, -0.2282]:
[9.03830450026599, 8.66457724961565]
Time: 175.074392
【PS:最大值的基因将不需要用“+”连接。而是一个基因对应一个变量,如两个基因分别对应x,y。对于不同的求极值,其计算适应度可进行相应的变化。】
Python文件分成:main.py ; Environment.py ; Chromosome.py;Gene.py ; Genome.py。
Python代码
【代码】对于代码随机种子的设置random.seed(x),均可删除也建议删除(固定随机种子一般是方便调试找问题,遇到都可以删除)
可咨询相关内容、价格【目前CSDN,资源无法调控制。之后价格显示过高,可私下询问】,避免不必要的尴尬(微笑)。可适当教如何使用。【22-10-30至23-01-01有事在期间可能不能正常回答问题,抱歉。有问题查看1-8的博客是否有提及,有些解释可能对解决问题有些帮助】
本文作者:九重!
本文链接:https://blog.csdn.net/weixin_43798572/article/details/122886611
关于博主:评论和私信会在第一时间回复。或者直接私信我。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【点赞】【收藏】一下。您的鼓励是博主的最大动力!