基因表达式编程(GEP)自学 第【7】天 Python 实现

目录

  • 1. 基因表达式编程 GEP Python 代码
  • 2. 符号回归和数值常数的产生
    • 2.2. GEP中随机常数的控制
  • 3. 简单符号回归问题
    • 3.1 样本数据一:
      • 参数设置:
      • 数据测试结果:
    • 3.2 样本数据二:
      • 参数设置
      • 数据测试结果:
    • 3.3 样本数据三
      • 参数设置
      • 数据测试结果:
    • 3.4 样本数据四
      • 参数设置
      • 数据测试结果:
  • 4.太阳黑子时间序列预测
    • 参数设置
    • 数据测试结果:
  • 5. 鸢尾花分类问题
    • 参数设置
    • 数据测试结果:
  • 6. 求最大值问题
    • 参数设置
    • 数据测试结果:
  • 7. 代码实现整合

1. 基因表达式编程 GEP Python 代码

这次主要任务:

加入DC域,包括:

  • 设置随机常数长度
  • 设置随机常数范围
  • 随机常数的突变
  • DC域特殊的IS转座、IS元素长度设置

加入可增加中性基因

  • 触发加入中性基因条件
  • 中性基因对应值

化简操作:

  • 生成数学式子
  • 对数学式子进行化简

控制部分

  • 根据控制可实现有无连接基因
  • 根据控制可实现有无DC域

其他部分:

  • 自动生成样本数据,实现精度调节,实现输入X,
  • 评估函数加入相对误差计算
  • 实现原IS、RIS元素长度控制
  • 根据终结符个数,自动生成终结符号,自动需要加入‘?’

【PS:结合前边的内容】

基因表达式编程(GEP)自学 第【1】天 Python 实现
基因表达式编程(GEP)自学 第【2】天 Python 实现
基因表达式编程(GEP)自学 第【3】天 Python 实现
基因表达式编程(GEP)自学 第【4】天 Python 实现(代码)
基因表达式编程(GEP)自学 第【5】天 Python 实现(代码)
基因表达式编程(GEP)自学 第【6】天 Python 实现(代码)

2. 符号回归和数值常数的产生

GEP 采用不同的方法来解决常数产生的问题(Ferreira 2001)。GEP 采用一种附加终点“?”和由用来表示随机常数的符号构成的附加域Dc。对每个基因而言,这些随机常数产生于初始种群产生时并被保存在一个数组中。每个随机常数仅在其基因表达的过程中赋值。进一步说来,用一个特殊的算子来向随机常数池中引入遗传变化。该算丁且按对阻机符效乎行变异。而且 GEP的常规算子加上针对 Dc域的转座探作休近.什件中的隐机门效i动名效地在开始运行时产生恰当的多样性,而且通过遗传多样化的作用在以后很容易保持这种多样性。

2.2. GEP中随机常数的控制

要在GEP中实现数值常数很容易。为此在GEP基因中引入一个附加域Dc。从结构上讲,Dc在尾部的后面,和t的长度相等,由代表中间随机常数的符号构成。因此,在基因中生成了具有单独边界的,有自身字符集的另一个区域。对每个基因来说,这些常数在一次运行的初期随机生成。但是它们的循环由变异、转座、重组等常用的遗传算子保证。另外,一种特殊的变异算子允许向随机常数集中一直引入变化,一种针对域的IS转座操作保证常数能够进行更广泛的交换。考虑下面这个单基因的染色体,其头部长度为7(Dc用黑体标识):
在这里插入图片描述
其中终点“?”代表随机常数。这种染色体的表达与以前完全相同:
基因表达式编程(GEP)自学 第【7】天 Python 实现_第1张图片
然后表达式树中的“?”从左到右,从上到下,由 Dc中的符号替换,得到:
基因表达式编程(GEP)自学 第【7】天 Python 实现_第2张图片
这些符号对应的值保存在一个数组中。为了简单起见,数值所代表的为数列中数的顺序。A=(0.611,1.184,2.449,2.98,0.496,2.286,0.93,2.305,2.737,0.755)由染色体(4.8)得到:
基因表达式编程(GEP)自学 第【7】天 Python 实现_第3张图片

3. 简单符号回归问题

3.1 样本数据一:

来自公式
在这里插入图片描述

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

参数设置:

基因表达式编程(GEP)自学 第【7】天 Python 实现_第4张图片

数据测试结果:

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

3.2 样本数据二:

来自公式:
在这里插入图片描述

n an
1 2
2 98
3 426
4 1252
5 2930
6 5910
7 10738
8 18056
9 28602
10 43210

参数设置

基因表达式编程(GEP)自学 第【7】天 Python 实现_第5张图片

数据测试结果:

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

3.3 样本数据三

来源以下公式:
基因表达式编程(GEP)自学 第【7】天 Python 实现_第6张图片
【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

参数设置

基因表达式编程(GEP)自学 第【7】天 Python 实现_第7张图片
【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

3.4 样本数据四

来源以下公式:
在这里插入图片描述
【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

参数设置

基因表达式编程(GEP)自学 第【7】天 Python 实现_第8张图片

数据测试结果:

**********************************************    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

4.太阳黑子时间序列预测

数据:

[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]
处理后

参数设置

基因表达式编程(GEP)自学 第【7】天 Python 实现_第9张图片

数据测试结果:

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

5. 鸢尾花分类问题

鸢尾花分类一个多分类的问题。其中鸢尾花分类的数据集含有4个自变量,分别是萼片长度,萼片宽度,花瓣长度,花瓣宽度。数据中含有150个样本,其中每种鸢尾含有50个样本,鸢尾的种类分别是: Iris setosa, Iris versicolor, Iris vifginica。
数据:

参数设置

【PS:150有点多就不贴数据了】
基因表达式编程(GEP)自学 第【7】天 Python 实现_第10张图片

数据测试结果:

(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:其中的分类计算的适应度,与回归的适应度计算不同,之后在进行相应的更新。】

6. 求最大值问题

在这里插入图片描述
其中x,y的取值范围:
在这里插入图片描述

参数设置

【PS:对于在一定范围内求极值点,就不需要传入数据,需充分利用Dc域作用】
基因表达式编程(GEP)自学 第【7】天 Python 实现_第11张图片

数据测试结果:

**********************************************    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。对于不同的求极值,其计算适应度可进行相应的变化。】

7. 代码实现整合

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
关于博主:评论和私信会在第一时间回复。或者直接私信我。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【点赞】【收藏】一下。您的鼓励是博主的最大动力!

你可能感兴趣的:(GEP,python,开发语言,后端,算法)