Free cookie consent management tool by TermsFeed Policy Generator

Ticket #2704: Expression Generator Code Sample.cs

File Expression Generator Code Sample.cs, 2.4 KB (added by bburlacu, 7 years ago)
Line 
1public static Expression Polynomial(IRandom uniformRandom, Expression[] variables, bool useLog, bool useExp) {
2    var sumTemplate = new RandomArityTemplate(Sum, new UniformDistributedRandom(uniformRandom, 1, variables.Length)) { Label = "+" };
3    sumTemplate.AddArguments(variables);
4
5    var productTemplate = new RandomArityTemplate(Product, new UniformDistributedRandom(uniformRandom, 1, variables.Length)) { Label = "*" };
6    productTemplate.AddArguments(variables);
7
8    const int count = 10; // how many instances of each template should be produced?
9    int i = 1;
10
11    var logTemplate = new FixedArityTemplate(Log, 1) { Label = "log" };
12    logTemplate.AddArguments(variables);
13    logTemplate.AddArguments(Enumerable.Range(1, count).Select(x => sumTemplate.Instantiate(string.Format("sum{0}", i++), uniformRandom)));
14
15    var expTemplate = new FixedArityTemplate(Exp, 1) { Label = "exp" };
16    expTemplate.AddArguments(variables);
17    expTemplate.AddArguments(Enumerable.Range(1, count).Select(x => productTemplate.Instantiate(string.Format("prod{0}", i++), uniformRandom)));
18
19    var inverseTemplate = new FixedArityTemplate(Division, 1) { Label = "/" };
20    inverseTemplate.AddArguments(variables);
21    inverseTemplate.AddArguments(Enumerable.Range(1, count).Select(x => sumTemplate.Instantiate(string.Format("sum{0}", i++), uniformRandom)));
22    inverseTemplate.AddArguments(Enumerable.Range(1, count).Select(x => productTemplate.Instantiate(string.Format("prod{0}", i++), uniformRandom)));
23    inverseTemplate.AddArguments(Enumerable.Range(1, count).Select(x => logTemplate.Instantiate(string.Format("log{0}", i++), uniformRandom)));
24    inverseTemplate.AddArguments(Enumerable.Range(1, count).Select(x => expTemplate.Instantiate(string.Format("exp{0}", i++), uniformRandom)));
25
26    var template = new RandomArityTemplate(Sum, new UniformDistributedRandom(uniformRandom, 2, count)) { Label = "+" };
27    template.AddArguments(variables);
28    template.AddArguments(Enumerable.Range(1, count).Select(x => logTemplate.Instantiate(string.Format("log{0}", i++), uniformRandom)));
29    template.AddArguments(Enumerable.Range(1, count).Select(x => expTemplate.Instantiate(string.Format("exp{0}", i++), uniformRandom)));
30    template.AddArguments(Enumerable.Range(1, count).Select(x => inverseTemplate.Instantiate(string.Format("inv{0}", i++), uniformRandom)));
31
32    return template.Instantiate("polynomial", uniformRandom);
33}