1 | using System;
|
---|
2 | using System.Collections.Generic;
|
---|
3 | using System.Linq;
|
---|
4 | using HeuristicLab.Random;
|
---|
5 |
|
---|
6 | namespace HeuristicLab.Problems.Instances.DataAnalysis {
|
---|
7 | public class FeynmanLargeInstanceProvider : ArtificialRegressionInstanceProvider {
|
---|
8 | public override string Name {
|
---|
9 | get { return "'AI Feynman' Benchmark Problems (large)"; }
|
---|
10 | }
|
---|
11 |
|
---|
12 | public override string Description {
|
---|
13 | get { return "Problem instances from \"AI Feynman\" paper (Feynman Symbolic Regression Database)"; }
|
---|
14 | }
|
---|
15 |
|
---|
16 | public override Uri WebLink {
|
---|
17 | get { return new Uri("https://space.mit.edu/home/tegmark/aifeynman.html"); }
|
---|
18 | }
|
---|
19 |
|
---|
20 | public override string ReferencePublication {
|
---|
21 | get { return "Udrescu, Silviu-Marian, and Max Tegmark. \"AI Feynman: A physics-inspired method for symbolic regression.\" Science Advances 6.16 (2020): eaay2631."; }
|
---|
22 | }
|
---|
23 |
|
---|
24 | public int Seed { get; private set; }
|
---|
25 |
|
---|
26 | public FeynmanLargeInstanceProvider() : this((int)DateTime.Now.Ticks) { }
|
---|
27 |
|
---|
28 | public FeynmanLargeInstanceProvider(int seed) {
|
---|
29 | Seed = seed;
|
---|
30 | }
|
---|
31 |
|
---|
32 | public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
|
---|
33 | var descriptorList = new List<IDataDescriptor>();
|
---|
34 | var rand = new MersenneTwister((uint)Seed);
|
---|
35 |
|
---|
36 |
|
---|
37 | var noiseRatio = new double?[] { null, 1, 10E-2, 10E-4 };
|
---|
38 |
|
---|
39 | #region types
|
---|
40 | var descriptorTypes = new Type[] {
|
---|
41 | typeof(Feynman1),
|
---|
42 | typeof(Feynman2),
|
---|
43 | typeof(Feynman3),
|
---|
44 | typeof(Feynman4),
|
---|
45 | typeof(Feynman5),
|
---|
46 | typeof(Feynman6),
|
---|
47 | typeof(Feynman7),
|
---|
48 | typeof(Feynman8),
|
---|
49 | typeof(Feynman9),
|
---|
50 | typeof(Feynman10),
|
---|
51 | typeof(Feynman11),
|
---|
52 | typeof(Feynman12),
|
---|
53 | typeof(Feynman13),
|
---|
54 | typeof(Feynman14),
|
---|
55 | typeof(Feynman15),
|
---|
56 | typeof(Feynman16),
|
---|
57 | typeof(Feynman17),
|
---|
58 | typeof(Feynman18),
|
---|
59 | typeof(Feynman19),
|
---|
60 | typeof(Feynman20),
|
---|
61 | typeof(Feynman21),
|
---|
62 | typeof(Feynman22),
|
---|
63 | typeof(Feynman23),
|
---|
64 | typeof(Feynman24),
|
---|
65 | typeof(Feynman25),
|
---|
66 | typeof(Feynman26),
|
---|
67 | typeof(Feynman27),
|
---|
68 | typeof(Feynman28),
|
---|
69 | typeof(Feynman29),
|
---|
70 | typeof(Feynman30),
|
---|
71 | typeof(Feynman31),
|
---|
72 | typeof(Feynman32),
|
---|
73 | typeof(Feynman33),
|
---|
74 | typeof(Feynman34),
|
---|
75 | typeof(Feynman35),
|
---|
76 | typeof(Feynman36),
|
---|
77 | typeof(Feynman37),
|
---|
78 | typeof(Feynman38),
|
---|
79 | typeof(Feynman39),
|
---|
80 | typeof(Feynman40),
|
---|
81 | typeof(Feynman41),
|
---|
82 | typeof(Feynman42),
|
---|
83 | typeof(Feynman43),
|
---|
84 | typeof(Feynman44),
|
---|
85 | typeof(Feynman45),
|
---|
86 | typeof(Feynman46),
|
---|
87 | typeof(Feynman47),
|
---|
88 | typeof(Feynman48),
|
---|
89 | typeof(Feynman49),
|
---|
90 | typeof(Feynman50),
|
---|
91 | typeof(Feynman51),
|
---|
92 | typeof(Feynman52),
|
---|
93 | typeof(Feynman53),
|
---|
94 | typeof(Feynman54),
|
---|
95 | typeof(Feynman55),
|
---|
96 | typeof(Feynman56),
|
---|
97 | typeof(Feynman57),
|
---|
98 | typeof(Feynman58),
|
---|
99 | typeof(Feynman59),
|
---|
100 | typeof(Feynman60),
|
---|
101 | typeof(Feynman61),
|
---|
102 | typeof(Feynman62),
|
---|
103 | typeof(Feynman63),
|
---|
104 | typeof(Feynman64),
|
---|
105 | typeof(Feynman65),
|
---|
106 | typeof(Feynman66),
|
---|
107 | typeof(Feynman67),
|
---|
108 | typeof(Feynman68),
|
---|
109 | typeof(Feynman69),
|
---|
110 | typeof(Feynman70),
|
---|
111 | typeof(Feynman71),
|
---|
112 | typeof(Feynman72),
|
---|
113 | typeof(Feynman73),
|
---|
114 | typeof(Feynman74),
|
---|
115 | typeof(Feynman75),
|
---|
116 | typeof(Feynman76),
|
---|
117 | typeof(Feynman77),
|
---|
118 | typeof(Feynman78),
|
---|
119 | typeof(Feynman79),
|
---|
120 | typeof(Feynman80),
|
---|
121 | typeof(Feynman81),
|
---|
122 | typeof(Feynman82),
|
---|
123 | typeof(Feynman83),
|
---|
124 | typeof(Feynman84),
|
---|
125 | typeof(Feynman85),
|
---|
126 | typeof(Feynman86),
|
---|
127 | typeof(Feynman87),
|
---|
128 | typeof(Feynman88),
|
---|
129 | typeof(Feynman89),
|
---|
130 | typeof(Feynman90),
|
---|
131 | typeof(Feynman91),
|
---|
132 | typeof(Feynman92),
|
---|
133 | typeof(Feynman93),
|
---|
134 | typeof(Feynman94),
|
---|
135 | typeof(Feynman95),
|
---|
136 | typeof(Feynman96),
|
---|
137 | typeof(Feynman97),
|
---|
138 | typeof(Feynman98),
|
---|
139 | typeof(Feynman99),
|
---|
140 | typeof(Feynman100),
|
---|
141 | typeof(FeynmanBonus1),
|
---|
142 | typeof(FeynmanBonus2),
|
---|
143 | typeof(FeynmanBonus3),
|
---|
144 | typeof(FeynmanBonus4),
|
---|
145 | typeof(FeynmanBonus5),
|
---|
146 | typeof(FeynmanBonus6),
|
---|
147 | typeof(FeynmanBonus7),
|
---|
148 | typeof(FeynmanBonus8),
|
---|
149 | typeof(FeynmanBonus9),
|
---|
150 | typeof(FeynmanBonus10),
|
---|
151 | typeof(FeynmanBonus11),
|
---|
152 | typeof(FeynmanBonus12),
|
---|
153 | typeof(FeynmanBonus13),
|
---|
154 | typeof(FeynmanBonus14),
|
---|
155 | typeof(FeynmanBonus15),
|
---|
156 | typeof(FeynmanBonus16),
|
---|
157 | typeof(FeynmanBonus17),
|
---|
158 | typeof(FeynmanBonus18),
|
---|
159 | typeof(FeynmanBonus19),
|
---|
160 | typeof(FeynmanBonus20)
|
---|
161 | };
|
---|
162 | #endregion
|
---|
163 |
|
---|
164 |
|
---|
165 | foreach (var n in noiseRatio) {
|
---|
166 | foreach (var type in descriptorTypes) {
|
---|
167 | descriptorList.Add((IDataDescriptor)Activator.CreateInstance(type, rand.Next(), 10000, 10000, n));
|
---|
168 | }
|
---|
169 | }
|
---|
170 | return descriptorList.ToList();
|
---|
171 | }
|
---|
172 | }
|
---|
173 | } |
---|